Resiliency pattern

Tại sao khả năng phục hồi client-service lại quan trọng?

Trong hình vẽ trên đề cập đến việc sử dụng remote resource ví dụ như database hoặc các remote service. Service A gọi đến database của service A và service B, service B gọi đến database của service B và gọi đến bên thứ 3 là service C. Vì một lý do nào đó mà service C có thời điểm xử lý rất chậm dẫn đến service B phải chờ phản hồi rất lâu từ service C. Giả sử xử lý tại service B, hành động đọc ghi vào DB và hành động gọi sang service C diễn ra trong cùng một transaction, lúc này các connection kết nối vào DB cũng dần cạn kiệt do cùng phải chờ phản hồi từ service C (nếu mọi người đang dùng Spring Boot, Spring Framework thì tìm hiểu spring open-session-in-view, đây là một lỗi khá hay xảy ra nếu không chú ý đến). Điều tương tự diễn ra với service A. Cuối cùng service A, service B hết tài nguyên và không thể tiếp tục phục vụ các yêu cầu khác.

Đây chính là lý do vì sao cần đến các mẫu thiết kế để bảo vệ các client-service.

Một số resiliency pattern

Client-side load balancing, Circuit breaker, Fallback, Bulkhead, Rate limit pattern,…