0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Tại sao cần Change Data Capture trong hệ thống của bạn?

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

• 7 phút đọc

Chủ đề:

KungFuTech

Tại sao cần Change Data Capture trong hệ thống của bạn?

Change Data Capture (CDC) là một công nghệ thú vị giúp theo dõi các thay đổi trong cơ sở dữ liệu của bạn và phát tán chúng như một người hàng xóm tò mò. Nhưng liệu chúng ta có thực sự cần nó? Câu trả lời là: đôi khi có, đôi khi lại không. Hãy cùng phân tích từng bước một, bắt đầu từ những điều cơ bản.

Cuộc sống đơn giản: Dịch vụ REST ba tầng không cần CDC

Hãy tưởng tượng: Bạn đang có một cấu trúc ba tầng cổ điển. Nó giống như bánh sandwich bơ đậu phộng và mứt – đơn giản, đáng tin cậy và ai cũng biết cách nó hoạt động. Ở trên cùng là lớp trình bày (có thể là ứng dụng frontend được xây dựng bằng React hoặc bất kỳ công nghệ nào đang thịnh hành). Ở giữa là lớp ứng dụng (dịch vụ REST backend của bạn, có thể được xây dựng bằng Java hoặc Node.js, phục vụ các endpoint như một quán ăn phục vụ burger). Và ở dưới cùng? Lớp dữ liệu – một cơ sở dữ liệu Oracle, hoạt động như một chiếc tủ lạnh trung thành chứa đầy dữ liệu của bạn.

Dưới đây là cách thức hoạt động:

  • Người dùng gọi một endpoint: "POST /orders" để tạo một đơn hàng mới.
  • Dịch vụ xác thực, xử lý và ghi vào cơ sở dữ liệu Oracle: "INSERT INTO orders VALUES (stuff);"
  • Cần đọc? "GET /orders/123" – dịch vụ truy vấn cơ sở dữ liệu: "SELECT * FROM orders WHERE id=123;" và gửi lại kết quả.

Không có drama, không rắc rối. Mọi thứ đều đồng bộ, tự chứa và dịch vụ sở hữu toàn bộ quá trình. Tại sao không cần CDC? Bởi vì dịch vụ là người quản lý. Nó biết mọi đọc và ghi rất rõ ràng – giống như một phụ huynh bảo vệ trong một buổi chơi của trẻ. Nếu có gì thay đổi, dịch vụ sẽ xử lý ngay tại đó. CDC sẽ giống như việc thuê một thám tử tư để theo dõi ngôi nhà của bạn: tốn kém và không cần thiết. Hãy tiết kiệm tiền cho những thứ tốt hơn, như nâng cấp gói cà phê cao cấp của bạn.

Nâng cấp: CQRS – Vẫn không cần CDC, nhưng giờ có Events!

Bây giờ hãy nâng cấp lên một tầm cao mới. Giới thiệu Command Query Responsibility Segregation (CQRS). Nghe có vẻ sang trọng, đúng không? Nó thực chất là phân chia hệ thống của bạn thành hai phần: "người thực hiện" (command) và "người biết" (query). Hãy nghĩ về nó như việc tách biệt nhà bếp bừa bộn (nơi bạn chế biến các thay đổi) khỏi phòng khách gọn gàng (nơi bạn chỉ chiêm ngưỡng cảnh vật).

Trong một thiết lập CQRS:

  • Dịch vụ Command xử lý các ghi: Người dùng nói "Cập nhật hồ sơ của tôi!". Nó xử lý lệnh, ghi vào cơ sở dữ liệu Oracle và sau đó phát động một sự kiện như "ProfileUpdatedEvent" đến một hàng đợi tin nhắn (Kafka, RabbitMQ – tùy chọn của bạn).
  • Dịch vụ Query đăng ký các sự kiện đó, cập nhật góc nhìn tối ưu cho việc đọc của nó (có thể là một cơ sở dữ liệu riêng hoặc bộ nhớ cache), và phục vụ các truy vấn siêu nhanh: "GET /profile" lấy từ kho tối ưu, không làm ảnh hưởng đến cơ sở dữ liệu chính.

Sự kiện chảy trực tiếp từ dịch vụ command đến dịch vụ query – không cần trung gian. Nó giống như việc chuyền giấy trong lớp học: nhanh chóng, trực tiếp, và nếu được thực hiện đúng, giáo viên (cơ sở dữ liệu của bạn) thậm chí không nhận thấy sự trò chuyện thêm. Tại sao không cần CDC ở đây? Bởi vì bạn kiểm soát mã nguồn. Bạn có thể tích hợp việc phát sự kiện ngay trong logic command. Tất cả đều ở trong nhà, không có sự can thiệp từ bên ngoài. Thêm CDC sẽ giống như việc lắp đặt báo động khói trong một căn phòng đã được giám sát – thừa thãi và có thể chỉ gây phiền phức với những báo động giả.

Nhưng chờ đã, có một cái kết: CQRS làm cho hệ thống của bạn có thể mở rộng và nhanh nhẹn, nhưng vẫn giả định rằng bạn sở hữu mọi thứ. Điều gì sẽ xảy ra nếu cuộc sống không đơn giản như vậy? Hãy tiến vào thực tế...

Cơn ác mộng di sản: Nơi CDC cứu rỗi (vì bạn không thể chạm vào mã)

Bây giờ chúng ta đang ở trong vùng đất khó khăn – đầm lầy của hệ thống di sản. Hãy tưởng tượng một cơ sở dữ liệu Oracle cổ xưa đã tồn tại lâu hơn một số sự nghiệp của các lập trình viên. Nhiều dịch vụ đang đổ dữ liệu vào nó như một bữa tiệc potluck: Ứng dụng của bạn ghi đơn hàng, một hệ thống thanh toán thêm hóa đơn, bộ phận nhân sự thêm cập nhật nhân viên. Và ở phía đọc? Một rạp xiếc của các người tiêu dùng: Bảng điều khiển phân tích của bạn kéo báo cáo, một CRM bên thứ ba đồng bộ hóa dữ liệu khách hàng, có thể thậm chí một công cụ quản lý hàng hóa của nhà cung cấp cũng muốn nhìn vào.

Điểm mấu chốt? Một số người đọc và ghi này không phải của bạn. Chúng thuộc về bên thứ ba – nghĩ đến các đối tác bên ngoài hoặc các monolith cổ xưa từ các thương vụ mua lại. Bạn không thể chỉ đi vào và tái cấu trúc mã của họ để phát sự kiện. "Này, nhà cung cấp ngẫu nhiên, có thể thêm hỗ trợ Kafka vào script Perl của bạn từ những năm 1990 không?" Vâng, điều đó sẽ không diễn ra tốt đẹp.

Đây là nơi CDC xuất hiện như một siêu anh hùng trong chiếc áo choàng làm từ redo logs. Các công cụ CDC (như Debezium hoặc Oracle GoldenGate) theo dõi các nhật ký thay đổi của cơ sở dữ liệu – những bản ghi lén lút của mọi thao tác chèn, cập nhật, xóa – và phát chúng ra như các sự kiện. Không cần phải chạm vào mã di sản; tất cả chỉ là nghe thụ động.

Tại sao đây là cách duy nhất?

  • Không thể sửa đổi nguồn: Những người viết bên thứ ba sẽ không cho phép bạn thêm các móc sự kiện. CDC nghe lén mà không cần xin phép.
  • Nhiều người tiêu dùng: Mọi người nhận được những thay đổi theo thời gian thực, mà không cần truy vấn cơ sở dữ liệu như một người yêu cũ cần kiểm tra tình trạng của bạn.
  • Phép thuật tách rời: Các dịch vụ hiện đại của bạn có thể đăng ký các sự kiện này, xây dựng các góc nhìn hoặc tích hợp mới, trong khi những gì cũ vẫn hoạt động như thường.

Nếu không có CDC, bạn sẽ bị mắc kẹt với việc polling (truy vấn cơ sở dữ liệu mỗi vài giây – không hiệu quả và chậm chạp, giống như kiểm tra tủ lạnh liên tục để tìm đồ ăn vặt không có) hoặc triggers (có thể làm phình to cơ sở dữ liệu và gây ra sự chậm trễ hiệu suất). CDC giữ mọi thứ sạch sẽ, hiệu quả và không có drama. Nó giống như băng dính giữ các thế giới di sản lại với nhau – không đẹp đẽ, nhưng đúng là nó hoạt động.

Kết luận: CDC – Không phải lúc nào cũng cần, nhưng là cứu tinh khi cần

Vậy, tại sao phải bận tâm với CDC? Trong các thiết lập đơn giản hoặc môi trường CQRS được kiểm soát, bạn không cần – giống như mang một khẩu bazooka đến một cuộc chiến nước. Nhưng trong miền tây hoang dã của các hệ thống di sản với các tích hợp bên thứ ba không thể chạm vào, đó là tấm vé vàng của bạn để giữ sự tỉnh táo. Nó biến những lời thì thầm trong cơ sở dữ liệu thành những tiếng kêu hành động, mà không cần viết lại toàn bộ thế giới.

Nếu bạn đã chiến đấu với những con quái vật di sản hoặc có câu chuyện kinh hoàng về CDC của riêng bạn, hãy để lại một bình luận bên dưới. Ai biết được, có thể chúng ta sẽ cùng cười về điều đó bên tách cà phê ảo. Cho đến lần sau, hãy giữ cho dữ liệu của bạn chảy và mã của bạn sạch sẽ!

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