Mục lục

Phương pháp sử dụng Solr cho đọc và cơ sở dữ liệu cho ghi là một mẫu phổ biến trong các ứng dụng có lưu lượng truy cập cao. Điều này thường được gọi là Tách biệt Trách nhiệm Lệnh và Truy vấn (Command Query Responsibility Segregation - CQRS) https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs.

Solr cho Đọc, Cơ sở Dữ liệu cho Ghi

  • Ghi (Command): Tất cả các sửa đổi dữ liệu (tạo, cập nhật, xóa) được ghi vào cơ sở dữ liệu chính. Ví dụ: PostgreSQL, MySQL, hoặc MongoDB
  • Đọc (Query): Các thao tác đọc được phục vụ bởi Solr https://solr.apache.org/, một nền tảng tìm kiếm nhanh, mã nguồn mở.

Cách nó hoạt động

Data Flow

  • Khi dữ liệu được ghi vào cơ sở dữ liệu, nó cũng được lập chỉ mục trong Solr.
  • Điều này có thể được thực hiện theo thời gian thực hoặc như một quá trình hàng loạt.

Truy vấn

  • Hầu hết các thao tác đọc sẽ chuyển đến Solr thay vì cơ sở dữ liệu.
  • Những tìm kiếm và bộ lọc phức tạp được xử lý bởi Solr.

Kịch bản ví dụ

Một trang web thương mại điện tử trong đợt giảm giá Black Friday:
Ghi:

  • Đơn hàng mới được ghi vào cơ sở dữ liệu PostgreSQL.
  • Cập nhật kho sản phẩm được thực hiện trong cơ sở dữ liệu.

Đọc:

  • Việc tìm kiếm sản phẩm được xử lý bởi Solr.
  • Điều hướng phân đoạn (lọc theo danh mục, giá, v.v.) sử dụng Solr.
  • Chi tiết sản phẩm được phục vụ từ Solr.

Lợi ích

  • Hiệu suất: Việc tìm kiếm "giày đỏ dưới $50" trong hàng triệu sản phẩm có thể nhanh hơn nhiều trong Solr so với cơ sở dữ liệu truyền thống.
  • Khả năng mở rộng: Bạn có thể dễ dàng thêm nhiều nút Solr để xử lý tăng lưu lượng đọc mà không ảnh hưởng đến cơ sở dữ liệu ghi.
  • Truy vấn phức tạp: Solr vượt trội trong tìm kiếm toàn văn, phân đoạn và truy vấn địa lý, điều mà cơ sở dữ liệu truyền thống gặp khó khăn.
  • Giảm tải cơ sở dữ liệu: Trong những thời điểm cao điểm, cơ sở dữ liệu của bạn có thể tập trung vào việc xử lý các thao tác ghi quan trọng - như xử lý đơn hàng - trong khi Solr xử lý phần lớn các truy vấn đọc.
  • Tính linh hoạt: Bạn có thể tối ưu hóa sơ đồ Solr cho đọc nhanh mà không phải lo lắng về hiệu suất ghi.

Thách thức

  • Đồng bộ hóa Dữ liệu
    • Bạn cần đảm bảo rằng dữ liệu trong Solr luôn đồng bộ với cơ sở dữ liệu. Điều này có thể gây ra một sự chậm trễ nhẹ
    • Giải pháp: Sử dụng hệ thống Ghi nhận Dữ liệu Thay đổi (Change Data Capture - CDC) https://www.confluent.io/learn/change-data-capture/
  • Tính nhất quán cuối cùng
    • Một đơn hàng mới có thể không xuất hiện ngay lập tức trong kết quả tìm kiếm nếu có sự chậm trễ trong việc lập chỉ mục
    • Giải pháp: Thực hiện bộ nhớ đệm "write-through" (khi dữ liệu được ghi vào cơ sở dữ liệu, cũng ghi nó trực tiếp vào Solr) hoặc sử dụng phiên bản hóa (khi phục vụ kết quả tìm kiếm, kiểm tra nếu phiên bản Solr khớp với phiên bản cơ sở dữ liệu; nếu không, lấy từ cơ sở dữ liệu và cập nhật Solr)
  • Tăng độ phức tạp
    • Hệ thống của bạn bây giờ có hai kho dữ liệu để quản lý và đồng bộ

Trong các đợt bán hàng cao điểm, bạn có thể ghi đơn hàng vào Redis https://redis.io/ trước, sau đó đồng bộ hóa không đồng bộ với cơ sở dữ liệu và Solr.

Xin chào! Cám ơn bạn đã đọc bài viết có tiêu đề Solr cho Đọc, Cơ sở Dữ liệu cho Ghi: Tối ưu hóa Hiệu suất cho Ứng dụng Lưu lượng Cao của tác giả Vũ Lê Huân. Trong trường hợp bạn muốn tìm hiểu thêm thông tin về tác giả, bạn có thể truy cập .