Apache Thrift ist eine Schnittstellenbeschreibungssprache bzw. ein Kommunikationsprotokoll für interoperable und skalierbare Dienste. Es kombiniert einen Software-Protokollstapel mit einer Generatorkomponente zur Erstellung von Services, die nahtlos zwischen ActionScript, C, C++, C#, Cappuccino, Cocoa, Delphi, Erlang, Go, Haskell, Java, JavaScript, Objective-C, OCaml, Perl, PHP, Python, Ruby und Smalltalk sowie anderen Sprachen operieren können.
Entwicklung und Beschreibung
Das Projekt fand seinen Ursprung bei der Social-Network-Plattform Facebook, um die Entwicklung von hochskalierbaren Backend-Services zu unterstützen. Das Apache-Thrift-Projekt ist ein Software-Entwicklungsprojekt der Apache Software Foundation und wird unter der Apache-2.0-Lizenz veröffentlicht.
Durch eine einfache und geradlinige Schnittstellenbeschreibungssprache (Interface Definition Language, IDL) werden verschiedene Thrift-Typen definiert. Die Verarbeitung dieser Thrift-IDL-Dateien erfolgt durch einen implementierten Codegenerator, welcher den betreffenden Code für die verschiedenen Zielsprachen produziert.
Im Zuge der steigenden Bedürfnisse und einer Analyse durch Entwickler der Social-Network-Plattform Facebook wurden Funktionen gesucht, die bereits Bestehenden an Interoperabilität, Effizienz, Datenverkehrsleistung und Einfachheit übertreffen sollten. Aus dieser Notwendigkeit heraus entwickelten Facebook-Ingenieure effizientere Protokolle und Dienste, die in weiterer Folge zu Thrift wurden. Das soziale Netzwerk Facebook nutzt nun Thrift für seine Back-End-Services.
Thrift-Architektur
Thrift beinhaltet einen kompletten Software-Protokollstapel für die Erstellung von Clients und Servern. Der obere Teil des Stapel-Codes wird aus der Thrift-Definitionsdatei generiert, wodurch diese den benötigten Client- und Prozessorcode beinhalten. Die gesendeten Datenstrukturen, ausgenommen integrierten Typen, sind ebenfalls in erzeugtem Code inkludiert. Protokoll und Transport sind Teile der Thrift-Laufzeitbibliothek.
Die in Thrift beinhaltete Server-Infrastruktur fügt Protokolle und Transporte zusammen und bindet diese aneinander. Der Basiswert I/O als Abschnitt des Stapels hängt von der betreffenden Sprache ab. Für Java- und Python-Netzwerke werden die implementierten Bibliotheken genutzt, während für C++-Implementierungen eine eigene Umsetzung erfolgt.
Unterstützte Protokolle
Thrift unterstützt sowohl Textprotokolle als auch binäre Protokolle. Die binären Protokolle sind generell performanter als die Text-Protokolle, allerdings weniger gut zur Fehlersuche geeignet. Einige der Protokolle die Thrift unterstützt:
- TBinaryProtocol
- Eine Binärformat-Codierung, die numerische Werte binär darstellt, anstelle von Textkonvertierungen.
- TCompactProtocol
- Eine effiziente Compact-Codierung, die die betreffenden Daten komprimiert.
- TDenseProtocol
- Ähnlich dem TCompactProtocol, jedoch entfernt dieses die Metainformationen der übertragenen Daten und fügt diese wieder bei der Übertragung an den Empfänger ein.
- TJSONProtocol
- Dieses Protokoll verwendet JSON für die Codierung der Daten.
- TSimpleJSONProtocol
- Ein Schreibprotokoll mit JSON. Geeignet für das Parsen von Skriptsprachen.
- TDebugProtocol
- Dieses Protokoll formatiert in lesbare Textformate für das Debugging.
Weblinks
- Apache Thrift Webseite (englisch)
- Apache Thrift Whitepaper (englisch, PDF, 221 kB)
- Tutorialseite Apache Thrift (englisch)
- Testing von Apache Thrift im Vergleich zu REST-Services (Java-Spektrum 2/2012, deutsch, PDF, 282 kB)
Einzelnachweise
- ↑ Andrew Prunicki: Apache Thrift. In: Object Computing. Juni 2009, abgerufen am 6. September 2023 (englisch).