Kiến trúc có quy mô lớn và các tích hợp riêng cho Amazon API Gateway

của James Beswick | ngày 26 tháng 9 năm 2023 | trong Amazon API Gateway, Serverless | Permalink |  Share

Bài viết này được viết bởi Lior Sadan, Sr. Solutions Architect, và Anandprasanna Gaitonde, Sr. Solutions Architect

Các tổ chức sử dụng Amazon API Gateway để xây dựng các API bảo mật, mạnh mẽ, hiển thị các dịch vụ nội bộ ra các ứng dụng khác hoặc người dùng bên ngoài. Khi môi trường phát triển thành nhiều microservices, khách hàng phải đảm bảo API layer có thể xử lý quy mô mà không ảnh hưởng đến bảo mật và hiệu năng. API Gateway cung cấp nhiều loại API và các tùy chọn tích hợp mà các nhà phát triển phải xem xét những tùy chọn ảnh hưởng đến khả năng mở rộng quy mô API layer an toàn và hiệu quả khi môi trường microservices phát triển. 

Bài viết này sẽ so sánh các tùy chọn kiến trúc để xây dựng khả năng mở rộng, tích hợp riêng API Gateway cho microservices. Nó bao gồm REST và HTTP APIS cũng như việc tích hợp riêng của chúng và cho thầy làm sao để phát triển kiến trúc microservices an toàn, có khả năng mở rộng.

Tổng quát

Dưới đây là cách thực hiện điển hình API Gateway với Backend tích hợp với nhiều microservices:

API Gateway xử lý rất nhiều API layer, trong khi tích hợp với nhiều backend microservices chạy trên Amazon EC2, Amazon Elastic Container Service (ECS), or Amazon Elastic Kubernetes Service (EKS). Bài viết này tập trung vào containerized microservices hiển thị cái internal endpoints mà các layer sau đó hiển thị ra ngoài.

Để giữ microservices an toàn và được bảo vệ từ lưu lượng truy cập bên ngoài, chúng thường được thực hiện trong một private subnet của một Amazon Virtual Private Cloud (VPC) không thể truy cập từ internet. API Gateway cung cấp một cách để những resources truy cập ra bên ngoài một cách an toàn thông qua private integrations sử dụng  VPC link. Private Integrations chuyển tiếp lưu lượng truy cập từ bên ngoài và gửi tới API tới private resources, mà không để lộ các services ra internet và không rời khỏi AWS network. Để có thêm thông tin, truy cập Best Practices for Designing Amazon API Gateway Private APIs and Private Integration.

Kịch bản ví dụ có 4 microservices có thể được tổ chức trên một hoặc nhiều VPCs. Nó cho thấy patterns tích hợp microservices với front-end load balancer và API Gateway thông qua VPC links

Trong VPC links cho phép private connections đến microservices, khách hàng có thể có một vài bổ sung nếu cần:

  • Tăng quy mô: Hỗ trợ số lượng lớn microservices đằng sau API Gateway
  • Triển khai độc lập: Load balancer chuyên dụng cho mỗi microservice cho phép các team thực hiện blue/green deployments độc lập mà không tác động đến các team khác
  • Giảm bớt sự phức tạp: Khả năng sử dụng những microservices load balancer có sẵn thay vì thêm vào load balancer bổ sung để tích hợp với API Gateway
  • Độ trễ thấp: Đảm bảo độ trễ thấp trong luồng API request/response

API Gateway cung cấp HTTP APIs và REST APIs (xem ở Choosing between REST APIs and HTTP APIs) để xây dựng RESTful APIs. Với những microservices architecture lớn, loại API ảnh hưởng đến việc cân nhắc tích hợp:

VPC link hỗ trợ tích hợpQuota trên VPC links cho mỗi account trên Region
REST APINetwork Load Balancer (NLB)20
HTTP APINetwork Load Balancer (NLB), Application Load Balancer (ALB), and AWS Cloud Map10

Bài viết này trình bày 4 tùy chọn private integration có tính đến khả năng và hạn mức của VPC link cho REST và HTTP APIs: 

  • Tùy chọn 1: HTTP API sử dụng VPC link tới nhiều NLBs hoặc ALBs.
  • Tùy chọn 2: REST API sử dụng nhiều VPC links
  • Tùy chọn 3: REST API sử dụng VPC link với NLB
  • Tùy chọn 4: REST API sử dụng VPC link với NLB và ALB targets.

Tùy chọn 1: HTTP API sử dụng VPC link tới nhiều NLBs hoặc ALBs

HTTP APIS cho phép kết nối đến một VPC link đến nhiều ALBs, NLBs hoặc những resource được đăng ký với AWS Cloud Map service. Điều này cung cấp một cách tiếp cập phân nhánh để kết nối tới nhiều backend microservices. Tuy nhiên, những load balancer tích hợp với một VPC link cụ thể nên nằm trong cùng một VPC.

Hai microservices trong cùng một VPC, đều có một ALB chuyên dụng. ALB này lắng nghe trực tiếp từ lưu lượng truy cập HTTPS đến từng backend microservice tương ứng với target group. Một VPC link được kết nối tới hai ALBs trong VPC. API Gateway sử dụng  path-based routing rules để chuyển tiếp các request đến load balancer phù hợp và những microservice được liên kết. Cách tiếp cận này được đề cập trong Best Practices for Designing Amazon API Gateway Private APIs and Private Integration – HTTP API. Các mẫu CloudFormation mẫu để triển khai giải pháp này hiện có trên GitHub.

Bạn có thể thêm vào các ALBs và microservices trong giới hạn VPC IP. Sử dụng Network Address Usage (NAU) để thiết kế việc phân phối microservices thông qua VPCs. Mở rộng quy mô của một VPC bằng cách thêm VPC links để kết nối tới nhiều VPCs bên trong hạn mức của VPC link. Bạn có thể mở rộng thêm bằng cách sử dụng routing rules như path-based để định tuyến đến ALB kết nối với nhiều services đằng sau một ALB (xem ở see Quotas for your Application Load Balancers). Kiến trúc này cũng có thể được xây dựng sử dụng một NLB.

Lợi ích:

  • Khả năng mở rộng cao. Phân phối tới nhiều microservices sử dụng một VPC link hoặc khả năng ghép kinh của ALB/NLB.
  • Tích hợp trực tiếp với những microservices load balancer hiện có để cắt nhạp những thành phần mới và cắt giảm gánh nặng phận hành.
  • Độ trễ thấp cho API request/response nhờ việc tích hợp trực tiếp
  • Load balancer chuyên dụng cho mỗi microservice cho phép triển khai độc lập cho các microservices teams.

Tùy chọn 2: REST API sử dụng nhiều VPC links

Với REST APIs, kiến trúc hỗ trợ nhiều microservices có thể khác nhau do những cân nhắc sau: 

  • NLB chỉ được hỗ trợ private integration cho REST APIs.
  • VPC links cho REST APIs chỉ có thể có một target NLB.

Một VPC link được yêu cầu cho mỗi NLB, thậm chí các NLB trong cùng VPC. Mỗi NLB phục vụ một microservice, với một listener định tuyến lưu lượng truy cập API Gateway đến target group. API Gateway path-based routing gửi request đến những NLB phù hợp và những microservices tương ứng. Quá trình thiết lập cần thiết cho private integration tương tự với ví dụ được mô tả trong Tutorial: Build a REST API with API Gateway private integration.

Để mở rộng hơn nữa, hãy thêm VPC link bổ sung và NLB tích hợp với mỗi microservice trong cùng hoặc khác VPCs dựa trên những gì bạn cần và những yêu cầu khác nhau. Cách tiếp cận này bị giới hạn bởi hạn mức VPC link cho mỗi tài khoản ở mỗi Khu vực.

Lợi ích:

  • Một NLB trong request path giảm sự vận phức tạp trong vận hành.
  • NLBs chuyên dụng cho mỗi microservices cho phép triển khai độc lập.
  • Không cần bước nhảy bổ sung trong API request path dẫn đến độ trễ thấp hơn.

Cân nhắc:

  • Giới hạn khả năng mở rộng vì ánh xạ một-một của VPC links tới NLBs và microservices bị giới hạn bởi định mức VPC links cho mỗi account trên Region.

 Tùy chọn 3: REST API sử dụng VPC link với NLB

Ánh xạ một -một của VPC links tới NLBs và microservices trong tùy chọn số 2 bị giới hạn khả năng mở rộng vì định mức của VPC links. Một giải pháp thay thế là sử dụng nhiều microservices cho mỗi một NLB.

Một NLB trước nhiều microservices trong một VPC bằng cách sử dụng nhiều listeners, với mỗi listener trên một port khác nhau cho mỗi microservice. Ở đây, NLB1 trước hai microservice trong VPC thứ nhất. NLB2 trước hai microservices khác trong VPC thứ 2. Mới nhiều microservices cho NLB, routing được định nghĩa cho REST API khi chọn một integration point cho một phương pháp. Bạn có thể định nghĩa mỗi service sử dụng phối hợp việc chọn VPC link mà được tích hợp với một NLB nhất định, và một port nhất định được gán cho mỗi microservice tại NLB listener và được xử lý từ Endpoint URL.

Để mở rộng hơn nữa, thêm những listener bổ sung vào những NLB hiện có, bị giới hạn bởi Quotas for your Network Load Balancers. Trong trường hợp mà mỗi microservice có một load balancer hoặc access point chuyên dụng, những cấu hình này làm targets cho NLB. Ngoài ra, hãy tích hợp bổ sung microservices bằng cách thêm những VPC link bổ sung.

Lợi ích:

  • Khả năng mở rộng cao – giới hạn bởi hạn mức NLB listener và hạn mức VPC link.
  • Việc quản lý ít NLBs hỗ trợ nhiều microservices cắt giảm sự phức tạp trong vận hành.
  • Độ trễ thấp với một NLB trong request path.

Cân nhắc:

  • Chia sẻ cấu hình NLB giới hạn khả năng triển khai độc lập cho mỗi microservices teams.

Tùy chọn 4: REST API sử dụng VPC link với NLB và ALB targets

Khách hàng thường xây dựng microservices với ALB như access point của họ. Để hiển thị những điều này thông qua API Gateway REST APIs, bạn có tạn dung ALB as a target for NLB.  Pattern này cũng tăng số lượng microservices được hỗ trợ so với kiến trúc của tùy chọn số 3.

Một VPC links (VPCLink1) được tạo ra với một NLB1 trong VPC1. ALB1 và ALB2 hỗ trợ giao diện người dùng của microservices mS1 và mS2, được thêm dưới dạng NLB targets trên những listener riêng biệt. VPC2 có cấu hình tương tự. Nhu cầu tách biệt và không gian IP quyết định xem microservices có thể nằm trong một hay nhiều VPC.

Để tăng khả năng mở rộng:

  • Tạo ra những VPC link bổ sung tích hợp với NLBs mới.
  • Thêm NLB listeners để hỗ trợ nhiều ALB target hơn.
  • Cấu hình ALB với path-based rules để định tuyến request tới nhiều microservices.

Lợi ích:

  • Các dịch vụ tích hợp có khả năng mở rộng cao sử dụng NLBs và ALBs.
  • Có thể triển khai độc lập cho mỗi team khi mỗi ALB được dành riêng cho một microservice duy nhất.

Cân nhắc:

  • Nhiều load balancer trong request path có thể tăng độ trễ.

Những cân nhắc và best practices

Bên cạnh sự cân nhắc về quy mô với việc tích hợp VPC link đã thảo luận trong bài viết này, có một vài cân nhắc khác:

Kết luận

Bài viết này khám phá việc xây dựng các API Gateway Integration cho microservice sử dụng VPC links. VPC links cho phép chuyển tiếp lưu lượng truy cập bên ngoài đến backend microservices không thông qua internet và không rời khỏi AWS network. Bài viết này bao gồm những cân nhắc mở rộng dựa trên việc sử dụng REST APIs vs HTTP APIs và làm sao tích hợp chúng với NLBs or ALBs thông qua nhiều VPC.

Trong khi những việc chọn loại API và load balancer có những thiết kế khác nhau, một điều quan trọng cần nhớ về việc mở rộng quy mô đã được thảo luận trong bài viết này khi thiết kế kiến trúc API layer của bạn. Bằng cách tối ưu hóa việc triển khai API Gateway về hiệu suất, độ trễ và nhu cầu vận hành, bạn có thể xây dựng một API mạnh mẽ, an toàn để hiển thị các vi dịch vụ trên quy mô lớn.

Để có thêm tài nguyên học tập, truy cập  Serverless Land.

Link bài viết

Leave a comment