Blog

Tính phí cơ sở dữ liệu theo mức thực sự sử dụng

Mỗi app Mythex cần lưu dữ liệu đều có một cơ sở dữ liệu Postgres riêng, và phần sử dụng cơ sở dữ liệu của một app đã publish được trừ từ cùng số dư credit dùng để xây dựng app. Cho đến cuối tháng 9, chúng tôi ước tính mức sử dụng đó dựa trên thời gian server của app chạy. Ước tính này hóa ra sai theo cách có ý nghĩa, nên chúng tôi đã thay thế nó: giờ mỗi cơ sở dữ liệu được tính phí dựa trên compute mà nhà cung cấp thực sự đo được, từng giờ đã hoàn tất một, và mỗi giờ chỉ có thể bị tính phí một lần.

Cơ sở dữ liệu hoạt động như thế nào

Mỗi cơ sở dữ liệu chạy trên Postgres serverless tự đưa về 0: sau vài phút nhàn rỗi, nó ngủ, và thức dậy ở truy vấn tiếp theo. Khi đang thức, nó có thể tăng hoặc giảm compute theo tải. Đó là điều làm cho “một cơ sở dữ liệu cho mỗi app” trở nên khả thi về chi phí: hầu hết app đều nhàn rỗi phần lớn thời gian, và một cơ sở dữ liệu đang ngủ gần như không tốn gì.

Điều này cũng có nghĩa là chi phí của một cơ sở dữ liệu phụ thuộc vào hai thứ mà từ bên ngoài chúng tôi không thể thấy: nó đã thức bao lâu và nó lớn cỡ nào khi đang thức.

Ước tính ban đầu đã sai ở đâu

Bộ đo ban đầu của chúng tôi đưa ra một giả định: với mỗi giờ server của một app đã publish đang chạy, tính phí cơ sở dữ liệu ở kích thước compute nhỏ nhất.

Giả định đó sai theo ba cách:

  1. Kích thước sai. Thực tế cơ sở dữ liệu đang chạy ở kích thước mặc định lớn hơn mức ước tính đã giả định.
  2. Cơ sở dữ liệu tự co giãn. Dưới tải, chúng tăng lên, còn ước tính thì không bao giờ thấy điều đó.
  3. Cơ sở dữ liệu không đi theo server của app. Một cơ sở dữ liệu vẫn thức bất cứ khi nào có gì đó truy vấn nó, như app, một job đặt lịch, hay một script thăm dò liên tục, dù server của app có đang chạy hay không.

Kết quả là ước tính đã tính phí người dùng khoảng một nửa chi phí thực tế của cơ sở dữ liệu. Điều đó không bền vững đối với chúng tôi, và cũng khiến các con số sử dụng trong app không mang đúng ý nghĩa mà người ta hiểu.

Đo lường thay vì đoán

Nhà cung cấp cơ sở dữ liệu của chúng tôi báo cáo compute-unit-seconds mỗi giờ của từng dự án, tức là lượng compute thực sự đã dùng, kể cả kích thước. Vì vậy bộ đo giờ hoạt động như sau:

  1. Với mỗi app đã publish có cơ sở dữ liệu, lấy mức sử dụng đo được cho mọi giờ đã hoàn tất kể từ khi app lên live.
  2. Chuyển mức sử dụng đó thành chi phí theo giá của nhà cung cấp, áp dụng mức giá của gói, và trừ vào credit của chủ app.
  3. Mỗi lần nhìn lại tối đa một ngày, để các giờ bị bỏ lỡ khi API của chúng tôi khởi động lại vẫn được tính phí sau đó.

Lưu trữ được tính phí riêng, theo dung lượng, vì nó không phụ thuộc vào hoạt động.

Không bao giờ tính phí một giờ hai lần

Một bộ đo thanh toán chạy trên nhiều hơn một server, và có thể bị crash rồi thử lại, cần cẩn thận để không tính phí kép. Mỗi giờ của mỗi cơ sở dữ liệu được giữ chỗ trong chính hàng dữ liệu của nó trước khi bị tính phí, với ràng buộc duy nhất trên cặp (cơ sở dữ liệu, giờ). Nếu hai server, hoặc một lần thử lại, cùng cố tính phí một giờ, chỉ một lần giữ chỗ thành công.

Chúng tôi cũng đưa ra một lựa chọn có chủ ý cho trường hợp lỗi hiếm gặp: nếu tiến trình crash giữa lúc giữ chỗ một giờ và lúc tính phí, giờ đó vẫn ở trạng thái đã giữ chỗ nhưng chưa tính phí. Mất một phần nhỏ doanh thu trong một lần crash hiếm hoi tốt hơn là tính phí ai đó hai lần.

Và khi việc tính phí theo đo lường được bật, nó bắt đầu từ giờ đầy đủ tiếp theo. Các giờ trước đó đã được tính phí theo ước tính cũ; tính lại chúng từ dữ liệu đo được sẽ khiến khoảng thời gian đó bị tính hai lần.

Điều này có ý nghĩa gì nếu bạn xây dựng trên Mythex

  • Hóa đơn cơ sở dữ liệu giờ phản ánh đúng những gì cơ sở dữ liệu đã làm. Một app ít được dùng thì rất ít tốn kém; một app truy vấn cơ sở dữ liệu liên tục sẽ khiến nó thức suốt và tốn nhiều hơn.
  • Đòn bẩy lớn nhất nằm ở cách app của bạn dùng cơ sở dữ liệu. Thăm dò cơ sở dữ liệu vài giây một lần sẽ giữ nó thức suốt ngày đêm. Nhờ AI lấy dữ liệu theo yêu cầu, hoặc lưu đệm dữ liệu, sẽ để cơ sở dữ liệu được ngủ. Hướng dẫn của chúng tôi về cơ sở dữ liệu là gì giải thích những điều cơ bản.
  • Gói Pro trả nửa mức giá của gói Free cho hosting, cơ sở dữ liệu và lưu trữ. Chi tiết nằm trong tài liệu credit.

Điều chúng tôi rút ra

  • Ước tính cho các chi phí tính theo mức sử dụng thường sai lệch theo thời gian. Khi nhà cung cấp phía trên có thể cho bạn biết những gì đã được dùng, hãy tính phí dựa trên điều đó.
  • Làm cho việc tính phí có tính idempotent ở đơn vị nhỏ nhất bạn tính phí. Với chúng tôi, đó là một giờ-cơ-sở-dữ-liệu.
  • Khi buộc phải thất bại, hãy thất bại có lợi cho khách hàng.

Mythex · Pricing · Xây dựng mọi thứ với AI · Mẫu website và ứng dụng · So sánh Mythex · Thuật ngữ xây dựng ứng dụng bằng AI · Công cụ miễn phí để xây dựng ứng dụng bằng AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو 简体中文 繁體中文(香港) 繁體中文(台灣)