Avatar
0
Nguyễn Thái Sơn Professional
Nguyễn Thái Sơn Professional
gRPC nên dùng khi nào
Anh Dũng ơi, khi nào nên dùng gRPC hơn là Restful ạ. Khi nào dự án mình nên dùng Request HTTPs, khi nào nên dùng Kafka hoặc RabbitMQ
  • Answer
Remain: 5
2 Answers
Avatar
monkey Professional
monkey Professional
  1. gRPC thường được sử dụng với stateful socket, tức là nó giữ kết nối giữa client và server nên nó gặp vấn đề ở LB (65k port giới hạn) thế nên anh thường chỉ dùng gRPC để gọi service nội bộ thôi.

  1. Chính vì gRPC thường được sử dụng với stateful socket nên nó sẽ tận dụng được sức mạnh của của socket, vì thế mà nó sẽ nhanh hơn Restful, tuy nhiên về phía client - server thì HTTP cân tải hay làm HA qua LB rất dễ nên Restful sẽ phù hợp hơn trong trường hợp này.

  1. HTTPs: là bắt buộc, em không có lựa chọn nào khác

  1. Kafka hoặc RabbitMQ nên sử dụng: trong hệ thống microservice khi các service cần có sự trao đổi thông tin với nhau.
  • 1
  • Reply
Avatar
ducnt114 Professional
ducnt114 Professional
Mình góp thêm 1 vài ý nhé:
  • Về mặt hiệu năng thì gRPC tốt hơn restful, lý do là restful thì mọi người thường dùng json + http/https, dữ liệu trao đổi giữa client và server ngoài json ra thì còn có cả các header của giao thức http (phần dữ liệu này cũng khá nhiều) => do đó gây tốn thêm một phần băng thông. Trong khi đó grpc có giao thức riêng giữa client và server, dữ liệu trao đổi được serialize ra từ protobuf có thể sẽ được nén nữa nên sẽ tiết kiệm băng thông hơn. Do đó khi nào cần tối ưu thêm một chút về hiệu năng của hệ thống thì bạn có thể cân nhắc dùng gRPC, đổi lại sẽ phải đánh đổi lại về sự phức tạp, debug khó hơn do dữ liệu trao đổi là byte array không đọc trực tiếp bằng mắt được, tester sẽ khó test API hơn.
  • Các api public ra ngoài thì https gần như là bắt buộc, các api nội bộ thì có thể không cần, tùy thuộc vào đánh giá hoặc tiêu chuẩn kĩ thuật của team.
  • Kafka, RabbitMQ là message queue nên khi nào cần message queue thì sẽ dùng. Một số bài toàn như kiểu producer/consumer, hoặc khi có các tác vụ có thể xử lý bất đồng bộ thì thường sẽ đẩy message vào queue cho consumer xử lý ở background.
  • 2
  • Reply