Những ưu và nhược điểm lớn nhất của Apache Thrift so với Bộ đệm giao thức của Google là gì?
Những ưu và nhược điểm lớn nhất của Apache Thrift so với Bộ đệm giao thức của Google là gì?
Câu trả lời:
Cả hai đều cung cấp nhiều tính năng giống nhau; tuy nhiên, có một số khác biệt:
Set
loại dựng sẵnVề cơ bản, chúng tương đối giống nhau (với Bộ đệm giao thức hiệu quả hơn một chút so với những gì tôi đã đọc).
map
cũng
Một sự khác biệt quan trọng khác là các ngôn ngữ được hỗ trợ theo mặc định.
Cả hai có thể được mở rộng sang các nền tảng khác, nhưng đây là những ràng buộc ngôn ngữ có sẵn bên ngoài.
RPC là một sự khác biệt quan trọng khác. Thrift tạo mã để triển khai các máy khách và máy chủ RPC trong đó Bộ đệm giao thức dường như được thiết kế chủ yếu dưới dạng định dạng trao đổi dữ liệu.
option optimize_for = SPEED
.Để xem xét kỹ hơn về sự khác biệt, hãy xem mã nguồn khác biệt tại dự án nguồn mở này .
Như tôi đã nói là chủ đề "Thrift vs Protocol đệm" :
Nhắc đến so sánh Thrift vs Protobuf vs JSON :
Ngoài ra, có rất nhiều công cụ bổ sung thú vị có sẵn cho các giải pháp đó, có thể quyết định. Dưới đây là ví dụ cho Protobuf: Protobuf-wireshark , protobufeditor .
Bộ đệm giao thức dường như có một đại diện nhỏ gọn hơn, nhưng đó chỉ là một ấn tượng tôi có được từ việc đọc whitepaper Thrift. Nói cách riêng của họ:
Chúng tôi đã quyết định chống lại một số tối ưu hóa lưu trữ cực đoan (nghĩa là đóng gói các số nguyên nhỏ vào ASCII hoặc sử dụng định dạng tiếp tục 7 bit) vì mục đích đơn giản và rõ ràng trong mã. Những thay đổi này có thể dễ dàng được thực hiện nếu và khi chúng ta gặp phải trường hợp sử dụng hiệu năng quan trọng đòi hỏi chúng.
Ngoài ra, nó có thể chỉ là ấn tượng của tôi, nhưng Bộ đệm giao thức dường như có một số trừu tượng dày hơn xung quanh phiên bản cấu trúc. Thrift có một số hỗ trợ phiên bản, nhưng phải mất một chút nỗ lực để thực hiện nó.
Tôi đã có thể có được hiệu suất tốt hơn với một giao thức dựa trên văn bản so với protobuff trên python. Tuy nhiên, không có kiểm tra loại hoặc chuyển đổi utf8 ưa thích nào khác, v.v ... mà protobuff cung cấp.
Vì vậy, nếu serialization / deserialization là tất cả những gì bạn cần, thì có lẽ bạn có thể sử dụng một cái gì đó khác.
http://dhruvbird.blogspot.com/2010/05/protatio-buffers-vs-http.html
Một điều rõ ràng chưa được đề cập là có thể là cả pro hoặc con (và giống nhau cho cả hai) là chúng là các giao thức nhị phân. Điều này cho phép biểu diễn nhỏ gọn hơn và có thể hiệu suất cao hơn (ưu), nhưng với khả năng đọc giảm (hay đúng hơn là khả năng sửa lỗi), một con lừa.
Ngoài ra, cả hai đều có công cụ hỗ trợ ít hơn một chút so với các định dạng tiêu chuẩn như xml (và thậm chí có thể là json).
(EDIT) Đây là một so sánh thú vị giải quyết cả sự khác biệt về kích thước và hiệu suất và bao gồm cả số cho một số định dạng khác (xml, json).
Và theo wiki , Thrift runtime không chạy trên Windows.
ProtocolBuffers là NHANH CHÓNG.
Có một điểm chuẩn tuyệt vời ở đây:
http://code.google.com.vn/p/thrift-protobuf-compare/wiki/Benchmarking
Bạn cũng có thể muốn xem xét Avro, vì Avro thậm chí còn nhanh hơn.
Microsoft có một gói ở đây:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
Nhân tiện, nhanh nhất tôi từng thấy là Cap'nProto ;
Việc triển khai AC # có thể được tìm thấy tại kho Github của Marc Gravell .
Tôi nghĩ rằng hầu hết các điểm này đã bỏ lỡ một thực tế cơ bản rằng Thrift là một khung RPC, có khả năng tuần tự hóa dữ liệu bằng nhiều phương thức khác nhau (nhị phân, XML, v.v.).
Bộ đệm giao thức được thiết kế hoàn toàn để tuần tự hóa, nó không phải là một khung như Thrift.
Đối với một, protobuf không phải là một triển khai RPC đầy đủ. Nó đòi hỏi một cái gì đó như gRPC để đi với nó.
gPRC rất chậm so với Thrift:
Có một số điểm tuyệt vời ở đây và tôi sẽ thêm một điểm nữa trong trường hợp đường đi của ai đó đi qua đây.
Thrift cung cấp cho bạn một tùy chọn để lựa chọn giữa serializer tiết kiệm và nhị phân tiết kiệm (de), thrift-binary sẽ có hiệu suất tuyệt vời nhưng kích thước gói lớn hơn, trong khi tiết kiệm sẽ cho bạn khả năng nén tốt nhưng cần nhiều khả năng xử lý hơn. Điều này rất tiện lợi vì bạn luôn có thể chuyển đổi giữa hai chế độ này dễ dàng như thay đổi một dòng mã (quái, thậm chí làm cho nó có thể cấu hình được). Vì vậy, nếu bạn không chắc chắn ứng dụng của bạn sẽ được tối ưu hóa bao nhiêu cho kích thước gói hoặc trong khả năng xử lý, tiết kiệm có thể là một lựa chọn thú vị.
PS: Xem dự án điểm chuẩn tuyệt vời này bằng cách thekvs
so sánh nhiều bộ nối tiếp bao gồm nhị phân tiết kiệm, tiết kiệm nhỏ gọn và protobuf: https://github.com/thekvs/cpp-serialulators
PS: Có một serializer khác được đặt tên YAS
cũng cung cấp tùy chọn này nhưng nó không có lược đồ xem liên kết ở trên.