0
0
Lập trình
Admin Team
Admin Teamtechmely

Thiết lập ứng dụng đồng bộ thời gian thực với Ditto và MongoDB

Đăng vào 6 tháng trước

• 9 phút đọc

Hướng Dẫn Thiết Lập Ứng Dụng Đồng Bộ Thời Gian Thực Với Ditto và MongoDB

Giới thiệu

Trong thời đại công nghệ hiện nay, khả năng kết nối di động ngày càng được cải thiện, tuy nhiên, chức năng làm việc offline vẫn rất quan trọng trong các môi trường có mạng không ổn định. Việc đảm bảo tính toàn vẹn dữ liệu và đồng bộ thời gian thực giữa các thiết bị là một thách thức lớn. Hướng dẫn này sẽ giúp bạn thiết lập một hệ thống demo sử dụng nền tảng đồng bộ Ditto, bao gồm ứng dụng Ditto Quickstart (dành cho web và di động), Ditto Big Peer, Ditto MongoDB Connector và cụm MongoDB Atlas. Dữ liệu sẽ được đồng bộ giữa các ứng dụng client và MongoDB thông qua Big Peer, cho phép hợp tác thời gian thực một cách liền mạch—kể cả khi offline.

Các yêu cầu cần chuẩn bị

Trước khi bắt đầu, bạn cần đảm bảo rằng bạn đã có:

  • Phiên bản MongoDB 7.0.13 hoặc 8.0.0 trở lên.
  • Tài khoản MongoDB Atlas với vai trò “atlasAdmin”.
  • Kích thước cụm MongoDB: M0 (mức miễn phí) hoặc lớn hơn.
  • Tài khoản Ditto.
  • MongoDB Shell.
  • Phiên bản Node.js 18 hoặc mới hơn.

Tổng quan kiến trúc

  • Ứng dụng Quickstart (khách hàng Ditto SDK): Các ứng dụng Todo tự chứa chạy trên các thiết bị edge (web, di động, desktop). Chúng tạo ra một mạng lưới P2P cho việc đồng bộ địa phương và Big Peer. Mỗi instance sử dụng một mô hình dữ liệu và logic đồng bộ chung.
  • Mạng lưới P2P: Cho phép đồng bộ dữ liệu giữa các thiết bị mà không cần kết nối internet, đảm bảo tính bền vững offline và hiệu suất địa phương nhanh chóng.
  • Ditto Big Peer: Một instance Ditto có độ khả dụng cao đồng bộ dữ liệu giữa MongoDB Atlas và các thiết bị edge, hoạt động như một trung tâm cho các hệ thống phân tán.
  • Ditto MongoDB Connector: Lắng nghe các thay đổi trong cả MongoDB và Ditto, và đồng bộ dữ liệu theo cả hai chiều sử dụng CRDTs để giải quyết xung đột. Hoạt động cùng Big Peer.
  • MongoDB Atlas: Một cơ sở dữ liệu đám mây được quản lý hoàn toàn, đóng vai trò là kho dữ liệu bền vững, xử lý lưu trữ, truy vấn và biến đổi dữ liệu ứng dụng.

Thiết lập ban đầu

Cụm MongoDB Atlas

Trong phần này, bạn sẽ thiết lập một cụm MongoDB Atlas để lưu trữ và quản lý dữ liệu cốt lõi của ứng dụng của bạn.

1: Thiết lập cụm Atlas của bạn

a. Đăng nhập vào tài khoản Atlas của bạn.

b. Nếu bạn chưa có cụm Atlas, hãy tạo một cụm M0 miễn phí. Để tìm hiểu thêm về cách tạo cụm Atlas, hãy xem Tạo Cụm trong tài liệu chính thức.

QUAN TRỌNG: Bạn chỉ có thể tạo một cụm M0 miễn phí cho mỗi dự án.

c. Chọn cụm của bạn và nhấp vào Kết nối.

d. Sao chép chuỗi kết nối và nhấp vào Xong. Nó chứa tên người dùng, mật khẩu và tên cơ sở dữ liệu theo định dạng sau: mongodb+srv://<username>:<password>@<deployment>.mongodb.net/?retryWrites=true&w=majority&appName=<appName>.

Trong demo này, chúng tôi đã tạo cụm MongoDB Atlas có tên SolutionsAssurance trên phiên bản MongoDB 8.0.3, được lưu trữ tại vùng AWS eu-south-2 (Tây Ban Nha), và trên tầng M10.

QUAN TRỌNG: Phiên bản tối thiểu được hỗ trợ cho kết nối hiện tại là MongoDB 7.0.13 và MongoDB 8.0.0.

2: Thêm cơ sở dữ liệu và collections

Tạo các cơ sở dữ liệu và collections mà bạn muốn đồng bộ. Cần thiết phải đặt cho các collections changeStreamPreAndPostImages:true. Cài đặt này cho phép kết nối đảm bảo tính nhất quán nguyên nhân giữa cả hai hệ thống.

javascript Copy
use <tênCơSởDữLiệuCủaBạn>

// kiểm tra các collection
db.getCollectionInfos()

// thiết lập changeStream là true cho collection
db.runCommand({ collMod: <tênCollectionCủaBạn>, changeStreamPreAndPostImages: { enabled: true }})

3: Dữ liệu mẫu

javascript Copy
{
  _id: ObjectId('A39E8043-7873-4A29-85E3-BF79BD7260A2'),
  deleted: false,
  done: false,
  title: "Danh sách 1"
}

4: Thêm người dùng cơ sở dữ liệu

Tạo một người dùng cơ sở dữ liệu mới hoặc sử dụng một người dùng đã có. Kết nối xác thực với MongoDB bằng tên người dùng và mật khẩu của người dùng cơ sở dữ liệu. Người dùng phải có quyền readWrite trên DB mục tiêu.

Nếu bạn đang kết nối đến một cơ sở dữ liệu phân vùng, người dùng cơ sở dữ liệu cũng cần có quyền read rõ ràng cho collection tích hợp collection trong cơ sở dữ liệu config.

5: Whitelist IPs

Big Peer sử dụng các IP để tương tác với các dịch vụ bên ngoài như MongoDB. Ba IP này là cố định. Bạn phải thêm chúng vào danh sách cho phép của MongoDB Atlas. Chọn Truy cập Mạng và nhấp vào Thêm Địa Chỉ IP để thêm các IP.

Copy
3.147.233.88
52.15.232.117
3.130.255.9

QUAN TRỌNG: Nếu bạn đang chạy BYOC/Big Peer tự host trong tài khoản đám mây của mình, các IP ra ngoài sẽ là của riêng bạn (không phải ba IP trên). Trong trường hợp đó, hãy cho phép các IP ra công cộng của triển khai của bạn hoặc sử dụng Private Endpoints.

Thiết lập instance Ditto Big Peer

Trong phần này, bạn sẽ thiết lập Ditto Big Peer, một engine đồng bộ hóa.

1: Đăng nhập bằng tài khoản Ditto của bạn tại Cổng thông tin Ditto.

2: Thiết lập tổ chức và ứng dụng.

a. Nhấp vào Tổ chức mới dưới tab Tổ chức.

b. Nhấp vào Ứng dụng mới bên trong tổ chức của bạn và gán nó vào chế độ xác thực Playground.

c. Tại tab Kết nối cho Big Peer, bạn sẽ thấy App ID, Mã thông báo Xác thực Trực tuyến Playground và các tham số khác mà bạn sẽ sử dụng để kết nối với ứng dụng client.

3: Xem lại cổng thông tin Ditto.

Tại tab Collections, chúng ta có thể thấy tất cả các collections được đồng bộ hóa với Ditto Big Peer.

Chúng ta có thể điều hướng vào bên trong collection và xem thông tin về từng mục.

Thiết lập Ditto MongoDB native connector

Trong phần này, bạn sẽ thiết lập Ditto MongoDB Connector, sẽ chạy như một dịch vụ trong Big Peer.

1: Chọn MongoDB Connector từ tab Cài đặt.

2: Nhấp vào nút Cấu hình và điền thông tin Kết nối.

3: Điền vào trường cơ sở dữ liệu với cơ sở dữ liệu MongoDB mà bạn muốn đồng bộ với Ditto.

4: Điền vào trường chuỗi kết nối, với chuỗi kết nối của cơ sở dữ liệu MongoDB mà bạn muốn đồng bộ với Ditto (ví dụ: mongodb+srv://<db_username>:<db_password>@solutionsassurance.n0kts.mongodb.net/?retryWrites=true&w=majority&appName=SolutionsAssurance).

5: Nhấp vào Thêm collection để chọn các collections cho đồng bộ hóa.

6: Nhập tên collection.

7: Kích hoạt Đồng bộ hóa Ban đầu để nhập dữ liệu hiện có từ collection MongoDB của bạn vào Big Peer.

a. Khi kích hoạt, quá trình nền một lần này đồng bộ hóa các tài liệu hiện tại.

b. Nếu không kích hoạt, chỉ các thay đổi trong tương lai (thông qua MongoDB Change Streams) sẽ được đồng bộ.

8: Chọn loại ánh xạ. Nếu bạn chọn tùy chọn Khớp ID, thì các trường ID được sử dụng giữa Ditto và MongoDB sẽ giống hệt nhau.

9: Nếu bạn chọn tùy chọn Ánh xạ các trường tới Ditto ID, thì bạn sẽ cần thêm tất cả các trường mà bạn muốn ánh xạ tới Ditto ID.

10: Khi bạn đã thêm tất cả dữ liệu, nhấp vào nút Thêm collection để thêm collection vào cấu hình kết nối.

11: Nhấp vào nút Lưu để tạo kết nối.

12: Bạn sẽ thấy trạng thái của kết nối. Đầu tiên, nó sẽ hiển thị Đang chờ, sau đó khi đã sẵn sàng, nó sẽ hiển thị là Đang chạy. Trong trường hợp có lỗi, kết nối sẽ hiển thị trạng thái Thất bại và thông báo lỗi với chi tiết vấn đề.

13: Thêm vào đó, nếu bạn đã kích hoạt đồng bộ hóa ban đầu, bạn sẽ thấy tiến trình trong phần Trạng thái Đồng bộ Hóa Ban đầu.

14: Bạn có thể thay đổi cấu hình của kết nối nếu bạn muốn thêm/sửa/xóa collection cho đồng bộ hóa, thay đổi ánh xạ hoặc thay đổi thông tin xác thực được sử dụng bởi kết nối để kết nối tới cụm MongoDB Atlas.

15: Để cấu hình lại kết nối, bạn có thể sử dụng nút Chỉnh sửa.

Ứng dụng web

Trong phần này, bạn sẽ cấu hình và chạy ứng dụng web của Ditto. Ứng dụng này sử dụng Vite cùng với TypeScript và React.

1: Sao chép kho lưu trữ.

2: Từ thư mục gốc của kho lưu trữ, sao chép tệp .env.sample thành .env, và điền vào các trường.

javascript Copy
DITTO_APP_ID=""
DITTO_PLAYGROUND_TOKEN=""
DITTO_AUTH_URL=""
DITTO_WEBSOCKET_URL=""

3: Điều hướng đến thư mục dự án và cài đặt các phụ thuộc.

bash Copy
cd javascript-web
npm install

4: Chạy ứng dụng.

bash Copy
npm run dev

5: Truy cập http://localhost:5173/ để xem ứng dụng chạy trong trình duyệt.

Ứng dụng di động

Trong phần này, bạn sẽ cấu hình ứng dụng Ditto Swift và chạy nó trên một thiết bị iOS hoặc một mô phỏng.

1: Tạo một bản sao của tệp .env từ thư mục gốc và đặt nó vào bên trong thư mục swift.

javascript Copy
DITTO_APP_ID=""
DITTO_PLAYGROUND_TOKEN=""
DITTO_AUTH_URL=""
DITTO_WEBSOCKET_URL=""

2: Mở Xcode và mở dự án quickstart/swift/tasks/tasks.xcodeproj.

3: Nếu bạn muốn chạy ứng dụng trên thiết bị iOS của mình, hãy điều hướng đến tab Chữ ký và Năng lực của dự án và sửa đổi cài đặt ĐộiNhận dạng Gói theo thông tin xác thực tài khoản nhà phát triển Apple của bạn để cấp phép xây dựng cho thiết bị của bạn.

4: Trong Xcode, chọn một thiết bị iOS kết nối hoặc mô phỏng iOS làm đích đến ở menu trên cùng.

5: Ở thanh menu trên cùng, chọn mục Sản phẩm > Xây dựng. Điều này sẽ tạo ra một tệp nguồn Env.swift chứa các giá trị từ tệp .env của bạn, và sau đó xây dựng ứng dụng.

6: Ở thanh menu trên cùng, chọn mục Sản phẩm > Chạy để bắt đầu ứng dụng.

7: Ứng dụng sẽ được xây dựng và chạy trên thiết bị hoặc mô phỏng đã chọn.

Các trường hợp sử dụng

Khi hệ thống được cấu hình, bạn có thể xác minh rằng việc đồng bộ hóa hoạt động chính xác giữa các collection MongoDB và các ứng dụng Ditto của bạn. Tạo một tác vụ mới trong ứng dụng Quickstart—nó sẽ tự động xuất hiện trong cả cổng thông tin Ditto và collection MongoDB tương ứng. Tương tự, bất kỳ thay đổi nào được thực hiện trực tiếp trong MongoDB sẽ được phản ánh trong cổng thông tin Ditto và trên tất cả các ứng dụng Quickstart đã kết nối.

Thực hành tốt nhất

  • Kiểm tra dữ liệu: Luôn kiểm tra dữ liệu đồng bộ giữa MongoDB và Ditto sau khi thiết lập ban đầu để đảm bảo mọi thứ hoạt động như mong đợi.
  • Bảo mật thông tin xác thực: Đảm bảo thông tin xác thực được sử dụng trong kết nối được bảo mật và không bị lộ ra bên ngoài.

Những cạm bẫy thường gặp

  • Không kích hoạt đồng bộ hóa ban đầu: Nếu bạn quên kích hoạt đồng bộ hóa ban đầu, dữ liệu hiện có trong MongoDB sẽ không được đưa vào Ditto.
  • Thiếu quyền truy cập: Đảm bảo người dùng cơ sở dữ liệu có đủ quyền truy cập để thực hiện các thao tác cần thiết.

Mẹo hiệu suất

  • Tối ưu hóa cấu hình MongoDB: Sử dụng các chỉ mục phù hợp để cải thiện hiệu suất truy vấn trên các collection lớn.
  • Giám sát hiệu suất: Sử dụng công cụ giám sát để theo dõi hiệu suất của Big Peer và MongoDB, đảm bảo chúng hoạt động ổn định.

Khắc phục sự cố

  • Không thể kết nối với MongoDB: Kiểm tra chuỗi kết nối và đảm bảo rằng các IP đã được whitelist.
  • Dữ liệu không đồng bộ: Kiểm tra lại cấu hình của Ditto Connector và đảm bảo rằng các thay đổi trong MongoDB được theo dõi đúng.

Kết luận

Việc tích hợp dữ liệu giữa các thiết bị edge và đám mây không cần phải phức tạp. Với kết nối hai chiều của Ditto cho MongoDB, bạn có thể kích hoạt đồng bộ hóa thời gian thực, không có xung đột giữa các hệ thống của bạn—kể cả trong các môi trường kết nối kém.

Để tìm hiểu thêm và bắt đầu, hãy khám phá các tài nguyên dưới đây:

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào