Các phong cách kiến trúc và mẫu giao tiếp

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

Ricardo Sueiras

Principal Technologist

Giảng viên của bạn

giảng viên

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

Mẫu kiến trúc là gì?

 

 

Kiến trúc ứng dụng

 

  • Giải pháp có thể lặp lại cho một vấn đề thường gặp.
  • Mẫu giúp bạn ghép các dịch vụ AWS với nhau.
  • Kiến trúc quyết định ứng dụng hoạt động thế nào khi tải cao.
  • Có vài mẫu kiến trúc bạn cần biết.
Phát triển ứng dụng trên AWS

Monolith (nguyên khối)

 

 

sơ đồ ví dụ kiến trúc nguyên khối

 

 

  • Một khối đơn, ghép nối chặt chẽ.
  • Một mã nguồn, một lần triển khai.
  • Ban đầu phát triển đơn giản.
  • Khó mở rộng: phải mở rộng tất cả cùng lúc.
Phát triển ứng dụng trên AWS

Microservices

 

kiến trúc microservices

 

  • Dịch vụ nhỏ, độc lập: mỗi dịch vụ phụ trách một năng lực nghiệp vụ.
  • Triển khai, mở rộng, cập nhật từng dịch vụ độc lập.
  • Đánh đổi: vận hành phức tạp hơn và phải quản lý giao tiếp giữa dịch vụ.
Phát triển ứng dụng trên AWS

Serverless

  • Không quản lý hạ tầng, chỉ có mã và cấu hình.
  • Xây dựng bằng cách ghép các dịch vụ AWS quản lý sẵn.
  • AWS lo cấp phát, mở rộng và bảo trì.
  • Đánh đổi: giới hạn thời gian chạy, khởi động lạnh, phụ thuộc nhà cung cấp.
  • Gần như không có chi phí vận hành và tự động mở rộng.

 

kiến trúc serverless

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

Kiến trúc hướng sự kiện (EDA)

  • Các thành phần giao tiếp bằng sự kiện, không gọi trực tiếp.
  • Sự kiện ghi lại điều đã xảy ra (đặt hàng, nhận thanh toán, gửi hàng).
  • Bên tạo phát ra sự kiện.
  • Bên tiêu thụ đăng ký những sự kiện họ quan tâm.

 

kiến trúc hướng sự kiện

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

Hệ thống ghép nối chặt và lỏng

  • Ứng dụng cloud hiện đại gồm nhiều dịch vụ.
  • Các dịch vụ phải giao tiếp và phối hợp để hoàn thành công việc.
  • Giao tiếp đồng bộ ghép nối chặt.
  • Giao tiếp bất đồng bộ ghép nối lỏng.

hệ thống ghép chặt và lỏng

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

Giao tiếp đồng bộ

 

giao tiếp đồng bộ

  • Một dịch vụ gửi yêu cầu và chờ phản hồi.
  • Bên gọi bị chặn cho đến khi có phản hồi hoặc hết thời gian chờ.
  • Dễ triển khai và hiểu.
  • Ghép nối chặt: chậm hoặc lỗi hạ nguồn có thể lan truyền.
  • Giảm thiểu bằng timeout, retry và circuit breaker.
Phát triển ứng dụng trên AWS

Mẫu: request/response

request response

  • Xương sống của hầu hết giao diện ứng dụng.
  • Hành vi dễ dự đoán.
  • Phản hồi tức thì cho người dùng.
Phát triển ứng dụng trên AWS

Giao tiếp bất đồng bộ

 

giao tiếp bất đồng bộ

  • Bên gửi không chờ phản hồi.
  • Gửi thông điệp hoặc sự kiện rồi tiếp tục xử lý.
  • Bên nhận xử lý thông điệp độc lập.
  • Ghép nối lỏng: mở rộng và chịu lỗi tốt hơn.
  • Xử lý tốt đột biến lưu lượng và mất kết nối cục bộ.
  • Thách thức: thông điệp trùng lặp, thứ tự, nhất quán cuối cùng.
Phát triển ứng dụng trên AWS

Mẫu: tách ghép bằng hàng đợi

  • Bên sản xuất gửi thông điệp vào hàng đợi.
  • Bên tiêu thụ tự kéo và xử lý thông điệp.
  • Ngăn lỗi lan truyền dây chuyền.
  • Bên sản xuất và tiêu thụ mở rộng độc lập.

  tách ghép bằng hàng đợi

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

Mẫu: hàng đợi worker

  • Nhiều worker kéo thông điệp từ một hàng đợi.
  • Xử lý thông điệp song song.
  • Cho phép mở rộng ngang và thông lượng cao hơn.
  • Không đảm bảo thứ tự thông điệp.

worker-queue

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

Mẫu: publish/subscribe

  • Publisher gửi thông điệp vào chủ đề SNS.
  • Nhiều subscriber nhận cùng một thông điệp.
  • Phát sóng thời gian thực đến nhiều bên tiêu thụ.

 

mẫu publish/subscribe

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

Mẫu: fan-out

fanout

  • Một thông điệp được gửi đồng thời tới nhiều bên tiêu thụ.
  • Dùng rộng rãi trong kiến trúc hướng sự kiện.
  • Hữu ích khi nhiều dịch vụ cần phản ứng với cùng một sự kiện.
Phát triển ứng dụng trên AWS

Thứ tự thông điệp

thứ tự thông điệp

  • Một số tác vụ phải xử lý thông điệp theo đúng thứ tự.
  • Amazon SQS FIFO và Kinesis hỗ trợ xử lý có thứ tự.
  • Thứ tự nghiêm ngặt làm giảm thông lượng.
  • Cân bằng giữa tính đúng đắn và khả năng mở rộng.
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...