Lưu trữ SQLite độ trễ bằng 0 trong mọi Durable Object
(simonwillison.net)-
Lưu trữ SQLite độ trễ bằng 0 trong mọi Durable Object
- Kenton Varda giới thiệu phiên bản tiếp theo của nền tảng Durable Object của Cloudflare. Nền tảng này gần đây đã được nâng cấp từ kho key/value lên một hệ thống quan hệ hoàn chỉnh dựa trên SQLite
- Có thể tham khảo bài viết Cloudflare's durable multiplayer moat của Paul Butler để biết thêm bối cảnh hữu ích về phiên bản đầu tiên của Durable Objects. Đây là nền tảng phổ biến để xây dựng các ứng dụng cộng tác thời gian thực dựa trên WebSocket
- Durable Objects dựa trên SQLite mới mang đến một khía cạnh hấp dẫn trong thiết kế hệ thống phân tán, đồng thời gợi mở những cách thú vị để thiết kế các ứng dụng quy mô lớn
-
Ý tưởng cốt lõi của Durable Objects
- Durable Object đặt logic ứng dụng cùng với dữ liệu trên cùng một máy chủ vật lý, nhờ đó cung cấp hiệu năng đọc và ghi rất nhanh
- Một đối tượng đơn lẻ chạy trên một luồng duy nhất của một máy, nên thông lượng bị giới hạn. Để xử lý thêm lưu lượng, cần tạo thêm nhiều đối tượng hơn. Cách này dễ áp dụng nhất khi mỗi đơn vị trạng thái có lưu lượng đủ thấp để một đối tượng đơn lẻ có thể xử lý
-
Ví dụ về hệ thống đặt vé máy bay
- Mỗi chuyến bay có thể được ánh xạ tới một Durable Object chuyên biệt với cơ sở dữ liệu SQLite riêng. Mỗi ngày sẽ có hàng nghìn cơ sở dữ liệu mới được tạo ra cho mỗi hãng hàng không
- Mỗi DO có một tên duy nhất, và mạng của Cloudflare sẽ định tuyến yêu cầu đến đối tượng đó dù nó đang ở bất kỳ đâu trên thế giới
-
Chi tiết kỹ thuật
- Lấy cảm hứng từ Litestream, mỗi DO liên tục stream chuỗi mục WAL sang object storage. Việc này được gom lô sau mỗi 16MB hoặc mỗi 10 giây
- Để đảm bảo độ bền dữ liệu trong cửa sổ 10 giây, các thao tác ghi được chuyển tới năm bản sao ở các trung tâm dữ liệu lân cận ngay khi commit, và thao tác ghi sẽ được xác nhận khi có ba bản sao phản hồi
-
Thiết kế JavaScript API
- API được thiết kế theo kiểu blocking thay vì bất đồng bộ, nhằm cung cấp các thao tác lưu trữ đơn luồng cực nhanh
- Có kèm ví dụ cố ý thể hiện mẫu truy vấn N+1 mà SQLite có thể xử lý tốt
-
Storage Relay Service
- Đây là hệ thống nền tảng của Durable Objects, và đã hỗ trợ hệ thống SQLite D1 hiện có của Cloudflare trong hơn một năm
-
Durable Objects được tạo ở đâu
- Durable Objects không thay đổi vị trí sau khi được tạo. Theo mặc định, chúng được khởi tạo tại trung tâm dữ liệu nơi diễn ra yêu cầu
get()đầu tiên - Để tạo Durable Objects thủ công ở vị trí khác, có thể truyền tham số tùy chọn
locationHintvàoget()
- Durable Objects không thay đổi vị trí sau khi được tạo. Theo mặc định, chúng được khởi tạo tại trung tâm dữ liệu nơi diễn ra yêu cầu
-
Trang web where.durableobjects.live
- Đây là trang theo dõi vị trí DO được tạo ra trong mạng Cloudflare
Tổng hợp của GN⁺
- Durable Objects của Cloudflare dựa trên SQLite, mở ra những khả năng mới cho việc thiết kế ứng dụng quy mô lớn. Hệ thống này mang lại hiệu năng nhanh bằng cách đặt dữ liệu và logic ứng dụng trên cùng một máy chủ vật lý
- Hệ thống này đặc biệt hữu ích cho các ứng dụng cộng tác thời gian thực, đồng thời cung cấp sự linh hoạt để xử lý nhiều đơn vị trạng thái khác nhau
- Durable Objects tạo các bản sao ở nhiều trung tâm dữ liệu để đảm bảo độ bền dữ liệu, qua đó tăng tính ổn định và độ tin cậy
- Công nghệ này có thể hấp dẫn với các nhà phát triển quan tâm đến thiết kế hệ thống phân tán quy mô lớn. Những hệ thống cung cấp chức năng tương tự gồm có Amazon DynamoDB và Google Firestore
1 bình luận
Ý kiến Hacker News
API ghi là đồng bộ nhưng có cơ chế chờ bất đồng bộ ẩn. Nếu ghi thất bại, runtime sẽ thay thế phản hồi bằng lỗi HTTP để có thể tự động gom lô các lượt ghi và giả định là thành công
Mỗi DO stream chuỗi mục WAL vào object storage, và dữ liệu này được gom lô mỗi 16MB hoặc mỗi 10 giây
Thích thiết kế Durable Object. Dễ hiểu cách nó hoạt động bên trong
Khó hiểu vị trí vật lý của Durable Objects nằm ở đâu
Khó hiểu các công nghệ đám mây mới
Thắc mắc cách xử lý schema migration
Thiết kế DO thú vị, nhưng có vẻ chỉ phù hợp với hệ thống tải rất cao hoặc các dự án đồ chơi
Ấn tượng với thiết kế DO. Cách nó xử lý công việc phức tạp ở quy mô nhỏ khá giống với cấu trúc sản phẩm thực tế
Chú ý việc CF khuyến khích các nhà phát triển dùng DO
Thắc mắc liệu DO có tương ứng với "model" trong kiến trúc MVC hay không