아파치 트리프트
Apache Thrift![]() |
![]() | |
원저작자 | 페이스북, 주식회사 |
---|---|
개발자 | Apache 소프트웨어 재단 |
안정된 릴리스 | 2022년 2월 15일 0.16.0, 전( |
저장소 | 절약 저장소 |
기입처 | ActionScript, C, C#, C++, D, Dart, Delphi, Erlang, Go, Haskell, Haxe, Java, JavaScript, Node.js, OCaml, Perl, PHP, Python, Rust, Scala, SmallTalk |
유형 | 리모트 프로시저 호출 프레임워크 |
면허증. | 아파치 2.0 |
웹 사이트 | thrift |
Thrift는 수많은 프로그래밍 언어에 [2]대한 서비스를 정의하고 생성하는[1] 데 사용되는 인터페이스 정의 언어이자 이진 통신 프로토콜입니다.페이스북에서 "확장 가능한 크로스 언어 서비스 개발"을 위해 개발되었으며, 2020년 현재 Apache Software Foundation의 오픈 소스 프로젝트입니다.
원격 과정과 함께 암호를 세대 엔진과 액션 스크립트, C, C++,[3]C#, Cappuccino,[4]가 아닌 코코아, 델피, 얼랑, 가 해스켈, 자바, 자바 스크립트, 오브젝티브-C, OCaml, 펄 등 어느 애플리케이션 언어와 틀의 다양한로 쓰여진 연결할 수 있는 플랫폼 간에 서비스를 만들기 위해 소프트웨어 스택을 결합한 것(원격 프로시저 호출)프레임워크라고 부른다., PHP,Python, Ruby, Elixir,[5] Rust, Scala, Smalltalk 및 [6]Swift.이 구현은 현재 [7][8]Apache에서 호스팅되고 있는 Facebook이 발표한 2007년 4월 기술 문서에서 설명되었습니다.
아키텍처
절약에는 클라이언트와 [9]서버를 작성하기 위한 완전한 스택이 포함됩니다.상단 부분은 Trift 정의에서 생성된 코드입니다.이 파일에서 서비스는 클라이언트 및 프로세서 코드를 생성합니다.내장된 유형과 달리 생성된 데이터 구조는 생성된 코드로 전송됩니다.프로토콜 및 전송 계층은 런타임 라이브러리의 일부입니다.Trift를 사용하면 코드를 다시 컴파일하지 않고도 서비스를 정의하고 프로토콜과 전송을 변경할 수 있습니다.클라이언트 부분 외에도 Trift에는 블로킹, 논블로킹 및 멀티스레드 서버와 같은 프로토콜과 전송을 연결하는 서버 인프라가 포함되어 있습니다.스택의 기본 I/O 부분은 언어에 따라 다르게 구현됩니다.
Thrift는 다음과 같은 [9]다양한 프로토콜을 지원합니다.
- TBinary Protocol – 간단한 바이너리 포맷으로 공간 효율에 최적화되지 않았습니다.텍스트 프로토콜보다 처리 속도는 빠르지만 디버깅은 더 어렵습니다.
- TCompact Protocol – 보다 콤팩트한 바이너리 포맷.일반적으로 처리 효율도 향상됩니다.
- TJSONProtocol – 데이터 인코딩에 JSON을 사용합니다.
- TSIMPLEJSONProtocol – JSON을 사용하여 메타데이터를 삭제하기 때문에 Thrift에서 구문 분석할 수 없는 쓰기 전용 프로토콜입니다.스크립트 [10]언어별 해석에 적합합니다.
지원되는 전송은 다음과 같습니다.
- TSimple File Transport: 이 전송은 파일에 씁니다.
- TFramedTransport: 이 전송은 비블로킹서버를 사용하는 경우에 필요합니다.각 프레임 앞에 길이 정보가 있는 프레임으로 데이터를 전송합니다.
- TMemory Transport – I/O에 메모리를 사용합니다.Java 구현에서는 다음과 같은 간단한 기능을 사용합니다.
ByteArrayOutputStream
내부적으로 - TSocket – 전송에 블록 소켓 I/O를 사용합니다.
- TZlibTransport – zlib을 사용하여 압축을 수행합니다.다른 운송 수단과 함께 사용됩니다.
또한 Srift는 다음과 같은 다수의 서버를 제공합니다.
- TNonblocking Server: 비블로킹 I/O를 사용하는 멀티 스레드 서버(자바 실장에서는 NIO 채널을 사용합니다).TFramedTransport는 이 서버에서 사용해야 합니다.
- TSimple Server – 표준 블로킹 I/O를 사용하는 싱글 스레드 서버.테스트에 도움이 됩니다.
- TThreaded Server – 접속 모델별 스레드와 표준 블로킹 I/O를 사용하는 멀티 스레드 서버.
- TThreadPoolServer – 스레드 풀과 표준 블로킹 I/O를 사용하는 멀티 스레드 서버.
혜택들
절약의 장점에는 다음과 같은 것이 있습니다.[citation needed]
- 바이너리 포맷을 사용하기 때문에 SOAP 등의 대체 제품보다 오버헤드가 적은 크로스 언어 시리얼라이제이션.
- XML 구성 파일이 없습니다.
- 언어의 바인딩은 자연스러운 느낌입니다.예를 들어 Java는
ArrayList<String>
. C++ 사용std::vector<std::string>
. - 애플리케이션 레벨의 와이어 형식과 시리얼라이제이션 레벨의 와이어 형식은 완전히 분리되어 있습니다.이들은 개별적으로 수정할 수 있습니다.
- 미리 정의된 직렬화 스타일에는 이진, HTTP 친화 및 소형 이진 등이 있습니다.
- 다국어 파일 시리얼라이제이션의 2배가 됩니다.
- 프로토콜의 소프트 버전[clarify] 관리.절약에는 메이저버전/마이너버전과 같은 중앙집중적이고 명시적인 메커니즘이 필요하지 않습니다.느슨하게 결합된 팀은 RPC 콜을 자유롭게 진화시킬 수 있습니다.
- 빌드 의존관계나 비표준 소프트웨어 없음호환되지 않는 소프트웨어 라이선스는 혼재되어 있지 않습니다.
알뜰 서비스 생성
Thrift는 C++로 작성되지만 여러 언어의 코드를 만들 수 있습니다.Trift 서비스를 만들려면 서비스를 설명하는 Trift 파일을 작성하고 대상 언어로 코드를 생성하고 서버를 시작하는 코드를 작성하여 클라이언트에서 호출해야 합니다.이러한 설명 파일의 코드 예를 다음에 나타냅니다.
열거하다 전화 타입 { 집입니다, 일하다., 모바일., 다른. } 구조 전화 { 1: i32 아이디, 2: 스트링 번호, 3: 전화 타입 유형 } 서비스 전화 서비스 { 전화 검색 기준 ID(1: i32 아이디), 목록.< >전화> 모두 검색() }
절약은 이 설명 정보에서 코드를 생성합니다.예를 들어 Java에서는PhoneType
심플한 내부가 될 것이다.Phone
학급.
「 」를 참조해 주세요.
레퍼런스
- ^ "Installing and using Apache Cassandra With Java Part 4 (Thrift Client)". Sodeso – Software Development Solutions. Retrieved 2011-03-30.
Thrift is a separate Apache project which is a binary communication protocol
- ^ Andrew Prunicki. "Apache Thrift: Introduction". Object Computing. Retrieved 2011-04-11.
Through a simple and straightforward Interface Definition Language (IDL), Thrift allows [users] to define and create services which are both consumable by and serviceable by numerous languages. Using code generation, Thrift creates a set of files which can then be used for creating clients and/or servers. In addition to interoperability, Thrift can be very efficient through a unique serialization mechanism that is efficient in both time and space.
- ^ 절약 요건, Windows 지원에 대해서는 이 문제를 참조해 주세요.
- ^ 프레드 포터, Wayback Machine에서 카푸치노와 함께 절약 사용 2011-08-12, Parallel48의 포스터처럼 관능적인 블로그, 2010년 6월 10일.
- ^ pinterest/elixir-thrift, Pinterest, 2020-02-05, retrieved 2020-02-06
- ^ Andrew Prunicki. "Apache Thrift: Code Generation". Object Computing. Retrieved 2011-04-12.
Thrift supports many programming languages too varying degrees. The complete list is below. Be careful before assuming that just because your language has some support that it supports all of Thrift's features. Python for example, only supports TBinaryProtocol. Cocoa, C++, C#, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, and Smalltalk
- ^ Mark Slie, Adita Agarwal, Marc Kwiatkowski, Slift: 확장 가능한 크로스 랭귀지 서비스
- ^ "LibraryFeatures - Thrift Wiki". Retrieved 2016-04-21.
- ^ a b Andrew Prunicki. "Apache Thrift: Introduction". Object Computing. Retrieved 2011-04-11.
The top portion of the stack is generated code from your Thrift definition file. Thrift services result in generated client and processor code. These are represented by the brown boxes in the diagram. The data structures that are sent (other than built-in types) also result in generated code. These result in the red boxes. The protocol and transport are part of the Thrift runtime library. Therefore with Thrift, you can define a service, and are free to change the protocol and transport without re-generating your code. Thrift also includes a server infrastructure to tie the protocols and transports together. There are blocking, non-blocking, single and multi-threaded servers available. The "Underlying I/O" portion of the stack differs based on the language in question. For Java and Python network I/O, the built-in libraries are leveraged by the Thrift library, while the C++ implementation uses its own custom implementation.
- ^ Skelton, Steven. "Developer Friendly Thrift Request Logging". Retrieved 3 July 2014.