Google Protocol Buffers

Đầu tiên, để biết Protobuf là gì? Hãy xem cách Google giải thích:

Protobuf (Protocol buffers) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

Tạm dịch

Protobuf (Protocol buffers) là một ngôn ngữ, tền tảng trung lập, cơ chế mở rộng cho việc serialize dữ liệu có cấu trúc - giống như XML nhưng nhỏ gọn hơn, nhanh hơn và đơn giản hơn. Bạn định nghĩa cấu trúc dữ liệu một lần duy nhất, sau đó bạn có thể sử dụng mã nguồn được sinh ra để đọc và nghi dữ liệu trên nhiều luồng dữ liệu với rất nhiều ngôn ngữ khác nhau.

Theo cách khác, nó là một gói hàng định dạng nhị phân nhỏ mà phía nhận có thể sử dụng ngôn ngữ giống hoặc khác với phía gửi.

Ví dụ, phía gửi có thể sử dụng ngôn ngữ như .NET C# và phía nhận có thể dùng Java - hai bên không cần biết phía kia như thế nào. Phần dùng chung là một mẫu đơn giản được chia sẻ.

message Person {
    required string name = 1;
    required int32 id = 2;
    optional string email = 3;
}

Bạn có JSON, tại sao phải quan tâm?

Trong khi Protobuf nghe có vẻ thú vị, bạn có lẽ đang tự hỏi "JSON có vấn đề gì?".

Vâng, đối với người mới bắt đầu, một gói hàng Protobuf được xác định rõ ràng bởi một bản mẫu di động. Thứ hai, các định nghĩa Protobuf tương thích ngược bằng cách sử dụng các trường được đánh số. Các định nghĩa này cũng có lợi thế về tính xác thực và khả năng mở rộng được tích hợp sẵn.

Phải nói rằng, JSON có vị trí của nó khi sử dụng nó trực tiếp trong trình duyệt web hoặc bạn muốn một thông điệp có thể đọc được.

Tại sao và khi nào bạn nên sử dụng Protobuf?

Protobuf dễ dàng sử dụng trong microservices, đặc biệt nơi nào mà hiệu năng và tính tương tác quan trọng.

Có rất nhiều hướng dẫn ngoài kia để giúp bạn bắt đầu. Google có nhiều hướng dẫn với nhiều loại ngôn ngữ khác nhau. https://developers.google.com/protocol-buffers/docs/tutorials.

Sau khi nói rằng JSON có lẽ tốt hơn cho ứng dụng trình duyệt web, Microsoft đưa gRPC-Web thử nghiệm hỗ trợ cho .NET1. Bạn có thể tìm thấy hướng dẫn gRPC-Web Hello World đáng để đọc.

Một ứng dụng khác của Protobuf là triển khai cùng gRPC. gRPC sử dụng Protobuf làm mặc định để hướng tới hiệu năng và năng suất cao.

Like many RPC systems, gRPC is based around the idea of defining a service, specifying the methods that can be called remotely with their parameters and return types. By default, gRPC uses protocol buffers as the Interface Definition Language (IDL) for describing both the service interface and the structure of the payload messages.

Tạm dịch

Giống như nhiều hệ thống RPC khác, gRPC dựa trên ý tưởng định nghĩa một service, xác định các phương thức có thể được gọi từ xa với tham số và kiểu trả về của chúng. Mặc định, gRPC sử dụng protocol buffers là ngôn ngữ định nghĩa interface (IDL) - định nghĩa interface và cấu trúc các gói messages.

Protobuf vs JSON - Lựa chọn của bạn.

Chúng tôi khuyến nghị bạn dùng Protobuf khi:

  • Bạn cần tộc độ trong 2 quá trình serialisation và deserialisation.
  • Bạn cầu kiểu dữ liệu rõ ràng.
  • Bạn muốn tuân thủ các bản mẫu (Schema).
  • Bạn muốn giảm lượng code.
  • Bạn muốn tăng khả năng tương tác.
  • Bạn muốn những công nghệ mới nhất.

Xem xét JSON và những kiểu khác khi:

  • Bạn muốn dữ liệu mà con người đọc được.
  • Bạn muốn dữ liệu sử dụng được bởi trình duyệt.
  • Bạn không bắt buộc tuân theo bản mẫu (Schema).
  • Bạn muốn giảm lượng code.

Một số người cho rằng Protobuf có thể chỉ thực sự hữu ích nếu bạn đang cố gắng hướng đến hiệu suất cao từ các dịch vụ web của mình và nó không nhất thiết phải có giá trị đối với hầu hết các ứng dụng.

Tuy nhiên, chúng tôi khuyên bạn nên làm quen với nó. Có thể đã đến lúc nó hoàn toàn phù hợp với yêu cầu của bạn hoặc bạn có thể bị tính phí duy trì nó.

Nguồn: https://www.adaptiv.co.nz/protobuf-what-is-it-why-you-should-care-and-when-should-you-use-it/

Leave a Reply

Your email address will not be published. Required fields are marked *