Tôi đang thiết kế một ứng dụng bằng Micro-Services và tôi không chắc về cơ chế tốt nhất để sử dụng để thu thập dữ liệu từ nhiều dịch vụ.
Tôi tin rằng có hai lựa chọn:
- Tích hợp cơ chế giao tiếp 'liên dịch vụ' cho phép các dịch vụ nói chuyện trực tiếp. API Gateway sẽ gọi một dịch vụ riêng lẻ, sau đó gọi các dịch vụ khác để thu thập dữ liệu, trước khi trả lại phản hồi tổng hợp cho API Gateway. API sau đó trả về phản hồi cho người gọi. (Đây sẽ phải là các cuộc gọi đồng bộ khi cuộc gọi đến dịch vụB yêu cầu phản hồi từ dịch vụA. Dịch vụ địa chỉ và dịch vụ địa chỉ của IE.)
- Yêu cầu Cổng API gọi trực tiếp từng dịch vụ và hợp nhất dữ liệu trong API trước khi trả lời phản hồi.
Tôi đang nghiêng về lựa chọn thứ hai, vì các dịch vụ nói chuyện với nhau sẽ giới thiệu khớp nối, trong trường hợp đó tôi cũng có thể chỉ là kiến trúc sư một ứng dụng nguyên khối. Tuy nhiên, có một vài nhược điểm nghiêm trọng mà tôi có thể nghĩ ra khỏi đỉnh đầu với tùy chọn này:
Việc API thực thi nhiều cuộc gọi đến nhiều dịch vụ sẽ tăng tải cho máy chủ API, đặc biệt là khi một số cuộc gọi đó bị chặn.
Phương pháp này có nghĩa là API phải 'nhận thức' về những gì ứng dụng đang cố gắng thực hiện (IE Logic sẽ phải được lập trình vào API để xử lý lần lượt gọi các dịch vụ, sau đó mới hợp nhất dữ liệu) hoạt động như một 'điểm cuối' câm cho các dịch vụ vi mô.
Tôi muốn biết cách tiếp cận tiêu chuẩn cho vấn đề này là gì và liệu có lựa chọn thứ ba nào khác mà tôi thiếu không?