Apache Thrift
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 8 februarie 2021; verificările necesită
5 modificări .
Thrift (din engleză - „thrift”, pronunțat ca [θrift] ) este un limbaj de descriere a interfeței care este folosit pentru a defini și crea servicii pentru diferite limbaje de programare. Este un cadru pentru apelul de procedură la distanță (RPC). Folosit de Facebook ca un serviciu scalabil de dezvoltare în mai multe limbi. Combină o conductă cu un motor de generare de cod pentru a dezvolta servicii care funcționează mai mult sau mai puțin eficient și ușor între limbaje precum [2] C# , C++ , Cappuccino , Cocoa , Delphi , Erlang , Go , Haskell , Java , OCaml , Perl , PHP , Python , Ruby , Rust , Smalltalk și JavaScript [3] . Pur și simplu, Thrift este un protocol de comunicare binar . Din aprilie 2007, a fost dezvoltat ca proiect open source al organizației non-profit Apache Software Foundation .
Arhitectură
Thrift include o conductă de software gata făcută, constând din șase straturi, pentru lucrul cu părțile client și server. Nivelul superior este codul de descriere Thrift generat. Serviciile generează codul client și server din acesta. Spre deosebire de tipurile încorporate, structura de date generată este returnată ca rezultat în codul generat. Protocolul și straturile de transport fac parte din biblioteca de rulare . În Thrift este posibil să selectați servicii și să schimbați protocolul și transportul fără a recompila codul. În plus față de partea client, Thrift include o infrastructură de server pentru comunicare și transport prin protocol în blocking, non-blockingși multi-threadedservere. Cadrul stratului I/O este implementat diferit pentru diferite limbi.
Protocoale acceptate
- TBinaryProtocol - Un format binar necomplicat, simplu, dar neoptimizat pentru economisirea spațiului.
- TCompactProtocol - Format binar mai compact, în general mai eficient.
- TDebugProtocol - Un format de text care poate fi citit de om care ajută la depanare.
- TDenseProtocol - Ca și în cazul TCompactProtocol , obținerea de meta informații din ceea ce a fost transmis.
- TJSONProtocol - Utilizarea JSON pentru a decoda datele.
- TSimpleJSONProtocol - Protocol de doar scriere folosind JSON. Potrivit pentru analiza în limbaje de scripting.
Transportatori acceptați
- TFileTransport - Acest transportor scrie într-un fișier.
- TFramedTransport - Acest transportor este utilizat atunci când sunt aplicate servere care nu blochează. Trimite date în cadre, unde fiecare cadru este precedat de o lungime de informații.
- TMemoryTransport - Utilizarea memoriei pentru I/O. Implementarea Java folosește un simplu încorporat ByteArrayOutputStream.
- TSocket - Folosește I/O socket de blocare pentru transport.
- TZlibTransport - Efectuează compresia folosind zlib. Folosit în combinație cu alte vehicule. Lipsește din implementarea Java.
Servere acceptate
- TNonblockingServer - multi-threadedserver care utilizează non-blockingintrare/ieșire (implementarea Java folosește NIO channels). Aceste servere trebuie să utilizeze TFramedTransport .
- TSimpleServer - unul single-threadedcare utilizează std blockingI/O. Util pentru testare.
- TThreadPoolServer este multi-threadedun server care utilizează std blockingI/O.
Beneficii
- Serializare în mai multe limbi cu o suprasarcină mai mică decât alternative precum SOAP prin utilizarea unui format binar.
- Bibliotecă simplă și curată. Nu are nevoie de un cadru de cod. Nu utilizează configurația XML.
- Legăturile lingvistice par naturale. De exemplu, Java folosește ArrayList<String>. Utilizări C++std::vector<std::string>.
- Formatul de comunicare al stratului de aplicație și formatul de comunicare al stratului de serializare sunt strict separate. Ele pot fi schimbate independent unul de celălalt.
- Tipurile de serializare încorporate includ: binar, HTTP prietenos și binar compact.
- Se creează ca un fișier serializat în mai multe limbi.
- Versiuni soft ale protocolului. Thrift nu necesită un mecanism centralizat și explicit, așa cum o face versiunea majoră/versiunea minoră. Grupurile slab cuplate pot trece liber în apeluri RPC.
- Independent de arhitectură sau software personalizat . Fără licențe software incompatibile.
[patru]
|
Apache Thrift
|
Protocol tampon
|
Dezvoltator
|
Facebook, Apache
|
Google
|
Limbi acceptate
|
C++, C#, Dart, D, Go, Haskell, Java, JavaScript, Python, PHP, XSD, Ruby, Perl, Obiectiv C,
Erlang, Ruby, Smalltalk, OCaml, Haskell
|
C++, C#, Dart, Go, Java, JavaScript, Python, PHP, Objective C, Ruby
|
Formate de ieșire
|
Binar, JSON
|
Binar
|
Tipuri simple
|
bool octet 16/32/64 de biți întregi șir dublu secvență de octeți map<t1,t2> list<t> set<t>
|
bool numere întregi pe 32/64 de biți float șir dublu secvență de octeți proprietăți repetate funcționează ca niște liste
|
constante
|
da
|
Nu
|
Tip compozit
|
struct
|
mesaj
|
Excepții
|
da
|
Nu
|
Documentație
|
problematic
|
Bun
|
Licență
|
Apache
|
Stilul BSD
|
Extensii de tip compozit
|
Nu
|
da
|
Crearea unui serviciu Thrift
Thrift este scris în C++, dar codul poate fi scris în mai multe limbi. Pentru a crea un serviciu Thrift, trebuie mai întâi să scrieți fișiere Thrift care îl descriu, apoi să generați cod în limbajul de ieșire și să specificați comenzile pentru a porni serverul, apoi să le apelați în client. Iată un exemplu de fișier de descriere:
enumerare PhoneType {
acasă ,
MUNCĂ ,
MOBIL ,
ALTE
}
struct Phone {
1 : i32 id ,
2 : număr șir ,
3 : PhoneType _
}
Thrift va genera cod din acest fișier de descriere, de exemplu în Java. PhoneTypeva fi o enumerare simplă (enum)în cadrul POJO pentru clasa Telefon.
Literatură
- Randy Abernethy. Ghidul programatorului pentru Apache Thrift. - Manning Publications Company, 2015. - ISBN 978-1-61729-181-4 .
Note
- ↑ https://projects.apache.org/json/projects/thrift.json
- ↑ Apache Thrift - Limbă și matrice de caracteristici . Preluat la 11 martie 2019. Arhivat din original la 8 martie 2019. (nedefinit)
- ↑ Apache Thrift - Javascript . thrift.apache.org. Consultat la 13 octombrie 2016. Arhivat din original pe 9 octombrie 2016. (nedefinit)
- ↑ Thrift vs Protocol Bufffers vs JSON Arhivat 7 noiembrie 2015 la Wayback Machine , MirthLab LLC, 2009
Link -uri
Apache Software Foundation |
---|
Proiecte de nivel superior |
|
---|
Subproiecte | |
---|
Apache Web |
- Axa
- Axa 2
- CXF
- WS-
- EWS
- JaxMe
- jUDDI
- Kandula
- Mirae
- Muse
- Aboneaza -te
- Sandesha
- Scout
- SAPUN
- Synapse
- TSIK
- Toscana
- Woden
- WSIF
- WSRF
- WSS4J
- XML-RPC
|
---|
Alte proiecte |
|
---|
Dezvoltare proiecte ( Incubator ) |
- XAP
- Râu
- OpenEJB
- Deschideți JPA
- Graffito
- Toscana
- Log4Net
- Rolă
- Felix
- Abdera
- CeltiXfire
- FtpServer
- Heraldică
- iedera
- Suc
- Kabuki
- Lokahi
- Lucene.Net
- mod_ftp
- NMaven
- Oda
- stdcxx
- Woden
- WSRP4J
- Yoko
- WADI
- Qpid
- TripleSoup
- UIMA
- Adobe Flex
|
---|
Proiecte scoase din funcțiune ( Mansarda ) |
- AxKit
- Stup
- cactus
- ECS
- Excalibur
- Armonie
- HiveMind
- iBATIS
- Jakarta
- ORO
- Regexp
- Sist
- Slide
- Taglibs
|
---|
|
Meta platforme |
---|
Servicii | | |
---|
oameni | Fondatori |
|
---|
Consiliu de Administratie |
|
---|
management | Actual |
- Mark Zuckerberg (CEO)
- Chris Cox (VP de produse)
- Sheryl Sandberg (COO)
- Elliot Shraj (VP Global Communications, Marketing and Public Policy)
- Mike Schroepfer (CTO)
- Ted Ulliot (vicepreședinte și consilier general)
|
---|
Fost |
- Sean Parker (președinte)
- Owen Van Natta (COO)
- Gideon Yu (CFO)
- Adam d'Angelo (CTO)
- Chris Kelly (Director de confidențialitate)
- Matt Cowler (VP Management Product)
- Bret Taylor (CTO)
|
---|
|
---|
Colaboratori de seamă | |
---|
|
---|
PE |
|
---|
mass media |
|
---|
Concepte |
|
---|
Afaceri |
- Istorie Facebook
- Lista fuziunilor și achizițiilor Meta Platforms
- Facebook F8
- Ofertă publică inițială Facebook
- Cenzura Facebook
- Critica la adresa Facebook
- Scandalul Facebook și Cambridge Analytica
- Documente
- Probleme de confidențialitate Facebook
- Procese care implică Meta Platforme
|
---|
Legate de |
|
---|