Kiến trúc của DynamoDB được thiết kế để cung cấp tính sẵn sàng cao, khả năng chịu lỗi và khả năng mở rộng để xử lý lượng dữ liệu lớn với độ trễ thấp. DynamoDB sử dụng kiến trúc phân tán và phi tập trung, cho phép cơ sở dữ liệu mở rộng theo chiều ngang trên nhiều máy chủ.
1. Phân phối dữ liệu dựa trên phân vùng (Partition)
DynamoDB lưu trữ dữ liệu trên nhiều phân vùng khác nhau. Mỗi phân vùng có dung lượng lưu trữ tối đa (lên tới 10 GB mỗi phân vùng) và thông lượng đọc/ghi riêng. Hệ thống phân vùng cho phép cơ sở dữ liệu mở rộng hiệu quả khi kích thước dữ liệu và lượng yêu cầu tăng lên.
- Partition Key (Khóa phân vùng): Mỗi mục trong bảng DynamoDB đều được liên kết với một Partition Key (hoặc Khóa chính). DynamoDB sử dụng khóa phân vùng để xác định mục nào sẽ được lưu trữ ở phân vùng nào. Điều này giúp phân phối dữ liệu đồng đều trên các phân vùng và đảm bảo không phân vùng nào bị quá tải.
- Sort Key (Khóa sắp xếp): Nếu bảng sử dụng khóa phức hợp(Composite Key), Sort Key được sử dụng để xác định cách dữ liệu được sắp xếp trong mỗi phân vùng. Điều này giúp tăng cường khả năng truy vấn nâng cao trong một phân vùng cụ thể.
2. Khả năng mở rộng theo chiều ngang
DynamoDB được thiết kế để mở rộng theo chiều ngang bằng cách thêm nhiều phân vùng khi khối lượng dữ liệu hoặc tải yêu cầu tăng. Khi dữ liệu của bạn vượt quá khả năng của một phân vùng, DynamoDB tự động phân chia dữ liệu trên nhiều máy chủ vật lý để duy trì hiệu suất và tính sẵn sàng.
- Auto-Scaling (Tự động mở rộng): DynamoDB có thể tự động điều chỉnh khả năng đọc/ghi dựa trên các mẫu lưu lượng truy cập, đảm bảo rằng ứng dụng của bạn có thể xử lý lưu lượng đột biến mà không cần can thiệp thủ công.
- On-Demand Scaling (Mở rộng theo yêu cầu): DynamoDB cung cấp chế độ theo yêu cầu cho phép mở rộng cơ sở dữ liệu tự động mà không cần định trước cài đặt thông lượng. Nó điều chỉnh tức thời theo khối lượng công việc.
3. Mô hình nhất quán
DynamoDB hỗ trợ hai loại mô hình nhất quán:
- Eventually Consistent Reads (Đọc nhất quán cuối cùng): Theo mặc định, DynamoDB sử dụng mô hình đọc nhất quán cuối cùng. ĐIều đó có nghĩa là dữ liệu có thể không hoàn toàn nhất quán ngay lập tức trên tất cả các phân vùng sau một lần cập nhật nhưng sẽ trở nên nhất quán trong vài mili giây.
- Strongly Consistent Reads (Đọc nhất quán mạnh): Bạn có thể chọn mô hình đọc nhất quán mạnh đảm bảo rằng tất cả các hoạt động đọc đều phản ánh lần ghi gần đây nhất. Điều này được thực hiện bằng cách đọc từ phần lớn các bản sao.
4. Sao lưu dữ liệu và khả năng chịu lỗi
DynamoDB sử dụng nhân bản dữ liệu trên nhiều vùng sẵn sàng (AZs) trong một khu vực AWS để đảm bảo khả năng chịu lỗi và tính sẵn sàng cao. Điều này đảm bảo rằng ngay cả khi có sự cố phần cứng, dữ liệu của bạn vẫn có thể truy cập được từ các vùng khác.
- Replication (Sao chép): Mỗi phân vùng trong DynamoDB được sao chép ba lần trên các máy chủ khác nhau trong cùng khu vực AWS, giúp bảo vệ dữ liệu và giảm nguy cơ mất dữ liệu.
- DynamoDB Global Tables (Bảng toàn cầu): Đối với các ứng dụng phân phối toàn cầu bạn có thể sử dụng Global Tables cho phép sao chép dữ liệu trên nhiều khu vực AWS. Điều này giúp người dùng từ các khu vực khác nhau truy cập dữ liệu với độ trễ thấp và cung cấp khả năng phục hồi thảm họa trong trường hợp khu vực gặp sự cố.
5. DynamoDB Streams
DynamoDB Streams là tính năng ghi nhận các thay đổi đối với các mục trong bảng DynamoDB và cung cấp chúng để xử lý theo thời gian thực. Stream ghi lại mọi thao tác tạo, cập nhật hoặc xóa trong bảng.
- Xử lý sự kiện thời gian thực: Streams có thể được tích hợp với AWS Lambda để kích hoạt sự kiện hoặc hành động ngay khi có thay đổi dữ liệu trong cơ sở dữ liệu.
- Change Data Capture (Ghi nhận thay đổi dữ liệu): Streams cho phép các ứng dụng theo dõi các thay đổi của các mục DynamoDB theo thời gian thực, Điều này rất hữu ích cho các nhiệm vụ kiểm toán và giám sát.
6. Secondary Indexes (Chỉ mục phụ)
DynamoDB hỗ trợ hai loại chỉ mục cho phép truy vấn dữ liệu hiệu quả hơn mà không ảnh hưởng đến hiệu suất của bảng chính:
- Global Secondary Index (GSI): GSI cho phép truy vấn dữ liệu dựa trên các thuộc tính khác ngoài khóa chính. GSI có khóa phân vùng và khóa sắp xếp riêng và nó được duy trì riêng biệt với bảng chính.
- Local Secondary Index (LSI): LSI cho phép truy vấn dữ liệu với một khóa sắp xếp khác trong khi giữ nguyên khóa phân vùng của bảng chính. LSI được tạo khi tạo bảng và không thể thay đổi sau đó.
7. Quản lý giao dịch trong DynamoDB
DynamoDB hỗ trợ giao dịch ACID để đảm bảo tính nhất quán và độ tin cậy khi thực hiện nhiều thao tác ghi trên một hoặc nhiều bảng. Điều này hữu ích trong các kịch bản yêu cầu tính toàn vẹn dữ liệu nghiêm ngặt như các ứng dụng tài chính hoặc hệ thống xử lý đơn hàng.
- Atomicity (Nguyên tử): Tất cả các thao tác trong một giao dịch hoặc thành công hoàn toàn hoặc thất bại cùng nhau.
- Consistency (Nhất quán): Cơ sở dữ liệu luôn ở trạng thái nhất quán trước và sau giao dịch.
- Isolation (Cô lập): Các trạng thái trung gian của một giao dịch không hiển thị với các thao tác khác.
- Durability (Bền vững): Khi giao dịch được cam kết, nó được đảm bảo được lưu trữ.
8. Throttling và Adaptive Capacity
DynamoDB sử dụng cơ chế throttling để quản lý khối lượng công việc vượt quá thông lượng đã cấu hình. Nếu một ứng dụng vượt quá giới hạn đã đặt thì DynamoDB sẽ giới hạn các yêu cầu để đảm bảo hệ thống vẫn phản hồi được với các thao tác khác.
- Provisioned Throughput (Thông lượng cấp phát): Trong chế độ này, chúng ta sẽ định nghĩa số lượng đơn vị đọc/ghi cho bảng. Nếu yêu cầu vượt quá khả năng đã cấp phát thì DynamoDB sẽ bắt đầu giới hạn yêu cầu.
- Adaptive Capacity (Khả năng thích ứng): DynamoDB tự động điều chỉnh để xử lý các phân vùng “nóng” bằng cách phân phối lại lưu lượng truy cập giúp tránh tình trạng giới hạn trong các phân vùng truy cập nhiều.
9. Sao lưu và khôi phục
DynamoDB hỗ trợ sao lưu tự động và theo yêu cầu để bảo vệ dữ liệu khỏi mất mát không mong muốn. Bạn có thể tạo bản sao lưu đầy đủ của bảng và khôi phục chúng tại một thời điểm bất kỳ.
Point-in-Time Recovery (PITR): Tính năng này cho phép bạn khôi phục bảng DynamoDB về bất kỳ thời điểm nào trong vòng 35 ngày gần nhất, điều đó giúp bảo vệ khỏi các thao tác ghi hoặc xóa nhầm.
10. Tích hợp với hệ sinh thái AWS
DynamoDB được tích hợp chặt chẽ với các dịch vụ khác của AWS cho phép tương tác liền mạch với các dịch vụ như:
- AWS Lambda: Để xây dựng kiến trúc serverless dựa trên sự kiện, DynamoDB kết hợp với Lambda để kích hoạt hành động khi có thay đổi dữ liệu.
- Amazon S3: Để lưu trữ các tệp lớn và các đối tượng mà DynamoDB có thể tham chiếu.
- AWS Identity and Access Management (IAM): Để kiểm soát truy cập chi tiết đảm bảo việc tương tác an toàn với các bảng DynamoDB.
- Amazon CloudWatch: Để giám sát và đặt cảnh báo dựa trên việc sử dụng đọc, ghi, độ trễ và các chỉ số vận hành khác.