Serverless tuyệt vời cho nhà phát triển muốn xây dựng ứng dụng end-to-end với chi phí bảo trì và tài chính thấp nhất. Serverless functions cho phép chạy mã của bạn không cần duy trì backend infra. Nhưng chúng stateless by design nên cần external data store. Vậy câu hỏi tiếp theo: database nào phù hợp nhất cho serverless? Tin tốt là các vendor database thấy xu hướng serverless và họ hoặc ra mắt sản phẩm serverless hoặc cố gắng thích ứng sản phẩm. Trong bài này, tôi sẽ liệt kê điều làm database tuyệt vời cho serverless. Sau đó liệt kê database tôi cá nhân cho là ứng cử viên cho database tuyệt vời cho Serverless.
Điều gì làm Database tuyệt vời cho Serverless?
- Dễ sử dụng: Nhà phát triển thế hệ mới không muốn mất ngày tuần học công nghệ. Họ muốn học qua video YouTube thay vì đọc hàng trang docs. Vì vậy database cho serverless nên đơn giản, trực quan.
- Serverless Pricing: Giá nên scale to zero. Tại sao phải trả tiền cho thứ không dùng. Mô hình định giá dựa trên per-bandwidth hoặc per-request là serverless vì tương quan với usage chính xác. Cá nhân tôi thích per-request vì dễ ước lượng hơn bandwidth.
- Developer friendly pricing (Định giá thân thiện dev): Giá nên đơn giản không bẫy. Một số trang giá phức tạp đến mức cần bài viết/blog giải thích. Một số vendor có calculator phức tạp. Rất tiếc đa số vendor thích giá phức tạp để giảm rủi ro. Vì vậy khó dự đoán chi phí trước khi thấy hóa đơn.
- Serverless Connections: Serverless functions scale lên hàng trăm thậm chí hàng nghìn trong giây. Nếu database yêu cầu persistent connections thì dễ hit connection limits. Kết nối HTTP không có vấn đề này vì nhẹ hơn và thường không có giới hạn như vậy.
- Độ trễ thấp: Độ trễ thêm là chi phí trong serverless functions. Nhưng chi phí thực là user không hài lòng chờ đợi trên trang web.
- Portability (Khả năng di động): Nếu muốn chuyển cloud vendor khác, có phải viết lại data layer không. Hay có thể test ứng dụng trên laptop không cần kết nối remote database.
- Consistency (Tính nhất quán): Thường có tradeoff giữa consistency và performance. Database ở vị trí khác nhau trên spectrum consistency & performance. Database tốt nên định nghĩa rõ guarantee consistency để user biết rủi ro và vấn đề có thể xảy ra.
- Scalability (Khả năng mở rộng): Database phải theo kịp khi ứng dụng nhận throughput cao. Tự động scale hoặc do cloud provider quản lý là lý tưởng. Bạn không nên lo lắng.
- Edge friendly: Cloudflare Workers và Fastly Compute là công nghệ cool cho phép chạy serverless functions tại edge gần user nhất. Chúng yêu cầu kết nối REST based nhưng cũng globally replicated database để giảm độ trễ.
- Globality (Toàn cầu hóa): Khi ứng dụng phổ biến toàn cầu, cần database hiệu suất tốt khắp nơi. Multi region replication là feature then chốt. Nhưng cẩn thận, kiểm tra giá. Feature này có thể đắt.
Các Database tốt nhất cho Serverless?
Trong phần này, tôi chia sẻ ấn tượng và ghi chú từ việc thử các database sau. Chúng không dựa trên phân tích khoa học nhưng hy vọng cho bạn ý tưởng trước khi làm phân tích thực tế.
MongoDB (Atlas)
-
Dễ sử dụng: MongoDB là NoSQL database và document store phổ biến nhất. API rất đơn giản, trực quan nhờ mô hình dữ liệu JSON based.
-
Portability: Gần như tất cả cloud provider có sản phẩm database với MongoDB API cũng như chạy MongoDB on-premise. Vì vậy không có vấn đề portability.
-
MongoDB Atlas gần đây công bố loại database Serverless. Ấn tượng cá nhân là giống hosted MongoDB instance dưới mô hình serverless pricing. Như thấy tại đây nhiều tính năng không hỗ trợ cho Serverless database bao gồm Node.js SDK.
-
Serverless Connections: MongoDB Atlas không cung cấp HTTP based (ví dụ REST) API. Dễ hit connection limit. Đó là lý do họ xuất bản bài viết cách tránh https://docs.atlas.mongodb.com/best-practices-connecting-from-aws-lambda/
** _(Cập nhật) MongoDB Atlas đã ra mắt HTTP based Data API _
Cassandra (Datastax Astra)
- Datastax Astra cung cấp REST và GraphQL API ngoài driver Cassandra native.
- Dễ sử dụng: Đối với tôi học Cassandra khó hơn MongoDB và Redis. Tuy nhiên team Datastax làm tốt console, rất trực quan. Nhưng tôi vẫn nhớ bị lạc trong docs với các phiên bản khác nhau của REST API.
- Developer friendly pricing: Giá của Datastax Astra không đơn giản. Mọi đơn vị tính riêng (reads, writes, bandwidth) và giá khác nhau tùy cloud provider thậm chí region. Datastax có định nghĩa riêng read/write units (RRU và WRU).
DynamoDB (AWS)
- Dễ sử dụng: Nếu bạn user AWS, dễ bắt đầu và làm việc với DynamoDB. Tuy nhiên tôi nghĩ MongoDB có query API dễ và trực quan hơn.
- Serverless connections: Kết nối DynamoDB dựa trên HTTP, không có vấn đề connection limit.
- Portability: Vấn đề lớn nhất ở đây. Không dùng DynamoDB ở đâu ngoài AWS.
FaunaDB
- Consistency: Có lẽ FaunaDB tốt nhất danh sách này về consistency. Nó đảm bảo consistency cùng global replication. Nhưng cẩn thận: đi kèm chi phí performance thêm. Cân nhắc xem có thực sự cần consistency mạnh như vậy không.
- Performance: Độ trễ cao hơn các DB khác do strong consistency.
- Dễ sử dụng: Thật lòng, FQL khó học và dùng nhất danh sách này. Nhưng FaunaDB cũng hỗ trợ GraphQL API, có thể dễ hơn.
- Serverless connections: Nhờ kết nối HTTP based, FaunaDB không vấn đề connection limit.
Upstash
- Dễ sử dụng: Redis có lẽ API dễ học nhất danh sách này. Upstash làm dễ dùng trên cloud với giao diện trực quan, đơn giản.
- Developer friendly pricing: Giá Upstash dựa trên per-request. Cũng đặt price-caps, đảm bảo không trả quá số tiền xác định trước.
- Performance: Nhờ lưu trữ dựa trên bộ nhớ, Upstash cho số liệu độ trễ tốt nhất. Xem tại đây để có ý tưởng.
- Nếu cần query phức tạp (joins v.v), cấu trúc dữ liệu Redis có thể không thực tế. Có thể cần database hỗ trợ SQL tốt hơn.
Firestore
- Dễ sử dụng: Firestore một trong tốt nhất danh sách này cho category này. UI và API khá trực quan.
- Portability: Giống DynamoDB, Firestore có vendor-lock problem. Tốt miễn là bạn trên Google Cloud.
- Performance: Tôi nghe phàn nàn về performance trước. Cá nhân trải nghiệm độ trễ tệ hơn các DB khác cùng FaunaDB. Vì vậy có dấu hỏi ở đây.
Kết luận
Tôi tin serverless là tương lai phát triển và có sự chuyển đổi liên tục về serverless. Serverless cho phép dev và công ty nhỏ tạo sản phẩm scalable với ngân sách rất hạn chế. Database nên là một phần của chuyển đổi này với các sản phẩm phù hợp nguyên tắc serverless.