Một số tùy chọn.
Sử dụng kênh liên lạc liên tục
Thay vì HTTP, thả các tin nhắn trong hàng đợi có tính sẵn sàng cao và liên tục. Ví dụ: Kafka. Miễn là máy chủ mục tiêu có sẵn tại một số điểm, nó sẽ nhận được thông báo.
Bạn có sự đánh đổi ngay bây giờ để cung cấp và quản trị một hệ thống con phức tạp (hàng đợi). Vì vậy, hãy chắc chắn rằng bạn phân tích xem điều này có đáng không.
Backoff và thử lại
Yêu cầu người gọi giữ yêu cầu thất bại (có thể vẫn tồn tại trên đĩa) và thử lại định kỳ. Trong trường hợp này, điều quan trọng là phải phân biệt giữa yêu cầu của bạn gây ra sự cố so với dịch vụ bị ngừng hoạt động. Cái trước có lẽ là do lỗi và nên được ghi lại ... thử lại có thể sẽ không tạo ra sự khác biệt cho đến khi sửa lỗi được thực hiện.
Phát hiện và bồi thường
Một tác vụ định kỳ kiểm tra các điều kiện nhất quán giữa các dịch vụ micros. Ví dụ, thất bại ghi lại tất cả các cách truy vấn API trực tiếp khi cần thiết. Nếu nó phát hiện ra một vấn đề (ví dụ như có một đơn đặt hàng nhưng vận chuyển không bao giờ nhận được danh sách đóng gói) thì hãy thực hiện các bước bồi thường. Những bước đó có thể là tạo một vé hỗ trợ cho việc sửa lỗi thủ công hoặc gửi email cho ai đó hoặc bất cứ điều gì.
Xem xét lựa chọn thay thế thiết kế
Một trường hợp như thế này có thể yêu cầu một cổng API để quản lý các cuộc gọi đến các dịch vụ siêu nhỏ bị ảnh hưởng. Bằng cách đó bạn kiểm soát chiến thuật nào được sử dụng để giảm thiểu vấn đề này. Bạn có thể không muốn tạo gánh nặng cho khách hàng với những chi tiết triển khai đó. Xem mô hình ngắt mạch .
Bởi vì microservice là độc lập, sẽ luôn tồn tại một số trường hợp thất bại có thể dẫn đến sự không nhất quán. Bạn phải chuẩn bị để thực hiện sửa lỗi thủ công khi những phát sinh đó.
Nếu bạn yêu cầu sự nhất quán mạnh mẽ, thì microservice sẽ không phù hợp. Nếu vẫn cần khả năng mở rộng, bạn có thể muốn xem xét sharding nơi dữ liệu có liên quan có thể được đồng nằm trên mảnh tương tự cho đảm bảo tính nhất quán. Bạn vẫn có thể mở rộng IO bằng cách thêm phân đoạn.
Nếu bạn cần sự nhất quán mạnh mẽ và không gặp vấn đề về khả năng mở rộng, thì chỉ cần sử dụng các dịch vụ nguyên khối. Sử dụng các thư viện làm ranh giới trong ứng dụng của bạn để phân tách mối quan tâm.