Azure Cosmos DB: Cơ sở dữ liệu đám mây NoSQL ở quy mô toàn cầu
Khám phá cách cơ sở dữ liệu đa mô hình, được quản lý hoàn toàn của Microsoft mang lại hiệu năng độ trễ thấp, khả năng mở rộng linh hoạt và năng lực thời gian thực cho AI, IoT, thương mại điện tử và hơn thế nữa.
Khi ứng dụng mở rộng ra toàn cầu, các cơ sở dữ liệu truyền thống thường không đáp ứng được. Azure Cosmos DB, cơ sở dữ liệu đa mô hình phân tán toàn cầu của Microsoft, mang đến khả năng truy cập độ trễ thấp, nhiều mô hình nhất quán, và mở rộng liền mạch trên các khu vực.
Hướng dẫn này đề cập các khái niệm chính như container, item và SQL API—những yếu tố thiết yếu cho bất kỳ kỹ sư đám mây nào muốn bắt đầu (và làm việc) với Azure và Cosmos DB. Bạn sẽ có cái nhìn tổng quan thực tiễn về kiến trúc của nó và lý do vì sao đây là lựa chọn hàng đầu cho các ứng dụng cloud-native có tính nhiệm vụ cao.
Azure Cosmos DB là gì?
Azure Cosmos DB là cơ sở dữ liệu NoSQL được quản lý hoàn toàn trên Microsoft Azure, được xây dựng cho tính sẵn sàng cao, độ trễ thấp và khả năng mở rộng toàn cầu. Nó hỗ trợ nhiều mô hình dữ liệu, gồm tài liệu, key-value, đồ thị và cột-họ, giúp linh hoạt cho nhiều ứng dụng đa dạng.
Thế mạnh then chốt của nó là phân phối toàn cầu: Chỉ với vài cú nhấp chuột, dữ liệu có thể được sao chép trên các khu vực Azure để truy cập nhanh, cục bộ.
Nhà phát triển cũng có thể chọn giữa nhiều mô hình nhất quán để cân bằng hiệu năng và độ chính xác dữ liệu. Nếu bạn mới làm quen với Azure, tôi khuyến khích mạnh mẽ bạn đọc hướng dẫn dành cho người mới bắt đầu về Azure sau đây.
Vì sao nên dùng Azure Cosmos DB?
Azure Cosmos DB cung cấp tập hợp tính năng mạnh mẽ, phù hợp để xây dựng ứng dụng có thể mở rộng và hiệu năng cao:
Hình ảnh của Tác giả. Vì sao nên dùng Cosmos DB
Phân phối toàn cầu với độ trễ thấp: Tự động sao chép dữ liệu trên các khu vực Azure, đảm bảo người dùng trên toàn thế giới có thể truy cập nhanh, cục bộ.
Nhiều cấp độ nhất quán: Chọn giữa năm mô hình—Strong, Bounded Staleness, Session, Consistent Prefix và Eventual—để cân bằng giữa nhất quán, tính sẵn sàng và hiệu năng.
Hỗ trợ đa mô hình: Làm việc với mô hình tài liệu (JSON), key-value, đồ thị và cột-họ, phù hợp cho nhiều loại khối lượng công việc.
Tính sẵn sàng cao với SLA: Được hỗ trợ bằng SLA cho thao tác đọc và ghi, lý tưởng cho hệ thống quan trọng.
Mở rộng linh hoạt: Tự động mở rộng thông lượng theo nhu cầu mà không ngừng dịch vụ, duy trì khả năng phản hồi dưới tải thay đổi.
Kết hợp lại, các khả năng này biến Cosmos DB thành nền tảng vững chắc cho các ứng dụng cloud-native phân tán toàn cầu đòi hỏi hiệu năng thời gian thực và khả năng chịu lỗi.
Các trường hợp sử dụng Azure Cosmos DB
Azure Cosmos DB là lựa chọn linh hoạt cho các ứng dụng thời gian thực có thể mở rộng trên nhiều ngành. Kiến trúc phân tán toàn cầu, độ trễ thấp giúp nó lý tưởng cho các tình huống đòi hỏi tính sẵn sàng cao và truy cập dữ liệu nhanh. Dưới đây là một số trường hợp tiêu biểu:
AI & học máy: Tích hợp với pipeline AI thời gian thực và hỗ trợ tìm kiếm vector, cho phép xây dựng ứng dụng thông minh như hệ thống gợi ý và tìm kiếm ngữ nghĩa.
Thương mại điện tử & bán lẻ: Vận hành trải nghiệm mua sắm cá nhân hóa bằng cách ghi nhận hành vi người dùng và phục vụ gợi ý tức thì. Phân phối toàn cầu đảm bảo truy cập dữ liệu tồn kho chính xác, độ trễ thấp trên các khu vực.
Trò chơi & mạng xã hội: Xử lý chỉ số người chơi thời gian thực, trò chuyện và bảng xếp hạng với hiệu năng đọc/ghi nhanh. Nhất quán cấp phiên đảm bảo trải nghiệm mượt mà cho người dùng toàn cầu.
IoT và dữ liệu chuỗi thời gian: Thu nạp và xử lý hiệu quả lượng lớn dữ liệu cảm biến và telemetry. Lý tưởng cho bảo trì dự đoán, phát hiện bất thường và giám sát thời gian thực.
Từ việc vận hành cửa hàng trực tuyến đến kích hoạt ứng dụng AI thông minh, Cosmos DB mang lại tốc độ, khả năng mở rộng và sự linh hoạt cần thiết cho các giải pháp cloud-native hiện đại. Để hiểu rõ hơn những gì bạn có thể làm với Cosmos DB và Azure, bạn có thể xem Hướng dẫn về các dịch vụ đám mây của Microsoft sau đây.
Tính năng và năng lực của Cosmos DB
Trong phần này, chúng ta sẽ khám phá các khả năng cốt lõi giúp nhà phát triển xây dựng ứng dụng nhanh, bền bỉ và thông minh, bao gồm chiến lược mô hình hóa dữ liệu.
Mô hình hóa dữ liệu và lập chỉ mục
Azure Cosmos DB cho phép container lưu trữ tài liệu JSON mà không cần lược đồ xác định trước, giúp dễ dàng thích ứng và phát triển mô hình dữ liệu theo thời gian.
Lập chỉ mục trong Cosmos DB mặc định là tự động, với mọi trường đều được lập chỉ mục để hỗ trợ truy vấn nhanh ngay từ đầu. Tuy nhiên, điều này có thể dẫn đến tăng mức tiêu thụ Request Unit (RU), đặc biệt với khối lượng ghi lớn. Để tối ưu, nhà phát triển có thể định nghĩa chính sách lập chỉ mục tùy chỉnh. Các chính sách này cho phép tắt lập chỉ mục tự động khi không cần, chỉ định đường dẫn bao gồm cho các trường cần lập chỉ mục và loại trừ các trường không liên quan.
Cosmos DB cũng có tính năng Change Feed, ghi nhận thao tác chèn và cập nhật theo thời gian thực, lý tưởng để xây dựng hệ thống hướng sự kiện, kích hoạt quy trình làm việc hoặc truyền dữ liệu xuống hạ lưu. Một tính năng hữu ích khác là Time-to-Live (TTL), cho phép tự động xóa tài liệu sau một khoảng thời gian xác định.
Phân vùng và tối ưu hiệu năng
Với khối lượng ghi lớn, khóa phân vùng nên có lực phân biệt (cardinality) cao và phân bố đều, chẳng hạn ID người dùng, dấu thời gian hoặc khu vực địa lý, để tránh phân vùng nóng và bị giới hạn tốc độ. Trong các kịch bản đọc nhiều, thường hiệu quả hơn khi nhóm dữ liệu liên quan bằng khóa phân vùng như ID khách hàng, giúp truy cập hiệu quả cho truy vấn theo khoảng hoặc điểm. Phân vùng kém có thể dẫn đến phân bố dữ liệu không đều và suy giảm hiệu năng. Vì mỗi phân vùng logic bị giới hạn ở 20 GB, cần thiết kế chiến lược phân vùng để tránh quá tải bất kỳ khóa nào.
Hiệu năng truy vấn có thể được cải thiện thêm bằng cách thiết kế mẫu truy cập nhắm vào một phân vùng đơn, vì các truy vấn này nhanh hơn và tiết kiệm tài nguyên hơn. Truy vấn xuyên phân vùng, dù được hỗ trợ, thường dẫn đến độ trễ cao hơn và tiêu thụ RU lớn hơn do phải quét nhiều phân vùng. Để giảm chi phí truy vấn, nhà phát triển nên tận dụng chiến lược lập chỉ mục (tôi đang nghĩ đến chỉ mục tổng hợp) và cân nhắc áp dụng cơ chế bộ nhớ đệm cho dữ liệu được truy cập thường xuyên.
Về thông lượng, Cosmos DB cho phép cấu hình Request Unit ở cấp container hoặc cơ sở dữ liệu. Mô hình thông lượng có thể điều chỉnh này giúp đảm bảo ứng dụng của bạn duy trì hiệu năng ngay cả khi bạn gặp điều kiện tải đỉnh.
Mô hình nhất quán và độ bền dữ liệu
Azure Cosmos DB cung cấp năm cấp độ nhất quán có thể điều chỉnh. Điều này vượt xa các tùy chọn chỉ có eventual hoặc strong thường thấy ở phần lớn cơ sở dữ liệu phi quan hệ.
Ở mức yếu nhất, nhất quán eventual mang lại lựa chọn nhanh nhất và sẵn sàng nhất nhưng có thể trả về dữ liệu cũ hoặc sai thứ tự khi các bản sao dần đồng bộ. Mạnh hơn một chút là consistent prefix, đảm bảo bản đọc phản ánh thứ tự ghi, dù không nhất thiết là các bản mới nhất, phù hợp khi thứ tự thao tác quan trọng hơn tính mới.
Thiết lập mặc định và thực tiễn nhất cho nhiều ứng dụng là nhất quán cấp phiên (session), đảm bảo client luôn đọc được dữ liệu mình vừa ghi trong một phiên. Bounded staleness tiến thêm một bước bằng cách cho phép độ trễ có kiểm soát giữa ghi và đọc, được xác định theo khoảng thời gian (T) hoặc số phiên bản (K). Ví dụ, trong một khu vực, độ trễ có thể giới hạn ở 5 giây hoặc 10 phiên bản, còn trong thiết lập đa khu vực có thể lên đến 5 phút hoặc 100.000 phiên bản.
Ở mức mạnh nhất là nhất quán strong, đảm bảo mọi bản đọc phản ánh bản ghi đã cam kết mới nhất trên tất cả bản sao. Mức này đưa ra đảm bảo nghiêm ngặt nhất, tránh đọc cũ, bẩn hoặc ảo, và gần giống hành vi của hệ thống tuân thủ ACID truyền thống.
Ghi đa khu vực và tính sẵn sàng toàn cầu
Một trong các tính năng nổi bật của Azure Cosmos DB là hỗ trợ ghi đa khu vực thông qua nhân bản active-active (multi-master). Điều này cho phép ứng dụng thực hiện thao tác ghi đồng thời ở nhiều khu vực, giảm đáng kể độ trễ cho người dùng trên toàn thế giới.
Cosmos DB cũng bao gồm sao chép toàn cầu tự động, đảm bảo dữ liệu được đồng bộ trên các khu vực Azure. Khi xảy ra sự cố khu vực, hệ thống sẽ kích hoạt chuyển đổi dự phòng tự động sang khu vực khả dụng tiếp theo.
Mặc dù Cosmos DB xử lý cơ chế phân mảnh và phân phối dữ liệu một cách tự động, nhà phát triển vẫn phải chọn khóa phân vùng phù hợp để hỗ trợ phân bố đều và mở rộng ngang hiệu quả. Quyết định này đặc biệt quan trọng với tập dữ liệu lớn có thể vượt quá giới hạn 20 GB cho mỗi phân vùng logic. Lên kế hoạch phân vùng sớm giúp tránh nút thắt cổ chai và vấn đề hiệu năng khi ứng dụng tăng trưởng.
Giá và quản lý chi phí Cosmos DB
Giá của Azure Cosmos DB dựa trên Request Unit (RU), phản ánh tài nguyên dùng cho đọc, ghi và truy vấn. Một phép đọc điểm đơn giản thường tốn 1 RU.
Mô hình định giá
Thông lượng cấp sẵn: Dành trước RU cho khối lượng công việc dự đoán được, tính phí theo thông lượng và lưu trữ.
Serverless: Mô hình trả theo mức sử dụng, lý tưởng cho khối lượng công việc không thường xuyên hoặc lưu lượng thấp.
Tối ưu chi phí
Dùng Cosmos DB Profiler để theo dõi và tối ưu hiệu quả truy vấn.
Điều chỉnh lập chỉ mục và phân vùng để giảm tiêu thụ RU.
Theo dõi chi phí với Azure Cost Management và thiết lập cảnh báo sử dụng.
Chọn đúng mô hình và tối ưu thiết kế có thể giúp giảm chi phí đáng kể.
Bắt đầu với Azure Cosmos DB
Trước khi làm việc với Azure Cosmos DB, bạn cần thiết lập tài khoản, chọn cấu hình và tạo cơ sở dữ liệu cùng container đầu tiên. Hướng dẫn từng bước này sẽ dẫn dắt bạn thực hiện qua Azure Portal.
Bước 1: Đăng ký tài khoản Azure và truy cập Cosmos DB qua Azure Portal
Bắt đầu bằng cách đăng nhập Azure Portal. Ở thanh tìm kiếm toàn cục phía trên, gõ “Azure Cosmos DB” và chọn trong kết quả. Từ phần Cosmos DB, nhấp “Create” để bắt đầu cấu hình phiên bản mới.
Ảnh chụp màn hình trang chính Azure
Ảnh chụp màn hình trang chính Azure Cosmos DB
Bước 2: Chọn API và cấu hình các mục cơ bản
Chọn Azure Cosmos DB for NoSQL làm mô hình API của bạn (Core SQL API).
Ảnh chụp màn hình Azure Cosmos DB. Tạo một phiên bản
Sau đó, trong khung Basics, nhập chi tiết cấu hình, bao gồm đăng ký Azure của bạn, nhóm tài nguyên (mới hoặc hiện có), tên tài khoản là duy nhất toàn cầu và khu vực Azure ưa thích. Có thể để tắt Availability Zones. Cosmos DB cung cấp hai chế độ thông lượng—thông lượng cấp sẵn cho khối lượng công việc có thể dự đoán và serverless cho kịch bản biến thiên hoặc lưu lượng thấp. Chọn chế độ phù hợp nhất với nhu cầu ứng dụng của bạn trong quá trình thiết lập. Các tùy chọn này cũng có thể điều chỉnh sau này khi khối lượng công việc thay đổi.
Ảnh chụp màn hình Azure Cosmos DB. Điền thông tin chi tiết
Khi hoàn tất, nhấp Review + Create, sau đó xác nhận bằng cách nhấp Create để bắt đầu triển khai.
Ảnh chụp màn hình Azure Cosmos DB. Xác thực phiên bản
Sau khi triển khai xong, chọn Go to resource để truy cập tài khoản Cosmos DB mới của bạn.
Ảnh chụp màn hình Azure Cosmos DB. Thông tin về tài nguyên vừa tạo
Ảnh chụp màn hình Azure Cosmos DB. Tạo container mới
Đặt tên cơ sở dữ liệu và tên container mới, và quan trọng là chỉ định khóa phân vùng để đảm bảo phân bố dữ liệu đồng đều và hiệu năng tối ưu. Nhấp OK để tạo cơ sở dữ liệu và container.
Ảnh chụp màn hình Azure Cosmos DB. Điền đặc tính cho container của chúng ta.
Sau khi tạo, bạn sẽ thấy cả hai được liệt kê trong cây phân cấp của Data Explorer.
Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra cây phân cấp dữ liệu.
Bước 4: Dùng Data Explorer để truy vấn và quản lý đối tượng cơ sở dữ liệu
Trong container vừa tạo (employees), mở rộng cây và chọn Items.
Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra container
Nhấp New Item.
Ảnh chụp màn hình Azure Cosmos DB. Tạo item mới
Chèn JSON mẫu sau, rồi nhấp Save:
{"id":"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb","name":{"first":"Josep","last":"Ferrer"},"email":"<[email protected]>","department":{"name":"Data Science"}}Được hỗ trợ bởi
Để thử một truy vấn, chọn New SQL Query trong menu và nhập truy vấn NoSQL sau, thực hiện tìm kiếm không phân biệt hoa thường cho nhân viên trong phòng Logistics.
Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra container.
SELECTVALUE {
"name": CONCAT(e.name.last," ", e.name.first),"department": e.department.name,"emailAddresses": [
e.email
]
}
FROM
employees e
WHERE
STRINGEQUALS(e.department.name,"logistics",true)Được hỗ trợ bởi
Bây giờ chúng ta nhấp để thực thi truy vấn. Nó trả về kết quả có cấu trúc:
Tính sẵn sàng cao: Nhân bản đa khu vực tích hợp đảm bảo độ tin cậy và thời gian hoạt động toàn cầu.
Linh hoạt về lược đồ: Hỗ trợ JSON không lược đồ với lập chỉ mục tự động cho truy vấn nhanh.
Tích hợp AI: Hỗ trợ nguyên bản cho tìm kiếm vector và các kịch bản AI thời gian thực.
Hỗ trợ API phong phú: Tương thích với SQL, MongoDB, Cassandra, Gremlin và Table API.
Dịch vụ quản lý toàn diện: Xử lý mở rộng, vá lỗi và hạ tầng, giảm chi phí vận hành.
Nhược điểm
Tính năng SQL hạn chế: Thiếu khả năng JOIN và GROUP BY đầy đủ như trong cơ sở dữ liệu quan hệ.
Chi phí ở quy mô lớn: Có thể trở nên tốn kém với khối lượng thông lượng cao nếu không được tối ưu.
Kết luận
Azure Cosmos DB là cơ sở dữ liệu NoSQL mạnh mẽ, phân tán toàn cầu, dành cho các ứng dụng cloud-native hiện đại. Với hỗ trợ đa mô hình, nhân bản active-active và các mức nhất quán có thể điều chỉnh, nó vượt trội trong các kịch bản đòi hỏi tính sẵn sàng cao, phản hồi thời gian thực và mở rộng linh hoạt, như hệ thống vận hành bằng AI, nền tảng thương mại điện tử và giải pháp IoT.
Cơ sở hạ tầng được quản lý toàn diện, mô hình hóa dữ liệu linh hoạt và hệ sinh thái API phong phú khiến đây là lựa chọn mạnh mẽ cho nhà phát triển và kiến trúc sư. Dù vậy, nhóm của bạn nên cân nhắc kỹ các hạn chế tiềm ẩn, như thiếu hụt tính năng SQL và chi phí ở quy mô lớn, khi lập kế hoạch vận hành sản xuất.
Nếu bạn muốn tiếp tục nâng cao kỹ năng, dưới đây là một số tài nguyên hữu ích khác:
Josep là một Nhà khoa học dữ liệu tự do chuyên về các dự án châu Âu, có chuyên môn về lưu trữ dữ liệu, xử lý, phân tích nâng cao và kể chuyện bằng dữ liệu tạo tác động.
Với vai trò giảng dạy, anh phụ trách môn Dữ liệu lớn trong chương trình Thạc sĩ tại Đại học Navarra và chia sẻ góc nhìn qua các bài viết trên các nền tảng như Medium, KDNuggets và DataCamp. Josep cũng viết về Dữ liệu và Công nghệ trong bản tin Databites (databites.tech).
Anh có bằng Cử nhân Vật lý Kỹ thuật từ Đại học Bách khoa Catalonia và bằng Thạc sĩ Hệ thống Tương tác Thông minh từ Đại học Pompeu Fabra.
Câu hỏi thường gặp
Azure Cosmos DB là gì?⌄
Azure Cosmos DB là dịch vụ cơ sở dữ liệu NoSQL được quản lý hoàn toàn, phân tán toàn cầu của Microsoft, hỗ trợ nhiều mô hình dữ liệu và được tối ưu cho ứng dụng có độ trễ thấp, tính sẵn sàng cao.
Vì sao nhà phát triển nên dùng Cosmos DB?⌄
Nhà phát triển chọn Cosmos DB vì nhân bản đa khu vực, khả năng mở rộng linh hoạt, năm mô hình nhất quán có thể điều chỉnh và hỗ trợ nhiều API cùng mô hình dữ liệu, khiến nó lý tưởng cho các ứng dụng cloud-native hiện đại.
Các trường hợp sử dụng phổ biến của Cosmos DB là gì?⌄
Cosmos DB được dùng trong AI và học máy (ví dụ: tìm kiếm vector), thương mại điện tử và bán lẻ (cá nhân hóa thời gian thực), trò chơi và mạng xã hội (tương tác độ trễ thấp), và IoT (telemetry và phân tích thời gian thực).
Cosmos DB xử lý khả năng mở rộng và hiệu năng như thế nào?⌄
Cosmos DB sử dụng container phân vùng, thông lượng có thể điều chỉnh qua Request Unit (RU) và phân phối dữ liệu thông minh để mở rộng ngang và hỗ trợ truy vấn hiệu năng cao.
Những nhược điểm chính của Cosmos DB là gì?⌄
Dù mạnh mẽ, Cosmos DB có thể tốn kém dưới tải thông lượng cao nếu không tối ưu, và thiếu hỗ trợ SQL đầy đủ cho truy vấn phức tạp như join đa bảng hoặc các thao tác GROUP BY nâng cao.
Điều gì xảy ra với dữ liệu của tôi trong Azure Cosmos DB khi có sự cố khu vực?⌄
Khi xảy ra sự cố khu vực, Mục tiêu Điểm Phục hồi (RPO) của Azure Cosmos DB—hay lượng dữ liệu có thể mất—được quyết định bởi mô hình nhất quán và cấu hình triển khai của bạn:
Nhất quán mạnh (Strong) đảm bảo không mất dữ liệu (RPO = 0).
Các mô hình nhất quán khác (như session, bounded staleness hoặc eventual) có thể cho phép độ trễ dữ liệu hoặc khoảng cách phiên bản nhỏ.
Phạm vi tùy chọn này cho phép bạn điều chỉnh hành vi của Cosmos DB theo nhu cầu ứng dụng—dù bạn ưu tiên độ chính xác, tốc độ hay sự cân bằng của cả hai.
Tôi nên mô hình hóa dữ liệu phân cấp trong Azure Cosmos DB như thế nào?⌄
Để mô hình hóa dữ liệu phân cấp như cấu trúc thư mục hoặc cây danh mục, Cosmos DB khuyến nghị làm phẳng cấu trúc tài liệu. Sử dụng các trường như parentId để biểu diễn mối quan hệ thay vì tài liệu lồng nhau hoặc join phức tạp.
Thiết kế này cải thiện hiệu quả truy vấn và khả năng mở rộng, giúp việc quản lý và truy xuất dữ liệu liên quan trong môi trường phân tán trở nên dễ dàng hơn.
Tôi nên dùng mô hình nhất quán nào trong thiết lập Cosmos DB đa khu vực?⌄
Azure Cosmos DB hỗ trợ cả năm mô hình nhất quán trong triển khai đa khu vực, cho bạn sự linh hoạt để cân bằng giữa hiệu năng và độ chính xác dữ liệu.
Nhất quán phiên (Session) thường là lý tưởng—đem lại đảm bảo đọc-điều-bạn-vừa-ghi, độ trễ thấp và chi phí tối thiểu.
Để có đảm bảo nghiêm ngặt hơn hoặc thoải mái hơn, bạn có thể chọn strong, bounded staleness, consistent prefix hoặc eventual.
Sự đa dạng này giúp bạn dễ dàng phù hợp Cosmos DB với nhu cầu độc đáo của ứng dụng phân tán toàn cầu.
Khi ứng dụng mở rộng ra toàn cầu, các cơ sở dữ liệu truyền thống thường không đáp ứng được. Azure Cosmos DB, cơ sở dữ liệu đa mô hình phân tán toàn cầu của Microsoft, mang đến khả năng truy cập độ trễ thấp, nhiều mô hình nhất quán, và mở rộng liền mạch trên các khu vực.
Hướng dẫn này đề cập các khái niệm chính như container, item và SQL API—những yếu tố thiết yếu cho bất kỳ kỹ sư đám mây nào muốn bắt đầu (và làm việc) với Azure và Cosmos DB. Bạn sẽ có cái nhìn tổng quan thực tiễn về kiến trúc của nó và lý do vì sao đây là lựa chọn hàng đầu cho các ứng dụng cloud-native có tính nhiệm vụ cao.
Azure Cosmos DB là gì?
Azure Cosmos DB là cơ sở dữ liệu NoSQL được quản lý hoàn toàn trên Microsoft Azure, được xây dựng cho tính sẵn sàng cao, độ trễ thấp và khả năng mở rộng toàn cầu. Nó hỗ trợ nhiều mô hình dữ liệu, gồm tài liệu, key-value, đồ thị và cột-họ, giúp linh hoạt cho nhiều ứng dụng đa dạng.
Thế mạnh then chốt của nó là phân phối toàn cầu: Chỉ với vài cú nhấp chuột, dữ liệu có thể được sao chép trên các khu vực Azure để truy cập nhanh, cục bộ.
Nhà phát triển cũng có thể chọn giữa nhiều mô hình nhất quán để cân bằng hiệu năng và độ chính xác dữ liệu. Nếu bạn mới làm quen với Azure, tôi khuyến khích mạnh mẽ bạn đọc hướng dẫn dành cho người mới bắt đầu về Azure sau đây.
Vì sao nên dùng Azure Cosmos DB?
Azure Cosmos DB cung cấp tập hợp tính năng mạnh mẽ, phù hợp để xây dựng ứng dụng có thể mở rộng và hiệu năng cao:
Hình ảnh của Tác giả. Vì sao nên dùng Cosmos DB
Kết hợp lại, các khả năng này biến Cosmos DB thành nền tảng vững chắc cho các ứng dụng cloud-native phân tán toàn cầu đòi hỏi hiệu năng thời gian thực và khả năng chịu lỗi.
Các trường hợp sử dụng Azure Cosmos DB
Azure Cosmos DB là lựa chọn linh hoạt cho các ứng dụng thời gian thực có thể mở rộng trên nhiều ngành. Kiến trúc phân tán toàn cầu, độ trễ thấp giúp nó lý tưởng cho các tình huống đòi hỏi tính sẵn sàng cao và truy cập dữ liệu nhanh. Dưới đây là một số trường hợp tiêu biểu:
Từ việc vận hành cửa hàng trực tuyến đến kích hoạt ứng dụng AI thông minh, Cosmos DB mang lại tốc độ, khả năng mở rộng và sự linh hoạt cần thiết cho các giải pháp cloud-native hiện đại. Để hiểu rõ hơn những gì bạn có thể làm với Cosmos DB và Azure, bạn có thể xem Hướng dẫn về các dịch vụ đám mây của Microsoft sau đây.
Tính năng và năng lực của Cosmos DB
Trong phần này, chúng ta sẽ khám phá các khả năng cốt lõi giúp nhà phát triển xây dựng ứng dụng nhanh, bền bỉ và thông minh, bao gồm chiến lược mô hình hóa dữ liệu.
Mô hình hóa dữ liệu và lập chỉ mục
Azure Cosmos DB cho phép container lưu trữ tài liệu JSON mà không cần lược đồ xác định trước, giúp dễ dàng thích ứng và phát triển mô hình dữ liệu theo thời gian.
Lập chỉ mục trong Cosmos DB mặc định là tự động, với mọi trường đều được lập chỉ mục để hỗ trợ truy vấn nhanh ngay từ đầu. Tuy nhiên, điều này có thể dẫn đến tăng mức tiêu thụ Request Unit (RU), đặc biệt với khối lượng ghi lớn. Để tối ưu, nhà phát triển có thể định nghĩa chính sách lập chỉ mục tùy chỉnh. Các chính sách này cho phép tắt lập chỉ mục tự động khi không cần, chỉ định đường dẫn bao gồm cho các trường cần lập chỉ mục và loại trừ các trường không liên quan.
Cosmos DB cũng có tính năng Change Feed, ghi nhận thao tác chèn và cập nhật theo thời gian thực, lý tưởng để xây dựng hệ thống hướng sự kiện, kích hoạt quy trình làm việc hoặc truyền dữ liệu xuống hạ lưu. Một tính năng hữu ích khác là Time-to-Live (TTL), cho phép tự động xóa tài liệu sau một khoảng thời gian xác định.
Phân vùng và tối ưu hiệu năng
Với khối lượng ghi lớn, khóa phân vùng nên có lực phân biệt (cardinality) cao và phân bố đều, chẳng hạn ID người dùng, dấu thời gian hoặc khu vực địa lý, để tránh phân vùng nóng và bị giới hạn tốc độ. Trong các kịch bản đọc nhiều, thường hiệu quả hơn khi nhóm dữ liệu liên quan bằng khóa phân vùng như ID khách hàng, giúp truy cập hiệu quả cho truy vấn theo khoảng hoặc điểm. Phân vùng kém có thể dẫn đến phân bố dữ liệu không đều và suy giảm hiệu năng. Vì mỗi phân vùng logic bị giới hạn ở 20 GB, cần thiết kế chiến lược phân vùng để tránh quá tải bất kỳ khóa nào.
Hiệu năng truy vấn có thể được cải thiện thêm bằng cách thiết kế mẫu truy cập nhắm vào một phân vùng đơn, vì các truy vấn này nhanh hơn và tiết kiệm tài nguyên hơn. Truy vấn xuyên phân vùng, dù được hỗ trợ, thường dẫn đến độ trễ cao hơn và tiêu thụ RU lớn hơn do phải quét nhiều phân vùng. Để giảm chi phí truy vấn, nhà phát triển nên tận dụng chiến lược lập chỉ mục (tôi đang nghĩ đến chỉ mục tổng hợp) và cân nhắc áp dụng cơ chế bộ nhớ đệm cho dữ liệu được truy cập thường xuyên.
Về thông lượng, Cosmos DB cho phép cấu hình Request Unit ở cấp container hoặc cơ sở dữ liệu. Mô hình thông lượng có thể điều chỉnh này giúp đảm bảo ứng dụng của bạn duy trì hiệu năng ngay cả khi bạn gặp điều kiện tải đỉnh.
Mô hình nhất quán và độ bền dữ liệu
Azure Cosmos DB cung cấp năm cấp độ nhất quán có thể điều chỉnh. Điều này vượt xa các tùy chọn chỉ có eventual hoặc strong thường thấy ở phần lớn cơ sở dữ liệu phi quan hệ.
Ở mức yếu nhất, nhất quán eventual mang lại lựa chọn nhanh nhất và sẵn sàng nhất nhưng có thể trả về dữ liệu cũ hoặc sai thứ tự khi các bản sao dần đồng bộ. Mạnh hơn một chút là consistent prefix, đảm bảo bản đọc phản ánh thứ tự ghi, dù không nhất thiết là các bản mới nhất, phù hợp khi thứ tự thao tác quan trọng hơn tính mới.
Thiết lập mặc định và thực tiễn nhất cho nhiều ứng dụng là nhất quán cấp phiên (session), đảm bảo client luôn đọc được dữ liệu mình vừa ghi trong một phiên. Bounded staleness tiến thêm một bước bằng cách cho phép độ trễ có kiểm soát giữa ghi và đọc, được xác định theo khoảng thời gian (T) hoặc số phiên bản (K). Ví dụ, trong một khu vực, độ trễ có thể giới hạn ở 5 giây hoặc 10 phiên bản, còn trong thiết lập đa khu vực có thể lên đến 5 phút hoặc 100.000 phiên bản.
Ở mức mạnh nhất là nhất quán strong, đảm bảo mọi bản đọc phản ánh bản ghi đã cam kết mới nhất trên tất cả bản sao. Mức này đưa ra đảm bảo nghiêm ngặt nhất, tránh đọc cũ, bẩn hoặc ảo, và gần giống hành vi của hệ thống tuân thủ ACID truyền thống.
Ghi đa khu vực và tính sẵn sàng toàn cầu
Một trong các tính năng nổi bật của Azure Cosmos DB là hỗ trợ ghi đa khu vực thông qua nhân bản active-active (multi-master). Điều này cho phép ứng dụng thực hiện thao tác ghi đồng thời ở nhiều khu vực, giảm đáng kể độ trễ cho người dùng trên toàn thế giới.
Cosmos DB cũng bao gồm sao chép toàn cầu tự động, đảm bảo dữ liệu được đồng bộ trên các khu vực Azure. Khi xảy ra sự cố khu vực, hệ thống sẽ kích hoạt chuyển đổi dự phòng tự động sang khu vực khả dụng tiếp theo.
Mặc dù Cosmos DB xử lý cơ chế phân mảnh và phân phối dữ liệu một cách tự động, nhà phát triển vẫn phải chọn khóa phân vùng phù hợp để hỗ trợ phân bố đều và mở rộng ngang hiệu quả. Quyết định này đặc biệt quan trọng với tập dữ liệu lớn có thể vượt quá giới hạn 20 GB cho mỗi phân vùng logic. Lên kế hoạch phân vùng sớm giúp tránh nút thắt cổ chai và vấn đề hiệu năng khi ứng dụng tăng trưởng.
Giá và quản lý chi phí Cosmos DB
Giá của Azure Cosmos DB dựa trên Request Unit (RU), phản ánh tài nguyên dùng cho đọc, ghi và truy vấn. Một phép đọc điểm đơn giản thường tốn 1 RU.
Mô hình định giá
Tối ưu chi phí
Bắt đầu với Azure Cosmos DB
Trước khi làm việc với Azure Cosmos DB, bạn cần thiết lập tài khoản, chọn cấu hình và tạo cơ sở dữ liệu cùng container đầu tiên. Hướng dẫn từng bước này sẽ dẫn dắt bạn thực hiện qua Azure Portal.
Bước 1: Đăng ký tài khoản Azure và truy cập Cosmos DB qua Azure Portal
Bắt đầu bằng cách đăng nhập Azure Portal. Ở thanh tìm kiếm toàn cục phía trên, gõ “Azure Cosmos DB” và chọn trong kết quả. Từ phần Cosmos DB, nhấp “Create” để bắt đầu cấu hình phiên bản mới.
Ảnh chụp màn hình trang chính Azure
Ảnh chụp màn hình trang chính Azure Cosmos DB
Bước 2: Chọn API và cấu hình các mục cơ bản
Chọn Azure Cosmos DB for NoSQL làm mô hình API của bạn (Core SQL API).
Ảnh chụp màn hình Azure Cosmos DB. Tạo một phiên bản
Sau đó, trong khung Basics, nhập chi tiết cấu hình, bao gồm đăng ký Azure của bạn, nhóm tài nguyên (mới hoặc hiện có), tên tài khoản là duy nhất toàn cầu và khu vực Azure ưa thích. Có thể để tắt Availability Zones. Cosmos DB cung cấp hai chế độ thông lượng—thông lượng cấp sẵn cho khối lượng công việc có thể dự đoán và serverless cho kịch bản biến thiên hoặc lưu lượng thấp. Chọn chế độ phù hợp nhất với nhu cầu ứng dụng của bạn trong quá trình thiết lập. Các tùy chọn này cũng có thể điều chỉnh sau này khi khối lượng công việc thay đổi.
Ảnh chụp màn hình Azure Cosmos DB. Điền thông tin chi tiết
Khi hoàn tất, nhấp Review + Create, sau đó xác nhận bằng cách nhấp Create để bắt đầu triển khai.
Ảnh chụp màn hình Azure Cosmos DB. Xác thực phiên bản
Sau khi triển khai xong, chọn Go to resource để truy cập tài khoản Cosmos DB mới của bạn.
Ảnh chụp màn hình Azure Cosmos DB. Thông tin về tài nguyên vừa tạo
Bước 3: Tạo cơ sở dữ liệu và container
Đi tới Data Explorer từ menu tài khoản Cosmos DB.
Ảnh chụp màn hình Azure Cosmos DB. Khám phá dữ liệu
Nhấp New Container để mở hộp thoại cấu hình.
Ảnh chụp màn hình Azure Cosmos DB. Tạo container mới
Đặt tên cơ sở dữ liệu và tên container mới, và quan trọng là chỉ định khóa phân vùng để đảm bảo phân bố dữ liệu đồng đều và hiệu năng tối ưu. Nhấp OK để tạo cơ sở dữ liệu và container.
Ảnh chụp màn hình Azure Cosmos DB. Điền đặc tính cho container của chúng ta.
Sau khi tạo, bạn sẽ thấy cả hai được liệt kê trong cây phân cấp của Data Explorer.
Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra cây phân cấp dữ liệu.
Bước 4: Dùng Data Explorer để truy vấn và quản lý đối tượng cơ sở dữ liệu
Trong container vừa tạo (employees), mở rộng cây và chọn Items.
Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra container
Nhấp New Item.
Ảnh chụp màn hình Azure Cosmos DB. Tạo item mới
Chèn JSON mẫu sau, rồi nhấp Save:
Để thử một truy vấn, chọn New SQL Query trong menu và nhập truy vấn NoSQL sau, thực hiện tìm kiếm không phân biệt hoa thường cho nhân viên trong phòng
Logistics.Ảnh chụp màn hình Azure Cosmos DB. Kiểm tra container.
Bây giờ chúng ta nhấp để thực thi truy vấn. Nó trả về kết quả có cấu trúc:
Và thế là xong!
Ưu và nhược điểm của Cosmos DB
Ưu điểm
Nhược điểm
Kết luận
Azure Cosmos DB là cơ sở dữ liệu NoSQL mạnh mẽ, phân tán toàn cầu, dành cho các ứng dụng cloud-native hiện đại. Với hỗ trợ đa mô hình, nhân bản active-active và các mức nhất quán có thể điều chỉnh, nó vượt trội trong các kịch bản đòi hỏi tính sẵn sàng cao, phản hồi thời gian thực và mở rộng linh hoạt, như hệ thống vận hành bằng AI, nền tảng thương mại điện tử và giải pháp IoT.
Cơ sở hạ tầng được quản lý toàn diện, mô hình hóa dữ liệu linh hoạt và hệ sinh thái API phong phú khiến đây là lựa chọn mạnh mẽ cho nhà phát triển và kiến trúc sư. Dù vậy, nhóm của bạn nên cân nhắc kỹ các hạn chế tiềm ẩn, như thiếu hụt tính năng SQL và chi phí ở quy mô lớn, khi lập kế hoạch vận hành sản xuất.
Nếu bạn muốn tiếp tục nâng cao kỹ năng, dưới đây là một số tài nguyên hữu ích khác: