Apache sparsommelighed
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 8. februar 2021; checks kræver
5 redigeringer .
Thrift (fra engelsk - "thrift", udtales som [θrift] ) er et grænsefladebeskrivelsessprog , der bruges til at definere og skabe tjenester til forskellige programmeringssprog. Det er en ramme for fjernprocedurekald (RPC). Brugt af Facebook som en skalerbar tværsproglig udviklingstjeneste. Kombinerer en pipeline med en kodegenereringsmotor for at udvikle tjenester, der fungerer mere eller mindre effektivt og nemt mellem sprog som [2] C# , C++ , Cappuccino , Cocoa , Delphi ,Erlang , Go , Haskell , Java , OCaml , Perl , PHP , Python , Ruby , Rust , Smalltalk og JavaScript [3] . Kort sagt er Thrift en binær kommunikationsprotokol . Siden april 2007 er det blevet udviklet som et open source -projekt af non-profit organisationen Apache Software Foundation .
Arkitektur
Thrift inkluderer en færdiglavet softwarepipeline, bestående af seks lag, til at arbejde med klient- og serverdelene. Det øverste niveau er den genererede Thrift-beskrivelseskode. Tjenester genererer klient- og serverkode fra den. I modsætning til indbyggede typer returneres den genererede datastruktur som et resultat i den genererede kode. Protokol- og transportlagene er en del af runtime-biblioteket . I Thrift er det muligt at vælge tjenester og ændre protokollen og transporten uden at genkompilere koden. Ud over klientsiden inkluderer Thrift en serverinfrastruktur til protokolkommunikation og transport i blocking, non-blockingog multi-threadedservere. I/O-lagrammen er implementeret forskelligt for forskellige sprog.
Understøttede protokoller
- TBinaryProtocol - Et ukompliceret binært format, enkelt men ikke optimeret til pladsbesparelser.
- TCompactProtocol - Mere kompakt binært format, generelt mere effektivt.
- TDebugProtocol - Et menneskeligt læsbart tekstformat, der hjælper med fejlretning.
- TDenseProtocol - Som med TCompactProtocol , få metainformation fra det, der blev bestået.
- TJSONProtocol - Brug af JSON til at afkode data.
- TSimpleJSONProtocol - Kun skriveprotokol ved hjælp af JSON. Velegnet til parsing i scriptsprog.
Understøttede transportører
- TFileTransport - Denne transportør skriver til en fil.
- TFramedTransport - Denne transporter bruges, når ikke-blokerende servere anvendes. Den sender data i rammer, hvor hver frame er forudgået af en længde af information.
- TMemoryTransport - Hukommelsesbrug til I/O. Java-implementeringen bruger en simpel indbygget ByteArrayOutputStream.
- TSocket - Bruger blokerende socket I/O til transport.
- TZlibTransport - Udfører komprimering ved hjælp af zlib. Anvendes i kombination med andre køretøjer. Mangler i Java-implementeringen.
Understøttede servere
- TNonblockingServer - multi-threadedserver, der bruger non-blockinginput/output (Java-implementering bruger NIO channels). Disse servere skal bruge TFramedTransport .
- TSimpleServer - en single-threaded, der bruger std blockingI/O. Nyttig til test.
- TThreadPoolServer er multi-threadeden server, der bruger std blockingI/O.
Fordele
- Serialisering på tværs af sprog med lavere overhead end alternativer som SOAP ved at bruge et binært format.
- Enkelt og rent bibliotek. Behøver ikke en koderamme. Bruger ikke XML-konfiguration.
- Sprogbindinger føles naturlige. For eksempel bruger Java ArrayList<String>. C++ brugerstd::vector<std::string>.
- Kommunikationsformatet for applikationslag og kommunikationslag for serialiseringslag er strengt adskilt. De kan ændres uafhængigt af hinanden.
- Indbyggede serialiseringstyper inkluderer: binær, HTTP-venlig og kompakt binær.
- Bygger op som en serialiseret fil på tværs af sprog.
- Bløde versioner af protokollen. Sparsommelighed kræver ikke en centraliseret og eksplicit mekanisme, som major-version/minor-version gør. Løst koblede grupper kan frit gå over til RPC-opkald.
- Uafhængig af arkitektur eller brugerdefineret software . Ingen inkompatible softwarelicenser.
[fire]
|
Apache sparsommelighed
|
Protokolbuffere
|
Udvikler
|
Facebook, Apache
|
Google
|
Understøttede sprog
|
C++, C#, Dart, D, Go, Haskell, Java, JavaScript, Python, PHP, XSD, Ruby, Perl, Objective C,
Erlang, Ruby, Smalltalk, OCaml, Haskell
|
C++, C#, Dart, Go, Java, JavaScript, Python, PHP, Objective C, Ruby
|
Udgående formater
|
Binær, JSON
|
Binær
|
Simple typer
|
bool byte 16/32/64-bit heltal dobbelt streng byte sekvens kort<t1,t2> liste<t> sæt<t>
|
bool 32/64-bit heltal float dobbelt streng byte sekvens gentagne egenskaber fungerer som lister
|
Konstanter
|
Ja
|
Ikke
|
Komposit type
|
struktur
|
besked
|
Undtagelser
|
Ja
|
Ikke
|
Dokumentation
|
problematisk
|
godt
|
Licens
|
Apache
|
BSD stil
|
Udvidelser af komposittype
|
Ikke
|
Ja
|
Oprettelse af en sparsommelighedstjeneste
Thrift er skrevet i C++, men koden kan skrives på flere sprog. For at oprette en Thrift-tjeneste skal du først skrive Thrift-filer, der beskriver den, derefter generere kode i outputsproget og angive kommandoerne for at starte serveren og derefter kalde dem i klienten. Her er et eksempel på en beskrivelsesfil:
enum PhoneType {
hjem ,
ARBEJDE ,
MOBIL ,
ANDET
}
struct Phone {
1 : i32 id ,
2 : strengnummer , _
3 : Telefontype _
}
Thrift vil generere kode fra denne beskrivelsesfil, for eksempel i Java. PhoneTypevil være en simpel enum (enum)inde i POJO for Telefon-klassen.
Litteratur
- Randy Abernethy. Programmørens guide til Apache Thrift. - Manning Publications Company, 2015. - ISBN 978-1-61729-181-4 .
Noter
- ↑ https://projects.apache.org/json/projects/thrift.json
- ↑ Apache Thrift - Sprog- og funktionsmatrix . Hentet 11. marts 2019. Arkiveret fra originalen 8. marts 2019. (ubestemt)
- ↑ Apache Thrift - Javascript . thrift.apache.org. Hentet 13. oktober 2016. Arkiveret fra originalen 9. oktober 2016. (ubestemt)
- ↑ Thrift vs Protocol Bufffers vs JSON Arkiveret 7. november 2015 på Wayback Machine , MirthLab LLC, 2009
Links
Apache Software Foundation |
---|
Projekter på topniveau |
|
---|
Delprojekter | |
---|
Apache Web |
- Akse
- Akse2
- CXF
- WS-
- EWS
- JaxMe
- jUDDI
- Kandula
- Mirae
- Muse
- Abonner
- Sandesha
- spejder
- SÆBE
- Synapse
- TSIK
- Toscana
- Woden
- WSIF
- WSRF
- WSS4J
- XML-RPC
|
---|
Andre projekter |
|
---|
Udvikling af projekter ( inkubator ) |
- XAP
- River
- OpenEJB
- Åbn JPA
- Graffito
- Toscana
- Log4Net
- Rulle
- Felix
- Abdera
- CeltiXfire
- FtpServer
- Heraldik
- Ivy
- Juice
- Kabuki
- Lokahi
- Lucene.Net
- mod_ftp
- NMaven
- Ode
- stdcxx
- Woden
- WSRP4J
- Yoko
- WADI
- Qpid
- TripleSoup
- UIMA
- Adobe Flex
|
---|
Nedlagte projekter ( loftsrum ) |
|
---|
|
Meta platforme |
---|
Tjenester | |  |
---|
Mennesker | Grundlæggere |
|
---|
Bestyrelse |
|
---|
Ledelse | Nuværende |
- Mark Zuckerberg (administrerende direktør)
- Chris Cox (VP of Products)
- Sheryl Sandberg (COO)
- Elliot Shraj (VP for global kommunikation, marketing og offentlig politik)
- Mike Schroepfer (CTO)
- Ted Ulliot (vicepræsident og generaladvokat)
|
---|
Tidligere |
- Sean Parker (præsident)
- Owen Van Natta (COO)
- Gideon Yu (CFO)
- Adam d'Angelo (CTO)
- Chris Kelly (privatlivsdirektør)
- Matt Cowler (VP of Product Management)
- Bret Taylor (CTO)
|
---|
|
---|
Bemærkelsesværdige samarbejdspartnere | Nuværende |
- Randy Zuckerberg (administrerende direktør)
|
---|
Tidligere |
|
---|
|
---|
|
---|
PÅ |
|
---|
massemedier |
|
---|
Begreber |
|
---|
Forretning |
- Historie Facebook
- Liste over fusioner og opkøb af Meta Platforms
- Facebook F8
- Facebook Initial Public Offering
- Facebook-censur
- Kritik af Facebook
- Facebook og Cambridge Analytica-skandale
- papirer
- Facebooks privatlivsproblemer
- Retssager, der involverer Meta Platforms
|
---|
Relaterede |
|
---|