Quali sono i maggiori pro e contro di Apache Thrift rispetto ai buffer di protocollo di Google ?
Entrambi offrono molte delle stesse funzionalità; tuttavia, ci sono alcune differenze:
Set
integrato Fondamentalmente, sono abbastanza equivalenti (con i buffer di protocollo leggermente più efficienti da quello che ho letto).
Un’altra importante differenza sono le lingue supportate di default.
Entrambi possono essere estesi ad altre piattaforms, ma queste sono le combinazioni di lingue disponibili immediatamente.
RPC è un’altra differenza fondamentale. La parsimonia genera codice per implementare client e server RPC in cui il protocollo Buffer sembra progettato principalmente come formato di scambio dati.
option optimize_for = SPEED
. Per uno sguardo più attento alle differenze, controlla le differenze del codice sorgente in questo progetto open source .
Come ho detto come argomento “Thrift vs Protocol Buffers” :
Riferendosi a Confronto tra Thrift vs Protobuf e JSON :
Inoltre, ci sono molti strumenti aggiuntivi interessanti disponibili per queste soluzioni, che potrebbero decidere. Ecco alcuni esempi di Protobuf: Protobuf- wireshark , protobufeditor .
Sono riuscito a ottenere prestazioni migliori con un protocollo basato su testo rispetto a protobuff su python. Tuttavia, nessun tipo di controllo o altra conversione utf8 di fantasia, ecc … che offre il protobuff.
Quindi, se la serializzazione / deserializzazione è tutto ciò che serve, allora probabilmente puoi usare qualcos’altro.
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
Protocol Buffers sembra avere una rappresentazione più compatta, ma questa è solo l’impressione che ottengo leggendo il white paper di Thrift. Nelle loro stesse parole:
Abbiamo deciso di evitare alcune ottimizzazioni di archiviazione estreme (ad esempio, l’imballaggio di piccoli numeri interi in ASCII o utilizzando un formato di continuazione a 7 bit) per motivi di semplicità e chiarezza nel codice. Queste modifiche possono essere fatte facilmente se e quando incontriamo un caso d’uso critico per le prestazioni che li richiede.
Inoltre, potrebbe essere solo una mia impressione, ma i protocol Buffer sembrano avere alcune astrazioni più spesse attorno al controllo delle versioni delle struct. Thrift ha qualche supporto per le versioni, ma ci vuole un po ‘di sforzo per farlo accadere.
Una cosa ovvia non ancora menzionata è che può essere sia un pro che un contro (ed è lo stesso per entrambi) è che sono protocolli binari. Ciò consente una rappresentazione più compatta e possibilmente più prestazioni (pro), ma con una leggibilità ridotta (o piuttosto una debugabilità), una truffa.
Inoltre, entrambi hanno un supporto degli strumenti leggermente inferiore rispetto ai formati standard come xml (e forse anche json).
(EDIT) Ecco un confronto interessante che affronta sia le differenze di dimensioni e prestazioni, e include anche i numeri per alcuni altri formati (xml, json).
E secondo il wiki il runtime di Thrift non funziona su Windows.
ProtocolBuffers è più veloce.
C’è un bel punto di riferimento qui:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
Potresti anche voler guardare in Avro, dato che Avro è ancora più veloce.
Microsoft ha un pacchetto qui:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
A proposito, il più veloce che abbia mai visto è Cap’nProto ;
L’implementazione di AC # può essere trovata nel repository Github di Marc Gravell .
Penso che la maggior parte di questi punti abbia ignorato il fatto fondamentale che Thrift è un framework RPC, che ha la capacità di serializzare i dati usando una varietà di metodi (binario, XML, ecc.).
I buffer di protocollo sono progettati esclusivamente per la serializzazione, non è un framework come Thrift.
Per uno, protobuf non è un’implementazione RPC completa. Richiede qualcosa come gRPC per andare con esso.
gPRC è molto lento rispetto a Thrift:
Ci sono alcuni punti eccellenti qui e ne aggiungerò un altro nel caso in cui il percorso di qualcuno qui attraversi.
Thrift ti offre la possibilità di scegliere tra serializzatore compatto e parsimonioso (de), il binario di risparmio avrà una prestazione eccellente ma dimensioni del pacchetto maggiori, mentre il compatto di risparmio energetico offrirà una buona compressione ma richiederà più potenza di elaborazione. Questo è utile perché puoi sempre passare da una modalità all’altra con la stessa facilità con cui si modifica una linea di codice (diamine, persino renderla configurabile). Quindi, se non sei sicuro di quanto l’applicazione debba essere ottimizzata per le dimensioni del pacchetto o per la potenza di elaborazione, la parsimonia può essere una scelta interessante.
PS: guarda questo eccellente progetto di benchmark di thekvs
che mette a confronto molti serializzatori tra cui parsimonioso, parsimonioso e protobuf: https://github.com/thekvs/cpp-serializers
PS: C’è un altro serializzatore chiamato YAS
che fornisce anche questa opzione ma è senza schema vedere il link sopra.