Thiết kế ứng dụng chịu lỗi và bền bỉ trên AWS
Phát triển ứng dụng trên AWS
Ricardo Sueiras
Principal Technologist
Xây dựng cho khả năng phục hồi
Lỗi tạm thời
Hiểu các kiểu lỗi phổ biến:
Lỗi tạm thời tự hết, thường có thể thử lại an toàn.
Timeouts
Hiểu các kiểu lỗi phổ biến:
Lỗi tạm thời tự hết, thường có thể thử lại an toàn.
Timeout: dịch vụ bên ngoài phản hồi quá chậm.
Lỗi vĩnh viễn
Hiểu các kiểu lỗi phổ biến:
Lỗi tạm thời tự hết, thường có thể thử lại an toàn.
Timeout: dịch vụ bên ngoài phản hồi quá chậm.
Lỗi vĩnh viễn: yêu cầu sai cơ bản, thử lại không giúp.
Giới hạn API
Hiểu các kiểu lỗi phổ biến:
Lỗi tạm thời tự hết, thường có thể thử lại an toàn.
Timeout: dịch vụ bên ngoài phản hồi quá chậm.
Lỗi vĩnh viễn: yêu cầu sai cơ bản, thử lại không giúp.
Giới hạn tốc độ API: quá nhiều yêu cầu, nhận HTTP 429 Too Many Requests.
Chiến lược retry
Lỗi trong hệ phân tán thường là tạm thời.
Thử lại thường sẽ thành công.
Thêm logic retry cẩn trọng, retry mù quáng có thể làm tệ hơn.
Exponential backoff: tăng dần thời gian chờ giữa các lần retry.
Jitter: thêm ngẫu nhiên để tránh dồn retry.
Giới hạn số lần retry: tránh vòng lặp vô hạn.
Khả năng gốc của AWS SDK
AWS SDK tự động xử lý retry.
Retry tích hợp gồm exponential backoff và jitter.
Yêu cầu thất bại hoặc bị throttle sẽ được retry với độ trễ tăng dần.
Giảm lượng mã xử lý lỗi bạn phải viết.
Quản lý logic retry
Logic retry không phải lúc nào cũng là đáp án.
Lỗi HTTP 4xx: server hiểu nhưng từ chối yêu cầu.
Yêu cầu không idempotent: retry có thể gây trùng lặp hoặc không nhất quán.
Quản lý timeout
Retry không giới hạn có thể khuếch đại vấn đề khi tải cao.
Kết hợp retry với timeout.
Timeout đặt thời gian chờ tối đa cho phản hồi.
Mọi cuộc gọi tới dịch vụ bên ngoài đều cần timeout.
Circuit breaker
Khi dịch vụ liên tục lỗi, chỉ retry là không đủ.
Tiếp tục gửi yêu cầu có thể quá tải dịch vụ đang lỗi.
Mẫu circuit breaker tạm dừng yêu cầu tới phụ thuộc không khỏe.
Trạng thái đóng: yêu cầu chảy bình thường.
Circuit breaker
Khi lỗi vượt ngưỡng, mạch chuyển sang mở.
Các yêu cầu tiếp theo bị chặn.
Circuit breaker
Sau thời gian hạ nhiệt, mạch vào trạng thái bán mở để thử phục hồi.
Dịch vụ phản hồi thành công: trở lại hoạt động bình thường.
Vẫn lỗi: mạch giữ mở.
Triển khai circuit breaker ở tầng ứng dụng.
Dead letter queue
Thông điệp lỗi liên tục có thể chặn hệ thống.
Đưa chúng ra khỏi luồng xử lý chính.
Thông điệp lỗi được đưa vào Dead Letter Queue.
Yếu tố quan trọng để xây ứng dụng bền bỉ.
Tuy vậy, cần hiểu đánh đổi
Giới hạn API của AWS
Bạn tương tác với dịch vụ AWS qua API.
Mỗi dịch vụ có giới hạn tốc độ API riêng.
Vượt giới hạn sẽ bị throttling (HTTP 429 Too Many Requests).
Thiết kế ứng dụng để xử lý throttling một cách êm ái.
Tích hợp với dịch vụ bên thứ ba
Dịch vụ bên thứ ba mang lại bất định.
Bạn không kiểm soát hiệu năng hay độ sẵn sàng của họ.
Đặt timeout để tránh chờ lâu.
Dùng retry với backoff cho sự cố tạm thời.
Cô lập phụ thuộc để hạn chế phạm vi ảnh hưởng.
Tích hợp với bên thứ ba
Cân nhắc chuyển từ giao tiếp đồng bộ sang bất đồng bộ.
Hệ thống vẫn xử lý dù dịch vụ ngoài bị trễ.
Cùng luyện tập nào!
Phát triển ứng dụng trên AWS
Preparing Video For Download...