Get in touch
or send us a question?
CONTACT

Serverless Architecture trong AWS (phần 2)

thumbnail

Serverless Framework

Nó thực hiện hầu hết các cơ sở hạ tầng cơ bản như Code (IaC) nâng nặng (trên đỉnh CloudFormation). Xác định một Lambda phản ứng với HTTP event, Serverless Framework (FW) sẽ tự động triển khai tài nguyên API Gateway có liên quan và route tương ứng cùng với Lambda mới. Và khi đạt đến giới hạn FW nhưng muốn có cấu hình dịch vụ phức tạp hơn, chúng tôi chỉ cần thêm một số CloudFormation.

Chi tiết về các Lambda …

Lambda là một function, đảm nhận một job và thực hiện nó. Ví dụ:

Khi Front-end cần lấy danh sách các mặt hàng? Làm một Lambda cho nó.
Cần gửi email xác nhận sau khi người dùng đã đăng ký? Làm một Lambda khác cho nó.

Tất nhiên với một số mã cụ thể (như data entities) có thể được factorised và chia sẻ trong thư mục chuyên dụng, nhưng hãy chú ý kỹ đến mã này, bởi vì khi thay đổi sẽ ảnh hưởng đến tất cả các Lambdas có liên quan; và vì Lambdas có thể được test và deploy độc lập nên chúng ta có thể sẽ bỏ lỡ điều gì đó.

… Phân tách trong các micro-services …

Để không có các nhóm chồng lên nhau, không có package.json và serverless.yml khổng lồ (CloudFormation có giới hạn 200 resources), thời gian triển khai CloudFormation dài “bất tận” và thực thi rõ ràng trách nhiệm giữa các Lambdas, chúng ta cần xác định ranh giới để phân tách dự án trong các Micro-Services. Ben Ellerby đã viết ở đây về một loại workshop, EventBridge Storming, giúp xác định các ranh giới đó.

Trong repo đơn của chúng tôi:

1 micro-service = 1 ngăn xếp CloudFormation = 1 serverless.yml + pack.json.

Ngoài ra, 1 micro-service sẽ làm chủ các thực thể dữ liệu của chính nó và không được chia sẻ với các micro-services khác.

Chúng tôi khuyến khích sử dụng full JavaScrip, nhưng có thể có nhiều lý do khiến bạn muốn sử dụng ngôn ngữ khác hoặc di chuyển dần dần sang serverless trong JavaScript: lợi thế cực lớn của micro-service trong serverless là bạn có thể dễ dàng trộn lẫn các công nghệ trong kiến trúc của bạn trong khi vẫn duy trì một kiến trúc dễ dàng và mạch lạc với các giao diện không thể biết giữa các micro-services.

… giao tiếp hướng Event

Các micro-services cần phải độc lập hoàn toàn với nhau, Nếu một trong số chúng ngừng hoạt động hoặc nếu chúng tôi đang thực hiện các thay đổi lớn ở một dịch vụ, thì tác động lên phần còn lại của hệ thống phải càng hạn chế càng tốt. Và để giải quyết vấn đề đó, Lambdas chỉ liên lạc với nhau thông qua EventBridge, một event bus không máy chủ. Trong bài viết này, Ben Ellerby nói chi tiết về lý do tại sao EventBridge lại hữu ích như vậy.

(còn tiếp)