Giới hạn khả năng scale của Lambda và Api Gateway

  • Chào các bạn, mình là Duy Nam Group 1 VTI Japan. Hôm nay mình xin được giới thiệu về việc giới hạn khả năng scale của Lambda và Api Gateway

Background

  • Chuyện là mình nghe đứa em nói tháng rồi em lỡ tay dùng Lambda tốn hơn 15k đô la Trump nên mình nghĩ đến việc chia sẻ về việc Sizing hệ thống.

  • Khi bạn phát triển một Serverless system hoặc một API, bạn nên giới hạn khả năng scale của hệ thống. Bạn thực sự không cần đến một hệ thống cloud đáp ứng một vài Lambda Function mà chỉ gọi bằng tay từng event trong một vài giây.

  • Khái niệm Infrastructure Sizing chắc cũng không còn lạ lẫm với anh em làm công việc Infrastructure. Tuy nhiên, chúng ta thường gặp những công việc như Sizing Server giống như EC2, ECS hay container. Việc sizing một kiến trúc Serverless cũng vẫn là một điều khá mới mẻ. Bạn thử tưởng tượng, việc scale Lambda một cách bừa bãi cũng dẫn đến chi phí bạn phải trả là một con số đáng kinh ngạc, trong một tháng có thể lên đến hàng chục ngàn USD. Hàng chục ngàn USD đối với một hệ thống lớn cũng không bất ngờ, tuy nhiên có bao giờ bạn tự hỏi mình đã sử dụng tối ưu lượng resource của mình?

  • Trong suốt quá trình phát triển, việc giới hạn resource luôn có ích cho bạn. Software Engineering họ muốn thử mọi thứ và bạn muốn điều đó mà không dẫn đến những hóa đơn đau đớn như vậy.

  • Tại môi trường Product, sau khi đã test các giới hạn một cách cẩn thận, bạn có thể loại bỏ việc giới hạn resource cho trả nghiệm người dùng được tốt hơn và đúng với kịch bản đề ra.

  • 2 Service nổi bật của AWS về Serverless Computing là API Gateway và Lamdba. Hôm nay mình xin chia sẻ về việc Limit 2 resource này.

Mục lục

  1. Cách tính chi phí của Lambda
  2. Cách tính chi phí của API Gateway
  3. Giới hạn resource cho Lambda
  4. Giới hạn resource cho API Gateway
  5. Kết luận

1. Cách tính chi phí của Lambda:

  • Lambda sử dụng một khái niệm Concurrent Executions (Thực thi đồng thời). Chính là số lượng Lambda xử lý trong cùng một thời điểm.

  • Mặc định của Concurrent Executions là 1000 đối với 1 AWS Account và chúng ta có thể gia hạn với con số cao hơn. Một yếu tố đi cùng với Concurrent Executions là thời gian thực thi Request.

  • Ví dụ: trung bình một request là 100ms, hệ thống của bạn trong 1s có thể đáp ứng được 10k requests.

  • Để tính toán tổng chị phí cho Lambda, chúng ta cần tính đến lượng memory đã cấp cho Lambda Function. Thời điểm hiện tại Lambda có thể được cấp phát từ 128Mb cho đến 10240 Mb (10Gb)

  • Chi phí phải trả cho Lambda là $0.00001667 / GB-sec. Tổng chi phí cho thời gian chạy Lamda mỗi giờ cho 2 điểm giới hạn của Memory sẽ là:

    • 0.128 * $0.00001667 * 1000 * 60 * 60 = $7.68 / h
    • 10.240 * $0.00001667 * 1000 * 60 * 60 = $614.52 / h
  • Có một yếu tố định giá khác phụ thuộc vào số lần thực hiện Lambda, retry Lambda … nhưng điều đó không ảnh hưởng lớn đến cost nên chúng ta bỏ qua trong trường hợp này.

  • Nhìn vào 2 giới hạn trên, các bạn có thể định lượng được trong 1h chi phí của Lambda có thể giao động từ $7 đến $615. Cùng 10k Request/h mà sự sai khác khá xa phải không các bạn.

2. Cách tính chi phí của API Gateway:

  • Chi phí của API Gateway được tính toán dựa trên Number of Requests (số lượng request đến API Gateway).
  • Hiện tại với mỗi triệu request đến sẽ có giá $3.5. Trong một giờ với 10k requests sẽ có giá là:
    • 10000 * 60 * 60 * $3.5 / 1000000 = $126 / h

3. Giới hạn resource cho Lambda:

  • Lambda sử dụng khái niệm Reserved Concurrency. Chúng có nghĩa rằng đảm bảo một số lượng Lambda tối đa bạn có thể dùng. Giống như chúng ta đặt bàn trước tại nhà hàng và chúng ta chỉ được sử dụng số ghế mà đã order từ trước.

  • Chúng ta có thể giới hạn số lượng Concurrent Executions trong setting của Lambda Console như sau:

  • Tại Cloudformation setting Concurrent Executions sẽ được định nghĩa tại:

Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      ...
      ReservedConcurrentExecutions: 100
  • Ngoài ra các bạn có thể dựa vào log của Lambda để biết được tối đa lượng Memory đã được sử dụng cho Function của mình để giới hạn việc cấp phát Lambda cho môi trường Product.

4. Giới hạn resource cho API Gateway:

  • Đối với API Gateway bạn có thể số lượng request đến API Gateway dựa trên thông số ThrottlingRateLimit.

  • Tại API Gateway Console bạn có thể điều chỉnh như sau:

  • Tại Cloudformation setting ThrottlingRateLimit sẽ được định nghĩa tại:

Resources:
  Limiting:
    Type: AWS::ApiGateway::Stage
    Properties:
      ...
      MethodSettings:
      - ResourcePath: "/*"
        HttpMethod: "*"
        ThrottlingBurstLimit: 5000
        ThrottlingRateLimit: 10000

5. Kết luận:

  • Vừa rồi mình đã giới thiệu tư tưởng và cách giới hạn resource của Lambda và API Gateway, hi vọng sẽ giúp ích các bạn trong việc đo lường được chi phí phát triển và tránh được những hóa đơn đau đớn.
  • Không dừng lại ở kiến trúc Serverless đối với các server thông thường giống như EC2, ECS … việc phát triển nên được đánh giá về hiệu suất server và chi phí phát sinh.

Thanks and Best Regards!

Leave a Reply

Your email address will not be published. Required fields are marked *