View Single Post
  #1  
Old 11-06-2019, 20:41
freex's Avatar
freex freex is offline
Member
 
Join Date: 08-2010
Posts: 34
Xây dựng hệ thống pubsub chịu tải cao

Chào các bác,

Em đang làm cho 1 product về event, lượng tải lúc big event rất cao, tầm gần 1 triệu lượt transaction trong 1 ngày.
Mô hình của em lại là dạng microservice, giao tiếp kiểu api restful giữa các service với nhau.
Mô hình này em thấy không phù hợp lắm vì có nhiều service khi bị quá tải thì không cách nào retry call các api lại được, vì thế em đang muốn build 1 service pubsub ở giữa quản lý các message giao tiếp giữa các service này, cũng như retry lại sau nhiều khoảng thời gian khác nhau nữa.

Thiết kế của em như thế này:
Viết 1 service pubsub để làm trung gian xử lý, các message xử lý này sẽ lưu trữ lại để có thể retry sau 1 vài lần khi server subcribe bị chết, hoặc bị timeout vì quá tải.

Em có 3 vấn đề muốn tham khảo các bác:
+ Cần ghi lại các message này trước khi subcribe, em đang tính write vào filelog để logstash đẩy lên ELK, sau đó lên Kibana query để biết các message nào thành công, miss, fail .. từ đó có report để có thể update manual lại chẳn hạn.

+ Cần có 1 đầu event-driven để retry lại sau 1 khoảng thời gian nhất định. Em đang tính push error-message này vào rabbit-mq với delay-time, rồi sau đó lấy ra để gọi lại vào api của service subcribe sau 1 khoảng delay-time đó. Có bác nào làm nhiều với Rabbit có thể cho em biết khả năng chịu tải của nó không ạ?

+ Cần có 1 sự đảm bảo là service pubsub này ngỏm ở bất cứ giai đoạn nào thì lúc restart các message cũng không thể bị mất, cũng như nếu nó chết đi, thì cũng có 1 giải pháp nào đó để bọn service vẫn có thể call api trực tiếp cho nhau được.

Sorry vì hỏi các bác khá nhiều, thôi thì mong các bác xem như 1 topic để thảo luận để cùng nhau phát triển tư duy thiết kế hệ thống vậy nhé

Thank các bác
Reply With Quote