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

xây dựng cho khả năng phục hồi

Phát triển ứng dụng trên AWS

mọi thứ rồi sẽ hỏng

Phát triển ứng dụng trên AWS

Lỗi tạm thờ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.
Phát triển ứng dụng trên AWS

Timeouts

 

hết thời gian chờ

  • 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.
Phát triển ứng dụng trên AWS

Lỗi vĩnh viễn

 

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.
Phát triển ứng dụng trên AWS

Giới hạn API

 

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.
Phát triển ứng dụng trên AWS

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.

 

chiến lược retry

Phát triển ứng dụng trên AWS

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.

 

khả năng của sdk

Phát triển ứng dụng trên AWS

Quản lý logic retry

 

không phải lúc nào cũng 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.
Phát triển ứng dụng trên AWS

Quản lý timeout

 

Quản lý timeouts

  • 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.
Phát triển ứng dụng trên AWS

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 breakers

Phát triển ứng dụng trên AWS

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

Phát triển ứng dụng trên AWS

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.

 

circuit breaker

Phát triển ứng dụng trên AWS

Dead letter queue

 

dql

  • 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
Phát triển ứng dụng trên AWS

Giới hạn API của AWS

 

Giới hạn API

  • 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.
Phát triển ứng dụng trên AWS

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.

 

bên thứ ba

Phát triển ứng dụng trên AWS

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ễ.

 

quản lý bên thứ ba

Phát triển ứng dụng trên AWS

Cùng luyện tập nào!

Phát triển ứng dụng trên AWS

Preparing Video For Download...