Tìm hiểu về MicroService

Tìm hiểu về MicroService

August 12, 2022
Leo
1

Tìm hiểu về MicroService

Hello anh em. Vì một số vấn đề kỹ thuật mà video record buổi talk về topic của mình trong sự kiện Laravel Meetup Tháng 08/2022 (HCM) không được ghi lại. Nhân tiện có câu hỏi của bạn Long Lê về một số thắc mắc liên quan đến microservices, mình xin phép được trả lời như là một phần "bù đắp" cho thiếu sót lần này cho anh em ở xa không tham gia được sự kiện.
Câu hỏi của bạn Long:
1. "Tại sao trong hệ thống MicroService các service không gọi trực tiếp với nhau mà thường lại phải thông qua 1 MessageBroker".
- Trong kiến trúc Microservices, mình sẽ chia ứng dụng của mình thành các service nhỏ (theo bounded context, business capability...), độc lập với nhau, chính vì thế mà để đảm bảo được tính chất này ta cần giảm sự phụ thuộc giữa các service, hạn chế gọi trực tiếp giữa các service với nhau, đồng thời cũng giảm gây rối cho tổng thể ứng dụng. Việc triển khai một hệ thống message broker để làm communication style chính cho hệ thống sẽ tránh được các vấn đề trên, lúc này các transaction span trên nhiều service sẽ có thiên hướng triển khai theo saga pattern.
2. "Giả sử có 1 service ngỏm thì Data gửi sẽ ko mất mà vẫn nằm ở Broker, khi nào nó sống lại thì vẫn xử lý bình thường không ?"
- Đầu tiên mình cần làm rõ vấn đề của bạn trước, một hệ thống event-driven có 3 thành phần chính là:
1. Publisher: nơi mesage (event) được đẩy lên broker
2. Broker: thành phần nhận message từ publisher và route đến các consumers
3. Consumer: nhận message từ Broker và xử lý nghiệp vụ.
Tham chiếu đến câu hỏi của bạn thì mình sẽ hiểu data là message và service ngỏm đó chính là consumer. Cụ thể hơn thì quá trình giao tiếp giữa broker và consumer thất bại vì lý do consumer ngỏm.
Đa số hệ thống event-driven nói chung, khi consumer kết nối đến broker đều cấu hình trước cơ chế xử lý khi trường hợp consumer ngỏm, trong trường hợp consumer ngỏm message chắc chắn vẫn sẽ được remain tại broker để thực hiện quá trình retry, còn cơ chế retry thì tuỳ provider sẽ có cơ chế khác nhau.
Khi làm hệ thống microservices thì failure nên là một phần của design, luôn là trường hợp ta phải luôn luôn nghĩ đến để có được một hệ thống ổn định.
3. "MicroService thì mình thích dùng công nghệ nào cũng được, bản thân Lumen sinh ra cũng để làm điều này nhưng ngay từ đầu Laravel mạnh về dạng ứng dụng FullStack hơn, mọi người có suggest gì về tech nên sử dụng khi triển khai hệ thống micro ko ạ."
- Tự do về công nghệ triển khai về công nghệ thường xuất phát từ tính chất đặc thù của service, đôi khi lại do yếu tố con người.