Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

AWS Lambda - MySQL caching

Điều đầu tiên là hiểu cách require hoạt động trong NodeJS. Tôi khuyên bạn nên xem qua bài viết nếu bạn muốn biết thêm về nó.

Bây giờ, khi bạn đã yêu cầu kết nối của mình, bạn có nó là tốt và nó sẽ không bị yêu cầu nữa. Điều này phù hợp với những gì bạn đang tìm kiếm vì bạn không muốn lấn át cơ sở dữ liệu của mình bằng cách tạo một kết nối mới mỗi lần.

Nhưng, có một vấn đề ...

Lambda Cold Starts

Bất cứ khi nào bạn gọi một hàm Lambda lần đầu tiên, nó sẽ quay lên một vùng chứa với hàm của bạn bên trong nó và giữ cho nó tồn tại trong khoảng 5 phút. Rất có thể (mặc dù không được đảm bảo) rằng bạn sẽ đạt được cùng một vùng chứa mọi lúc miễn là bạn đang đưa ra 1 yêu cầu tại một thời điểm. Nhưng điều gì sẽ xảy ra nếu bạn có 2 yêu cầu cùng một lúc? Sau đó, một thùng chứa khác sẽ được kéo lên song song với thùng chứa trước đó, đã được hâm nóng. Bạn vừa tạo một kết nối khác trên cơ sở dữ liệu của mình và bây giờ bạn có 2 vùng chứa. Bây giờ, hãy đoán xem điều gì sẽ xảy ra nếu bạn có 3 yêu cầu đồng thời? Đúng! Một vùng chứa khác, tương đương với một kết nối DB nữa.

Miễn là có các yêu cầu mới đối với các chức năng Lambda của bạn, theo mặc định, chúng sẽ mở rộng để đáp ứng nhu cầu (bạn có thể định cấu hình nó trong bảng điều khiển để giới hạn việc thực thi ở nhiều lần thực thi đồng thời như bạn muốn - tôn trọng giới hạn Tài khoản của bạn)

Bạn không thể đảm bảo rằng bạn có một lượng kết nối cố định đến Cơ sở dữ liệu của mình một cách an toàn chỉ bằng cách yêu cầu mã của bạn khi gọi một Hàm. Điều tốt là đây không phải là lỗi của bạn. Đây chỉ là cách các hàm Lambda hoạt động.

... một cách tiếp cận khác là

để lưu vào bộ đệm dữ liệu bạn muốn trong hệ thống bộ nhớ đệm thực, như ElasticCache , Ví dụ. Sau đó, bạn có thể kích hoạt một hàm Lambda bởi Sự kiện CloudWatch chạy trong một tần số thời gian nhất định. Sau đó, hàm này sẽ truy vấn DB của bạn và lưu trữ kết quả trong bộ nhớ cache bên ngoài của bạn. Bằng cách này, bạn đảm bảo rằng kết nối DB của mình chỉ được mở bởi một Lambda tại một thời điểm, vì nó sẽ tôn trọng Sự kiện CloudWatch, hóa ra chỉ chạy một lần cho mỗi lần kích hoạt.

CHỈNH SỬA :sau khi OP gửi một liên kết trong phần bình luận, tôi đã quyết định bổ sung thêm một vài thông tin để làm rõ điều mà bài viết đã đề cập muốn nói

Từ bài báo:

Và đây chính xác là những gì bạn đang làm. Và điều này hoạt động! Nhưng vấn đề là nếu bạn có N kết nối (Yêu cầu Lambda) cùng một lúc. Nếu bạn không đặt bất kỳ giới hạn nào, theo mặc định, có thể tạo ra tối đa 1000 hàm Lambda đồng thời. Bây giờ, nếu sau đó bạn thực hiện đồng thời 1000 yêu cầu khác trong 5 phút tới, rất có thể bạn sẽ không mở bất kỳ kết nối mới nào vì chúng đã được mở trên các lần gọi trước đó và các vùng chứa vẫn còn tồn tại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bảo mật MySQL:Phần thứ hai

  2. Tại sao MySQL không sử dụng các chỉ mục tối ưu

  3. Sự khác biệt giữa việc sử dụng INDEX và KEY trong MySQL là gì?

  4. MySQL kích hoạt / trì hoãn thực thi thủ tục

  5. cách sắp xếp một phản hồi JSON dựa trên mối quan hệ cơ sở dữ liệu bằng cách sử dụng tài liệu hùng hồn