Vẫn đang cố gắng xoay quanh kiến trúc microservice vì tôi đã quen với cách tiếp cận nguyên khối
Giả sử chúng tôi cố gắng xây dựng một hệ thống đặt phòng Uber cực kỳ đơn giản . Để đơn giản hóa những điều chúng ta giả sử chúng ta có 3 dịch vụ và một api cửa ngõ cho các khách hàng: Booking
, Drivers
, Notification
và chúng tôi có công việc sau đây:
Khi tạo đặt phòng mới:
- Kiểm tra xem người dùng hiện tại đã có đặt chỗ chưa
- Nhận danh sách các trình điều khiển có sẵn
- Gửi thông báo cho các tài xế để nhận đặt phòng
- Tài xế chọn đặt phòng
Giả sử tất cả nhắn tin được thực hiện thông qua một cuộc gọi http thay vì một xe buýt nhắn tin như kafka để mọi thứ đơn giản.
Vì vậy, trong trường hợp này, tôi nghĩ rằng Booking
dịch vụ có thể thực hiện việc kiểm tra đặt chỗ hiện tại. Nhưng sau đó ai sẽ nhận được danh sách các trình điều khiển có sẵn và thông báo? Tôi đang nghĩ đến việc thực hiện nó ở cấp độ cổng nhưng bây giờ logic được chia thành hai nơi:
Gateway
- nhận danh sách các trình điều khiển có sẵn + gửi thông báoBooking
- kiểm tra đặt phòng hiện có
Và tôi khá chắc chắn rằng cổng không phải là nơi thích hợp để làm điều đó nhưng tôi cảm thấy nếu chúng ta làm điều đó trong Booking
dịch vụ, nó có trở nên gắn kết chặt chẽ không?
Để làm cho nó phức tạp hơn, điều gì xảy ra nếu chúng ta có một dự án khác muốn sử dụng lại hệ thống đặt phòng nhưng với logic kinh doanh riêng của nó trên đầu trang? Đó là lý do tại sao tôi nghĩ làm việc đó ở cấp độ cổng để cổng dự án mới có thể có logic kinh doanh riêng tách biệt với logic hiện có.
Một cách khác để làm điều đó tôi cho rằng mỗi dự án đều có dịch vụ đặt phòng riêng sẽ nói chuyện với dịch vụ đặt phòng cốt lõi nhưng tôi không chắc cách tiếp cận tốt nhất ở đây là :-)