Apa pro dan kontra terbesar Apache Thrift vs Google's Protocol Buffer ?
Apa pro dan kontra terbesar Apache Thrift vs Google's Protocol Buffer ?
Jawaban:
Keduanya menawarkan banyak fitur yang sama; Namun, ada beberapa perbedaan:
Set
tipe bawaanPada dasarnya, mereka cukup setara (dengan Protokol Buffer sedikit lebih efisien dari apa yang saya baca).
map
juga mendukung
Perbedaan penting lainnya adalah bahasa yang didukung secara default.
Keduanya dapat diperluas ke platform lain, tetapi ini adalah binding bahasa yang tersedia di luar kotak.
RPC adalah perbedaan utama lainnya. Thrift menghasilkan kode untuk mengimplementasikan klien RPC dan server di mana Protokol Buffer tampaknya sebagian besar dirancang sebagai format pertukaran data saja.
option optimize_for = SPEED
.Untuk melihat lebih dekat perbedaannya, lihat perbedaan kode sumber di proyek sumber terbuka ini .
Seperti yang saya katakan sebagai topik "Hemat vs Protokol" :
Mengacu pada perbandingan Thrift vs Protobuf vs JSON :
Selain itu, ada banyak alat tambahan menarik yang tersedia untuk solusi tersebut, yang mungkin memutuskan. Berikut adalah contoh untuk Protobuf: Protobuf-wireshark , protobufeditor .
Protokol Buffer tampaknya memiliki representasi yang lebih ringkas, tetapi itu hanya kesan yang saya dapatkan dari membaca whitepaper Thrift. Dengan kata-kata mereka sendiri:
Kami memutuskan terhadap beberapa optimisasi penyimpanan ekstrem (yaitu mengemas integer kecil ke ASCII atau menggunakan format kelanjutan 7-bit) demi kesederhanaan dan kejelasan dalam kode. Perubahan ini dapat dengan mudah dilakukan jika dan ketika kita menemukan kasus penggunaan kritis yang menuntut mereka.
Juga, mungkin hanya kesan saya, tetapi Protokol Buffer tampaknya memiliki beberapa abstraksi lebih tebal di sekitar versi struct. Thrift memang memiliki beberapa dukungan versi, tetapi butuh sedikit usaha untuk mewujudkannya.
Saya bisa mendapatkan kinerja yang lebih baik dengan protokol berbasis teks dibandingkan dengan protobuff pada python. Namun, tidak ada pemeriksaan jenis atau konversi utf8 mewah, dll ... yang ditawarkan protobuff.
Jadi, jika serialisasi / deserialisasi adalah semua yang Anda butuhkan, maka Anda mungkin dapat menggunakan sesuatu yang lain.
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
Satu hal yang jelas belum disebutkan adalah bahwa dapat berupa pro atau kontra (dan sama untuk keduanya) adalah bahwa mereka adalah protokol biner. Hal ini memungkinkan untuk representasi yang lebih kompak dan mungkin lebih banyak kinerja (pro), tetapi dengan keterbacaan berkurang (atau lebih tepatnya, debuggability), sebuah con.
Juga, keduanya memiliki sedikit dukungan alat kurang dari format standar seperti xml (dan mungkin bahkan json).
(EDIT) Berikut ini adalah perbandingan menarik yang menangani perbedaan ukuran & kinerja, dan termasuk angka untuk beberapa format lain (xml, json) juga.
Dan menurut wiki runtime penghematan tidak berjalan di Windows.
ProtocolBuffers LEBIH CEPAT.
Ada patokan yang bagus di sini:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
Anda mungkin juga ingin melihat ke dalam Avro, karena Avro bahkan lebih cepat.
Microsoft memiliki paket di sini:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
Omong-omong, yang tercepat yang pernah saya lihat adalah Cap'nProto ;
Implementasi AC # dapat ditemukan di repositori Github dari Marc Gravell .
Saya pikir sebagian besar poin ini telah melewatkan fakta dasar bahwa Thrift adalah kerangka kerja RPC, yang kebetulan memiliki kemampuan untuk membuat serialisasi data menggunakan berbagai metode (biner, XML, dll).
Protokol Buffer dirancang murni untuk serialisasi, ini bukan kerangka kerja seperti Thrift.
Untuk satu, protobuf bukan implementasi RPC penuh. Dibutuhkan sesuatu seperti gRPC untuk mengikutinya.
gPRC sangat lambat dibandingkan dengan Thrift:
Ada beberapa poin yang sangat bagus di sini dan saya akan menambahkan satu lagi kalau-kalau jalur seseorang melintasi sini.
Thrift memberi Anda opsi untuk memilih antara serialer hemat-biner dan hemat-kompak (de), penghematan-biner akan memiliki kinerja luar biasa tetapi ukuran paket lebih besar, sedangkan hemat-kompak akan memberi Anda kompresi yang baik tetapi membutuhkan daya pemrosesan lebih. Ini berguna karena Anda selalu dapat beralih di antara dua mode ini semudah mengubah sebaris kode (heck, bahkan membuatnya dapat dikonfigurasi). Jadi, jika Anda tidak yakin berapa banyak aplikasi Anda harus dioptimalkan untuk ukuran paket atau kekuatan pemrosesan, penghematan bisa menjadi pilihan yang menarik.
PS: Lihat proyek tolok ukur yang sangat baik ini thekvs
yang membandingkan banyak serializer termasuk penghematan-biner, hemat-kompak, dan protobuf: https://github.com/thekvs/cpp-serializers
PS: Ada serializer lain bernama YAS
yang memberikan opsi ini juga tetapi kurang skema lihat tautan di atas.
Penting juga untuk dicatat bahwa tidak semua bahasa yang didukung kompatibel secara konsisten dengan penghematan atau protobuf. Pada titik ini adalah masalah implementasi modul di samping serialisasi yang mendasarinya. Berhati-hatilah untuk memeriksa tolok ukur untuk bahasa apa pun yang Anda rencanakan untuk digunakan.