Najlepsze pytania
Chronologia
Czat
Perspektywa

Apache Thrift

język opisu interfejsu IDL Z Wikipedii, wolnej encyklopedii

Remove ads

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.

Szybkie fakty Autor, Aktualna wersja stabilna ...
Remove ads

Architektura

Podsumowanie
Perspektywa

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:

  • TBinaryProtocol – binarny format typu straight-forward kodujący wartości liczbowe jako binarne. Jest szybszy niż protokół tekstowy, aczkolwiek o wiele trudniejszy do debugowania.
  • TCompactProtocol – bardzo wydajny w gęstym kodowaniu danych.
  • TDebugProtocol – używa tekstu w formacie czytelnym dla człowieka, aby ułatwić debugowanie.
  • TDenseProtocol – podobny do TCompactProtocol, rozkłada meta informacje od tego co jest przekazywane.
  • TJSONProtocol – używa JSON do kodowania danych.
  • TSimpleJSONProtocol – protokół zapisu używający JSON. Przydatny do parsowania przez języki skryptowe.

Jak również wiele transportów:

  • TFileTransport – zapis do pliku
  • TFramedTransport – wymagany przy użyciu nieblokującego serwera. Wysyła dane w ramkach, gdzie każda ramka jest poprzedzona informacją o długości.
  • TMemoryTransport – używa pamięci dla we/wy. Implementacja Java używa prostego ByteArrayOutputStream wewnętrznie.
  • TSocket – używa blokującego gniazda we/wy do transportu.
  • TZlibTransport – przeprowadza porównanie używając zlib. Używany w połączeniu z innym transportem. nie dostępny w implementacji Java.

Thrift również dostarcza serwery takie jak:

  • TNonblockingServer – wielowątkowy serwer używający nieblikującego we/wy (implementacja Java używa kanałów NIO). Przy użyciu tego serwera trzeba również skorzystać z TFramedTransport.
  • TSimpleServer – jednowątkowy serwer używający standardowego, blokującego we/wy. Użyteczny do testów.
  • TThreadPoolServer – wielowątkowy serwer używający standardowego, blokującego we/wy.
Remove ads

Korzyści

Korzyści wynikające z użycia Thrifta:

  • Wielojęzykowa serializacja przy niższych kosztach (niż alternatywne rozwiązania, takie jak SOAP) z powodu wykorzystania formatu binarnego.
  • Nieduże i czyste biblioteki, brak frameworka kodu. Brak plików konfiguracyjnych XML
  • Oprawa języka sprawia naturalne wrażenie, na przykład: Java używa ArrayList<String>. C++ używa std::vector<std::string>.
  • Format transportu danych na poziomie aplikacji i serializacji są jasno rozgraniczone. Mogą być modyfikowane niezależnie.
  • Wstępnie zdefiniowane style serializacji m.in.: binarny, HTTP-friendly i kompaktowo binarny.
  • Podwójnie: wielojęzykowy plik serializacyjny.
  • Miękkie wersji protokołu. Thrift nie wymaga scentralizowanego i wyraźnego mechanizmu jak major-version/minor-version. Swobodnie połączone zespoły mogą swobodnie rozwijać wywołania RPC.
  • Brak zależności budowania lub niestandardowych wersji oprogramowania. Brak mieszanki niezgodnych licencji na oprogramowanie.
Remove ads

Tworzenie serwisu Thrift

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.

Zobacz też

Linki zewnętrzne

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads