Autor | Apache Software Foundation |
---|---|
Aktualna wersja stabilna | 0.9.3 |
System operacyjny | GNU/Linux, OS X, Windows |
Rodzaj | Remote procedure call framework |
Licencja | Apache License 2.0 |
Strona internetowa |
Thrift – język opisu interfejsu IDL, używany do definiowania i tworzenia obsługi wielu języków. Jest używany jako framework zdalnego wywołania procedury (RPC) i został opracowany przy tworzeniu portalu internetowego Facebook do rozwoju skalowalnych usług dla wielu języków ("scalable cross-language services development"). Łączy on stos oprogramowania z silnikiem generowania kodu do tworzenia usług, które w różnym stopniu współpracują wydajnie i bezproblemowo między C#, C++ (na systemach POSIX-compliant), Cappuccino, Cocoa, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby i Smalltalk. Mimo iż został on opracowany przy Facebooku, teraz jest projektem open source w inkubatorze Apache Software Foundation. Realizacja projektu została opisana w kwietniu 2007 r. w dokumentacji technicznej wydanej przez Facebook, a teraz jest hostowana na Apache. Mówiąc wprost Apache Thrift to protokół komunikacji binarnej.
Thrift zawiera pełny zestaw do tworzenia klientów i serwerów. Główną częścią zestawu jest kod wygenerowany z Twojego pliku definicyjnego Thriftu. Usługi Thrift skutkują wygenerowaniem z tego pliku klienta i kodu maszynowego. W odróżnieniu od wbudowanych typów, stworzone struktury danych są wysyłane w postaci wyniku do generowanego kodu. Warstwa protokołu i transportu są częścią biblioteki wykonawczej Thrift. Dlatego też z Thrift można zdefiniować usługi, które mają prawo zmienić protokół i transport bez konieczności ponownego tworzenia kodu. Thrift obejmuje również infrastrukturę serwera, aby powiązać protokoły i transporty. Z dostępnych serwerów mamy do wyboru blokujące, nieblokujące, pojedyncze, jak również wielowątkowe. Podstawowe elementy zestawów obsługujących wejście/wyjście (I/O) są już uzależnione od danego języka. Dla języka Java i Python biblioteki we/wy są wbudowane w bibliotekę Thrift, podczas gdy implementacja języka C++ używa swoich własnych rozwiązań.
Thrift wspiera wiele protokołów:
Jak również wiele transportów:
ByteArrayOutputStream
wewnętrznie.Thrift również dostarcza serwery takie jak:
Korzyści wynikające z użycia Thrifta:
ArrayList<String>
. C++ używa std::vector<std::string>
.Thrift jest pisany w języku C++, ale może utworzyć kod dla wielu innych języków. Do stworzenia serwisu Thrift, najpierw trzeba zapisać pliki Thrift opisujące go, wygenerować kod w docelowym języku i napisać kod, aby uruchomić serwer i wywołać go od klienta. Oto przykładowy kod pliku opisu:
enum PhoneType
{
HOME,
WORK,
MOBILE,
OTHER
}
struct Phone
{
1: i32 id,
2: string number,
3: PhoneType type
}
Thrift wygeneruje kod z tego opisu. Na przykład w języku Java, kod PhoneType
po prostu enum
wewnątrz POJO dla klasy Phone
.