Tìm hiểu về việc thanh toán trên cơ sở dữ liệu theo thời gian thực

Firebase lập hoá đơn cho dữ liệu bạn lưu trữ trong cơ sở dữ liệu và tất cả lưu lượng truy cập mạng ra ngoài ở lớp phiên (lớp 5) của mô hình OSI. Bộ nhớ được tính phí 5 USD cho mỗi GB/tháng, được đánh giá hằng ngày. Việc thanh toán không bị ảnh hưởng bởi vị trí của cơ sở dữ liệu. Lưu lượng truy cập ra bao gồm chi phí kết nối và mã hoá từ tất cả các thao tác với cơ sở dữ liệu và dữ liệu được tải xuống thông qua việc đọc cơ sở dữ liệu. Cả hai lượt đọc và ghi của cơ sở dữ liệu đều có thể gây ra chi phí kết nối trên hoá đơn của bạn. Tất cả lưu lượng truy cập đến và đi từ cơ sở dữ liệu của bạn, bao gồm cả các hoạt động bị từ chối do quy tắc bảo mật, đều dẫn đến các chi phí phải trả.

Sau đây là một số ví dụ phổ biến về lưu lượng truy cập bị tính phí:

  • Đã tải dữ liệu xuống: Khi ứng dụng nhận được dữ liệu từ cơ sở dữ liệu của bạn, Firebase sẽ tính phí cho dữ liệu đã tải xuống. Thông thường, điều này chiếm phần lớn chi phí băng thông, nhưng đó không phải là yếu tố duy nhất trong hoá đơn của bạn.
  • Chi phí giao thức: Một số lưu lượng truy cập bổ sung giữa máy chủ và ứng dụng là cần thiết để thiết lập và duy trì một phiên. Tuỳ thuộc vào giao thức cơ bản, lưu lượng truy cập này có thể bao gồm: mức hao tổn giao thức theo thời gian thực của Cơ sở dữ liệu theo thời gian thực của Firebase, mức hao tổn WebSocket và mức hao tổn tiêu đề HTTP. Mỗi lần một kết nối được thiết lập, mức hao tổn này (kết hợp với mọi mức hao tổn mã hoá SSL) sẽ góp phần vào chi phí kết nối. Mặc dù đây không phải là nhiều băng thông cho một yêu cầu, nhưng đây có thể là một phần đáng kể trong hoá đơn của bạn nếu tải trọng của bạn nhỏ hoặc bạn thực hiện các kết nối ngắn và thường xuyên.
  • Chi phí mã hoá SSL: Tốn một khoản chi phí liên quan đến mức hao tổn mã hoá SSL cần thiết cho các kết nối an toàn. Trung bình, chi phí này là khoảng 3, 5 KB cho lần bắt tay ban đầu và khoảng hàng chục byte cho tiêu đề bản ghi TLS trên mỗi thư gửi đi. Đối với hầu hết ứng dụng, đây là một tỷ lệ nhỏ trong hoá đơn của bạn. Tuy nhiên, tỷ lệ này có thể trở thành một tỷ lệ lớn nếu trường hợp cụ thể của bạn đòi hỏi nhiều quá trình bắt tay SSL. Ví dụ: các thiết bị không hỗ trợ vé phiên TLS có thể yêu cầu số lượng lớn lượt bắt tay kết nối SSL.
  • Dữ liệu trong bảng điều khiển của Firebase: Mặc dù đây thường không phải là một phần đáng kể trong chi phí của Cơ sở dữ liệu theo thời gian thực, nhưng Firebase sẽ tính phí cho dữ liệu mà bạn đọc và ghi từ bảng điều khiển của Firebase.

Ước tính mức sử dụng đã thanh toán

Để xem các kết nối Cơ sở dữ liệu theo thời gian thực hiện tại và mức sử dụng dữ liệu của bạn, hãy kiểm tra thẻ Usage (Sử dụng) trong bảng điều khiển của Firebase. Bạn có thể kiểm tra mức sử dụng trong kỳ thanh toán hiện tại, 30 ngày qua hoặc 24 giờ qua.

Firebase hiển thị số liệu thống kê về việc sử dụng cho các chỉ số sau:

  • Kết nối: Số lượng kết nối đồng thời, hiện đang mở và theo thời gian thực với cơ sở dữ liệu của bạn. Trong đó có các kết nối theo thời gian thực sau đây: WebSocket, thăm dò ý kiến trong thời gian dài và các sự kiện do máy chủ HTML gửi. Thư viện này không bao gồm các yêu cầu RESTful.
  • Bộ nhớ: Lượng dữ liệu được lưu trữ trong cơ sở dữ liệu của bạn. Dữ liệu này không bao gồm tính năng lưu trữ hoặc dữ liệu của Firebase được lưu trữ qua các sản phẩm khác của Firebase.
  • Tải xuống: Tất cả các byte được tải xuống từ cơ sở dữ liệu của bạn, bao gồm cả chi phí giao thức và mã hoá.
  • Tải: Biểu đồ này cho biết lượng cơ sở dữ liệu đang được sử dụng, đang xử lý các yêu cầu, trong một khoảng thời gian 1 phút nhất định. Bạn có thể thấy vấn đề về hiệu suất khi cơ sở dữ liệu của bạn đạt mức 100%.

Tối ưu hoá mức sử dụng

Bạn có thể áp dụng một số phương pháp hay nhất để tối ưu hoá việc sử dụng cơ sở dữ liệu và chi phí băng thông.

  • Sử dụng SDK gốc: Bất cứ khi nào có thể, hãy sử dụng các SDK tương ứng với nền tảng của ứng dụng, thay vì API REST. Các SDK duy trì các kết nối mở, giảm chi phí mã hoá SSL thường đi kèm với API REST.
  • Kiểm tra lỗi: Nếu chi phí băng thông cao bất ngờ, hãy xác minh để đảm bảo rằng ứng dụng không đồng bộ hoá nhiều dữ liệu hơn hoặc đồng bộ hoá thường xuyên hơn dự kiến ban đầu. Để xác định các vấn đề, hãy dùng công cụ trình phân tích tài nguyên để đo lường hoạt động đọc và bật tính năng ghi nhật ký gỡ lỗi trong SDK Android, Objective-CWeb. Kiểm tra các quy trình chạy ở chế độ nền và đồng bộ hoá trong ứng dụng để đảm bảo mọi thứ đang hoạt động như dự kiến.
  • Giảm kết nối: Nếu có thể, hãy cố gắng tối ưu hoá băng thông kết nối. Các yêu cầu REST nhỏ, thường xuyên có thể gây tốn kém so với việc sử dụng SDK gốc để kết nối liên tục. Nếu bạn sử dụng API REST, hãy cân nhắc sử dụng HTTP keep-alive hoặc sự kiện do máy chủ gửi để có thể giảm chi phí khi bắt tay SSL.
  • Sử dụng vé phiên TLS: Giảm chi phí hao tổn mã hoá SSL cho các kết nối được tiếp tục bằng cách phát hành vé phiên TLS. Điều này đặc biệt hữu ích nếu bạn cần các kết nối thường xuyên, an toàn đến cơ sở dữ liệu.
  • Truy vấn chỉ mục: Việc lập chỉ mục dữ liệu sẽ làm giảm tổng băng thông bạn sử dụng cho các truy vấn. Điều này mang lại lợi ích gấp đôi là giảm chi phí và tăng hiệu suất của cơ sở dữ liệu. Sử dụng công cụ trình phân tích tài nguyên để tìm các truy vấn chưa được lập chỉ mục trong cơ sở dữ liệu của bạn.
  • Tối ưu hoá trình nghe: Thêm truy vấn để giới hạn dữ liệu mà thao tác nghe trả về và sử dụng các trình nghe chỉ tải nội dung cập nhật cho dữ liệu xuống, ví dụ: on() thay vì once(). Ngoài ra, hãy đặt trình nghe càng ở gần đường dẫn càng tốt để giới hạn lượng dữ liệu mà chúng đồng bộ hoá.
  • Giảm chi phí lưu trữ: Chạy các công việc dọn dẹp định kỳ và giảm mọi dữ liệu trùng lặp trong cơ sở dữ liệu của bạn.
  • Sử dụng quy tắc: Ngăn chặn mọi thao tác trái phép và tốn kém trong cơ sở dữ liệu. Ví dụ: việc sử dụng Quy tắc bảo mật cơ sở dữ liệu theo thời gian thực của Firebase có thể tránh được trường hợp người dùng độc hại tải toàn bộ cơ sở dữ liệu của bạn xuống nhiều lần. Tìm hiểu thêm về cách sử dụng Quy tắc cơ sở dữ liệu theo thời gian thực của Firebase.

Kế hoạch tối ưu hoá tốt nhất cho ứng dụng phụ thuộc vào trường hợp sử dụng cụ thể của bạn. Mặc dù đây không phải là danh sách đầy đủ các phương pháp hay nhất, nhưng bạn có thể xem thêm lời khuyên và mẹo của các chuyên gia Firebase trên kênh Slack của chúng tôi hoặc trên Stack Overflow.