Thrift ist eine Schnittstellendefinitionssprache und ein binäres Kommunikationsprotokoll [ 2 ], das zur Definition und Erstellung von Diensten für Programmiersprachen verwendet wird . [ 3 ] Es wurde von Facebook entwickelt und ist seit 2008 ein Open-Source- Projekt der Apache Software Foundation .
Es nutzt ein RPC-Framework ( Remote Procedure Call ) und kombiniert einen Software-Stack mit einer Code-Generierungs-Engine, um plattformübergreifende Dienste zu erstellen. Thrift kann Anwendungen verbinden, die in einer Vielzahl von Sprachen und Frameworks geschrieben sind, darunter ActionScript , C , C++ , [ 4 ] C# , [ 5 ] Cocoa , Delphi , Erlang , Go , Haskell , Java , JavaScript , Objective-C , OCaml , Perl , PHP , Python , Ruby , Elixir , Rust , Scala , Smalltalk und Swift . [ 6 ] Die Implementierung wurde in einem technischen Paper beschrieben, das im April 2007 von Facebook veröffentlicht und nun auf Apache gehostet wird. [ 7 ] [ 8 ]
Architektur

Thrift umfasst einen vollständigen Stack zur Erstellung von Clients und Servern. [ 9 ] Der oberste Teil besteht aus generiertem Code aus der Thrift-Definition. Aus dieser Datei generieren die Dienste Client- und Prozessorcode. Im Gegensatz zu integrierten Datentypen werden die erstellten Datenstrukturen als Ergebnis des generierten Codes gesendet. Protokoll- und Transportschicht sind Teil der Laufzeitbibliothek . Mit Thrift ist es möglich, einen Dienst zu definieren und Protokoll und Transport zu ändern, ohne den Code neu kompilieren zu müssen. Neben dem Client-Teil beinhaltet Thrift Serverinfrastruktur wie blockierende, nicht-blockierende und Multithread -Server. Die zugrunde liegende I/O-Schicht des Stacks ist für verschiedene Programmiersprachen unterschiedlich implementiert. [ 9 ]
Thrift unterstützt eine Reihe von Protokollen: [ 9 ]
- TBinaryProtocol – Ein Binärformat, das nicht für optimale Speichereffizienz optimiert ist . Die Verarbeitung ist schneller als beim Textprotokoll.
- TCompactProtocol – Kompakteres Binärformat.
- TJSONProtocol – Verwendet JSON zur Datenkodierung.
- TSimpleJSONProtocol – Ein reines Schreibprotokoll, das von Thrift nicht geparst werden kann, da es Metadaten mithilfe von JSON verwirft. Geeignet für die Verarbeitung durch Skriptsprachen. [ 10 ]
Folgende Transportprotokolle werden unterstützt :
- TSimpleFileTransport – Dieser Transport schreibt in eine Datei.
- TFramedTransport – Dieser Transport ist erforderlich, wenn ein nicht-blockierender Server verwendet wird. Er sendet Daten in Frames, denen jeweils Längeninformationen vorangestellt sind.
- TMemoryTransport – Nutzt Speicher für E/A . Die Java-Implementierung verwendet
ByteArrayOutputStreamintern eine einfache Methode. - TSocket – Verwendet blockierende Socket-E/A für die Übertragung.
- TZlibTransport – Führt die Komprimierung mit zlib durch . Wird in Verbindung mit einem anderen Transport verwendet.
Thrift bietet außerdem eine Reihe von Servern an, nämlich:
- TNonblockingServer – Ein Multithread-Server mit nicht-blockierender Ein-/Ausgabe (die Java-Implementierung verwendet NIO- Kanäle). TFramedTransport muss mit diesem Server verwendet werden.
- TSimpleServer – Ein Single-Thread-Server mit standardmäßiger blockierender E/A.
- TThreadedServer – Ein Multithread-Server, der ein Thread-pro-Verbindung-Modell und standardmäßige blockierende E/A verwendet.
- TThreadPoolServer – Ein Multithread-Server, der einen Thread-Pool und standardmäßige blockierende E/A verwendet.
Thrift ist in C++ geschrieben, kann aber Code für einige andere Programmiersprachen generieren. Um einen Thrift-Dienst zu erstellen, müssen Thrift-Dateien geschrieben werden, die den Dienst beschreiben. Anschließend wird der Code in der Zielsprache generiert, Code zum Starten des Servers geschrieben und dieser vom Client aufgerufen. Ein Beispiel für eine solche Beschreibungsdatei:
enum PhoneType { HOME , WORK , MOBILE , OTHER }struct Phone { 1 : i32 id , 2 : string number , 3 : PhoneType type }service PhoneService { Phone findById ( 1 : i32 id ), list < Phone > findAll ( ) }PhoneTypeThrift generiert den Code aus diesen beschreibenden Informationen. In Java befindet sich der Code beispielsweise enuminnerhalb der PhoneKlasse.
Siehe auch
Referenzen
- ^ „Apache Thrift – Downloads“ . Abgerufen am 27. September 2024 .
- ^ „Installation und Verwendung von Apache Cassandra mit Java, Teil 4 (Thrift-Client)“ . Sodeso – Softwareentwicklungslösungen. Archiviert vom Original am 31. März 2022. Abgerufen am 30. März 2011.
Thrift ist ein separates Apache-Projekt und ein binäres Kommunikationsprotokoll
. - ^ Prunicki, Andrew. „Apache Thrift: Einführung“ . Object Computing . Archiviert vom Original am 23. Juli 2011. Abgerufen am 11. April 2011.
Mithilfe der Codegenerierung erstellt Thrift eine Reihe von Dateien, die anschließend zur Erstellung von Clients und/oder Servern verwendet werden können.
- ^ „ThriftRequirements“ . Apache Software Foundation . Archiviert vom Original am 26. Februar 2024. Abgerufen am 22. Juni 2024 .
- ^ Fred Potter, Using Thrift with Cappuccino Archiviert 2011-08-12 at the Wayback Machine , parallel48's posterously luscious blog, 10 June 2010.
- ^ Andrew Prunicki. „Apache Thrift: Code Generation“ . Object Computing . Archiviert vom Original am 23. Juli 2011. Abgerufen am 12. April 2011 .
- ^ Mark Slee, Aditya Agarwal, Marc Kwiatkowski, Thrift: Scalable Cross-Language Services Implementation
- ^ „LibraryFeatures“ . Apache Software Foundation . 11. Juli 2019. Archiviert vom Original am 3. Mai 2023. Abgerufen am 21. April 2016 .
- ^ a b c Andrew Prunicki. „Apache Thrift: Einführung“ . Object Computing . Archiviert vom Original am 23. Juli 2011. Abgerufen am 11. April 2011 .
- ^ Skelton, Steven (3. August 2013). „Entwicklerfreundliche Protokollierung von Thrift-Anfragen“ . stevenskelton.ca . Archiviert vom Original am 24. Januar 2024. Abgerufen am 3. Juli 2014 .