Ở bài này mình cùng tìm hiểu về Amazon DynamoDB Throughput Capacity Provisioned Mode. Đây cũng là mode mặc định khi ta tạo một table mới trong Amazon DynamoDB. Ta cũng sẽ cùng xem các ví dụ khi thiết kế DynamoDB dùng Provisioned Mode sẽ tiêu tốn RCU và WCU như thế nào?
RCU là gì? WCU là gì?
Amazon DynamoDB không có giới hạn kích thước table size, dữ liệu lưu trữ được giãn nở theo chiều ngang horizontal nên dynamodb rất lý tưởng để lưu trữ các tập dữ liệu khổng lồ. Hơn nữa storage của dynamodb cũng linh hoạt chứ ko cần cứng nhắc phải cấp phát bao nhiêu dung lượng 10GB hay 1TB ban đầu. Storage sẽ tự động giãn nở khi dữ liệu bạn nhiều hơn. Điều này giúp giảm lo lắng về việc phải vận hành bảo trì một CSDL.
Nhưng đó là chỉ về mặt lưu trữ, khi sử dụng dynamodb bạn cần xem bạn cần bao nhiêu năng lực đọc (read) và ghi (write) mà DynamoDB gọi là RCU (Read Capacity Unit) và WCU (Write Capacity Unit).
Mặc định khi khởi tạo một table trong amazon dynamodb capacity mode sẽ là Provisioned với 05 WCU và 05 RCU.
- 1 RCU = 1 strong read consistency request = 2 eventual consistency requests
- 1 WCU = 2 write request
Mỗi một Read request tối đa được 4KB, write request được 1KB.
Một số ví dụ vè RCU, WCU để hiểu rõ hơn dynamodb:
- Write 1KB => 1 WCU
- Write 3KB => 3 WCU
- Write 1.5KB => 2 WCU (round up)
- Read 4KB => 1 RCU strong consistency, 0.5 eventual consistency
- Read 2KB => 1 RCU strong consistency, 0.5 eventual consistency
- Read 8KB => 2 RCU strong consistency, 1 eventual consistency
- Read 7KB => 2 RCU strong consistency, 1 eventual consistency
- Read 15KB => 4 RCU strong consistency, 2 eventual consistency
Như thế chi phí của strong consistency gấp đôi (2x) chi phí đọc của eventual consistency.
Sự khác biệt giữa Strong Consistency và Eventual Consistency
Eventual Consistency là cơ chế đọc mà không đảm bảo bạn đọc dữ liệu cuối cùng (stale data) nhưng lại cho tốc độ nhanh và chi phí rẻ hơn một nửa so với strong consistency.
Strong consistency là cơ chế đọc đảm bảo dữ liệu bạn đọc được là mới nhất most-up-to-date. Chi phí của strong consistency đắt gấp đôi eventual consistency. Strong consistency có thể bị lỗi nếu network có vấn đề.
Mặc định dynamodb sử dụng Eventual Consistency. Một số trường hợp bạn cần dữ liệu cuối cùng up-to-date kiểu các báo cáo tài chính, hệ thống book vé thì có thể bạn phải sử dụng strong consistency.
Transactional Request trong DynamoDB cũng tiêu tốn RCU và WCU. Nhìn chung các transactional request chi phí sẽ gấp đôi bình thường.
- 1 Transactional Read = 2 RCU (for items tối đa 4KB)
- 1 Transactional Write = 2 WCU (for items tối đa 1KB)
Lưu ý trong trường hợp khi yêu cầu đọc hay ghi mà vượt quá giới hạn cấp phát của dynamodb table thì sẽ dẫn đến hiện tượng bị throttled.
Để có cái nhìn rõ hơn về tính toán throughput capacity ta cùng xem xét hai ví dụ sau:
Ví dụ 1: Giả sử ta cấp phát 10 RCU và 10 WCU. Hãy xem khả năng tối đa của của dynamodb table này nhé:
- Khả năng đọc (read throughput)
- Strong consistency read: 10 * 4KB * 1 = 40KB/s
- Eventual consistency read: 10 * 4KB * 2 = 80KB/s
- Transactional Read consistency: 10 * 4KB / 2 = 20KB/s
- Khả năng ghi (write throughput)
- Eventual & Strong consistency: 10*1KB*1 = 10KB/s
- Transactional Write consistency: 10*1KB/2 = 5KB/s
Ví dụ 2: Hãy tính toán RCU và WCU cần thiết khi đọc và viết 15KB item
- Read capacity
- Strong consistency read: roundup(15/4)*1 = 4 RCUs
- Eventual consistency read: roundup(15/4)/2 = 2 RCUs
- Transactional read consistency: roundup(15/4)*2 = 8 RCUs
- Write capacity
- Strong & Eventual write: 15*1KB = 15 WCUs
- Transactional write consistency: 15*2 = 30 WCUs
Bài này chúng ta đã tìm hiểu về Amazon DynamoDB throughput capacity Provisioned mode. Mode này cho phép chúng ta định nghĩa trước năng lực đọc và ghi của một dynamodb table. Ta cũng đã cùng xem một số ví dụ tính toán năng lực của dynamodb table trong 02 trường hợp. Chúc các bạn có thiết kế đúng đắn để csdl bạn không bị throttled.