DynamoDB là một dịch vụ về cơ sở dữ liệu phi quan hệ (NoSQL) của AWS. Đây là một trong những dịch vụ mà Kevin cùng team của mình rất hay sử dụng trong thiết kế các kiến trúc serverless trên AWS Cloud. Dường như Amazon DynamoDB luôn là một dịch vụ hiện hữu trong các Architect mà mình làm. Bài này mình chia sẻ vì sao DynamoDB luôn là một phần trong kiến trúc của mình.
1. Amazon DynamoDB – NoSQL xịn mịn nhất của AWS
AWS offer hơn 15 loại Database Services, mỗi loại có các chức năng nhiệm vụ khác nhau nhưng nổi bật phổ biến hơn cả vẫn là DynamoDB và Aurora. Amazon DynamoDB có thể truy xuất cực nhanh, có thể nói là tốc độ “ánh sáng” tính bằng mili-seconds. Với ứng dụng cần truy xuất nhanh hơn có thể kết hợp với DAX để truy xuất tính bằng micro-seconds (hàng triệu read request per second). Đây là điều thực sự là mong đợi của các lập trình viên.
Amazon DynamoDB là dịch vụ gọi là Native Cloud Services. Native Cloud Service là gì?
Hình dung đơn giản là bình thường các bạn muốn dựng một CSDL bất kỳ các bạn cần phải có máy chủ, cài hệ điều hành, cài package, lib, cấu hình này nọ… rồi sau này vận hành lâu lâu phải update, patching này nọ… rồi xa hơn nữa phải lo về vấn đề dự phòng reliable, rồi cả bảo mật dữ liệu đầu cuối, dữ liệu truy xuất trên đường truyền có được encrypted hay không?
Với Amazon DynamoDB mọi lo lắng trên đều được dẹp tan. Bạn chỉ cần tạo ra và sử dụng rất linh hoạt. Còn hỗ trợ cả On-demand lẫn cả Provisioned model. Mình sẽ nói về việc này ở bài khác.
2. Giới hạn có thể gọi là vô biên
Với DynamoDB bạn có thể xử lý hàng chục Trilion requests một ngày, vào giờ cao điểm có thể xử lý 20 M request per second.
Dữ liệu lưu trữ trong DynamoDB Table được scale theo chiều ngang horizontal cho nên sẽ không bị vấn đề gì khi bạn nhét dữ liệu mình vào DynamoDB. Tất nhiên cũng có những giới hạn về item size hay collection item nhưng với sử dụng thông thường rất khó có thể chạm tới ngưỡng này (400KB item size).
Tham khảo thêm: https://aws.amazon.com/dynamodb/
3. Có Free Tier trọn đời.
Hiện tại AWS vẫn cho người dùng đăng ký sử dụng các dịch vụ của mình một cách miễn phí. Có một số dịch vụ là miễn phí 12 tháng chẳng hạn như EC2, S3. Một số dịch vụ miễn phí dạng thử nghiệm vài tháng, một số miễn phí trọn đời. DynamoDB là dịch vụ miễn phí trọn đời với các ưu đãi như sau:
- Storage: 25GB
- WCU: 25
- RCU: 25
- Data Transfer Out: 1GB
Với gói miễn phí này bạn tương đương xử lý khoảng 200M requests per month. Thực tế nếu đây là một ứng dụng cũng ko hề nhỏ nữa rồi ^^ nhưng mà có một số hơi thốn đó là Data Transfer-Out chỉ được miễn phí 1GB. Các bạn lưu ý là hầu hết các luồng dữ liệu Data Transfer IN to AWS sẽ ko tính phí, Data Transfer OUT cũng hầu hết ko tính phí nếu transfer đến AWS Service khác trong cùng Region. Trong trường hợp này thường là transfer đến một AWS Region khác, nên chú ý về mặt thiết kế để tránh mất tiền oan nhé.
Tham khảo thêm: https://aws.amazon.com/free
Sau một thời gian sử dụng AWS mình thấy rằng không phải cứ nhắm mắt đưa lên Cloud là sẽ rẻ, thậm chí đắt gấp mấy lần khi dùng ở on-premises luôn ấy chứ. Cơ bản phải đưa cho đúng use case, đúng kiến trúc và sử dụng đúng công năng thiết kế từng loại dịch vụ thì mới đúng như lý tưởng là lên cloud rẻ hơn, tối ưu chi phí và vận hành hơn.
Để tránh bị mất tiền hay bị các đơn vị tư vấn đưa mình vào thế chuột bạch, tự bản thân mình cũng nên có chút kiến thức để biết người ta đang nói đúng hay sai. DynamoDB mình xin nhắc lại là một dịch vụ rất xịn, nhưng ko phải ai cũng biết cách sử dụng nó đúng chỗ, đúng cách.
4. Dù có hết free thì vẫn rẻ
Khi xem về giá của Amazon DynamoDB chúng ta có 02 mode tính giá là theo On-demand và theo Provisioned cấp phát. Tùy vào mô hình nào mà bạn chọn on-demand hay provisioned. Giả sử Kevin hay chọn on-demand cho môi trường dev và provisioned khi có sự ước lượng trước. Chi tiết bài chọn mode nào mình xin phép chia sẻ ở một topic khác nhé.
Giả sử xem xét ở mode on-demand pricing, giá ở Singapore Region:
- Write request units: $1.4231 per million write request units
- Read request units: $0.285 per million read request units.
- Storage: first 25GB is free. $0.285 per Gb-month thereafter.
Ngoài ra bạn cũng có thể phải trải cho những factor tính giá khác của DynamoDB ví dụ như Backup & restore, global tables, change data via Kinesis hay Glue, Export to Amazon S3, DAX, Streams, Data Transfer… tham khảo full: https://aws.amazon.com/dynamodb/pricing/on-demand/
Nhìn các số trên toàn tính đến hàng triệu requests, nghe có vẻ to tác nhưng thực tế các ứng dụng enterprise mình thiết kế hàng trăm triệu requests là bình thường. Và nhìn số các bạn có để ý rằng WRITE cost rất cao không? hơn $1.4 cho mỗi triệu requests. Lưu ý nếu workload bạn tỉ số write cao quá hoặc tương đương với read thì có thể DynamoDB chưa phải là lựa chọn tối ưu nhất của bạn. DynamoDB thực sự phù hợp các workload đòi hỏi đọc nhiều lần và cần đọc nhanh.
5. Global Table
Khi các bạn triển khai các ứng dụng worldwide toàn cầu, cần user truy xuất mọi nơi. Giả sử các ứng dụng leaderboard thì Amazon DynamoDB hỗ trợ một global toàn cầu sync giữa các region mà mình lựa chọn. Các table này ở region có đặc điểm phải cùng tên.
Xem thêm một số use case của cty lớn sử dụng DynamoDB như Samsung, Pokemon Go, Capital One, Netflix…
- Pokemon Go & Amazon DynamoDB Use Case https://aws.amazon.com/solutions/case-studies/the-pokemon-company-case-study/
- AWS & Samsung Use case https://aws.amazon.com/solutions/case-studies/samsung/
- AWS & Netflix use case https://aws.amazon.com/solutions/case-studies/netflix-case-study/
- AWS & Capital One use case https://aws.amazon.com/solutions/case-studies/capital-one/
- AWS & Doulingo https://aws.amazon.com/solutions/case-studies/duolingo-case-study-dynamodb/
Đây thực sự là một dịch vụ hay ho, hy vọng bạn sẽ tìm hiểu nhiều hơn nữa để áp dụng trong ứng dụng kiến trúc của mình. Từ đó nâng cao hiệu quả trải nghiệm dịch vụ nhé.
Thân.