Grokking Newsletter

Share this post

#157 - A year and a half with Debezium: CDC With MySQL

newsletter.grokking.org

#157 - A year and a half with Debezium: CDC With MySQL

Grokking Vietnam
Jan 25, 2021
Share this post

#157 - A year and a half with Debezium: CDC With MySQL

newsletter.grokking.org

Những bài viết hay

Performance Optimization 103: Nghệ thuật tìm kiếm bottleneck performance — kipalog.com

Tối ưu hóa hệ thống là một trong những việc mà các kỹ sư phần mềm thường sẽ đụng tới khi mà hệ thống của họ dần trở nên phổ biến hơn và có lượng truy cập nhiều hơn. Tuy nhiên, để tối ưu hệ thống một cách hiệu quả thì chúng ta phải biết chỗ nào trong hệ thống đang gặp trục trặc để cải thiện nó.

Bài viết sau đây được tác giả Minh Monmen trên kipalog nói về nghệ thuật tìm kiếm bottleneck trong hệ thống để giúp chúng ta tiếp cận việc tìm kiếm những bottlenecks này một cách hiệu quả và tinh tế

A year and a half with Debezium: CDC With MySQL — midhunsukumaran-mec.medium.com

Change Data Capture (CDC) giúp ghi nhận toàn bộ sự thay đổi của một database (insert, update, delete, …). Những sự thay đổi này có thể được gửi dưới dạng events đến các kafka topics và được cập nhật bởi các downstream consumers. Nhờ vậy dữ liệu sẽ được đồng bộ một cách đơn giản giữa database nguồn với database đích hoặc các ứng dụng downstream.

Với sự phát triển của Kafka Connect, đây là kiến trúc trở nên phổ biến trong việc xử lý các data pipeline ngày nay bởi nhiều lợi ích:

  • Độ trễ thấp hơn nhiều so với cập nhật thay đổi định kì

  • Tất cả các thay đổi trung gian trong database sẽ được cập nhật

  • Thích hợp với các ứng dụng realtime

Trong bài viết, tác giả giới thiệu một use case cụ thể sử dụng 1 distributed open source tool phổ biến cho quá trình CDC, đó là Debezium. Debezium chạy trên nền Kafka Connect, hỗ trợ đọc cơ sở dữ liệu và tạo thông báo cho mọi giao dịch. Ngoài ra, nó cũng giúp ghi lại snapshop của dữ liệu trên cơ sở dữ liệu hiện có.

Một vài điểm cơ bản của Debezium:

  • Debezium tạo một Kafka topic mỗi bảng trong database

  • Kafka message có thể có format: Json, Arvo hay Protobuf

  • Mỗi Kafka message chứa data trước và sau khi thay đổi

  • Trong snapshot mode, Debezium đọc dữ liệu từ bảng bằng query "select *". Nó cũng lock bảng để ngăn ngừa bất cứ sự thay đổi nào đối với schema. Chúng ta cũng có thể override select query

  • Với data được thay đổi liên tục trong bảng, Debezium sẽ đọc từ binlog thay vì trực tiếp từ bảng để không tạo ra những query phức tạp đến bảng

  • Debezium có một topic để lưu trữ lịch sử database

Hiện tại Debezium hỗ trỡ các database như MySql, MongoDB, PostgreSQL, Oracle, SQL Server, Cassandra.

Everything Public Key Infrastructure (PKI) - The Missing Manual — smallstep.com

Bài viết chia sẻ về Certificates and public key infrastructure (PKI) - một trong những phần kiến thức quan trọng và hầu như mỗi ngày làm việc của software engineer chúng ta đều liên quan tới:

  • Message Authentication Code (MAC)

  • Public Key Cryptography

  • Certificates, Certificates Authority

  • Key & Certificate lifecycle

Introduction to Presto Cost-Based Optimizer — blog.starburstdata.com

Cost-Based Optimizer (CBO) là một trong những cách thức tối ưu hóa phổ biến của nhiều hệ thống database OLTP hay OLAP. Thường thì cost-based optimizer được hoạt động bằng cách tính điểm “kinh phí” (cost) cho từng kế hoạch thực hiện (execution plan). Từ những điểm này thì hệ thống có thể chọn được execution plan nào phù hợp nhất cho SQL query của users.

Bài viết này nói về cách thức mà hệ thống Presto tạo ra cost-based optimizer của họ dựa trên 3 kinh phí chính: thời gian sử dụng CPU (CPU time), những điều kiện về bộ nhớ (memory requirements), và băng thông mạng (network bandwidth). Để tính điểm kinh phí một cách hiệu quả và lập ra nhiều execution plan khả thi thì Presto thường phải dựa trên những siêu dữ liệu (metadata) phổ biến sau đây:

  1. Tổng số dòng của bảng dữ liệu = thường thì số liệu này sẽ được dùng để tối ưu hóa việc JOIN các bảng dữ liệu với nhau

  2. Tổng số giá trị khác biệt trong một cột = thường thì số liệu này sẽ được dùng để ước chừng trung bình của tổng số dòng của một giá trị đặc biệt nếu mà người dùng áp dụng các FILTER giá trị trong query

  3. Phần trăm giá trị NULL trong một cột = thường thì số liệu này sẽ được dùng để tính tổng số dòng NULL hoặc để tăng độ chính xác cho tổng số dòng của một giá trị đặc biệt bằng việc loại bỏ những dòng NULL này trong tổng số dòng của bảng dữ liệu

  4. Giá trị lớn nhất và nhỏ nhất của một cột = số liệu này sẽ rất là hữu ích trong các queries mà cần phải FILTER trong một phạm vi dữ liệu

  5. Trung bình kích thước dữ liệu của một cột = số liệu này sẽ giúp Presto trong việc tính điểm kinh phí về CPU time, memory requirements, và network bandwidth khi cần phải vận hành một execution plan

Góc Database

Trong các hệ thống cơ sở dữ liệu phân tán thì vấn đề tính nhất quán (consistency) của dữ liệu rất quan trọng. Dù cho cơ chế bạn đang sử dụng là strong consistency hay eventual consistency thì vẫn sẽ phát sinh tình huống như lỗi mạng, lỗi kết nối, lỗi ghi xuống đĩa, ... dẫn đến sự sai khác giữa các phiên bản của cùng một dữ liệu trên các node khác nhau.

Để giải quyết vấn đề này thì một vài kỹ thuật đã được tạo ra, một trong số đó là sử dụng Merkle Tree. Vậy Merkle Tree là gì?

Hình dung một cách đơn giản như hình trên thì Merkle Tree là một cây nhị phân trong đó giá trị ở các node cha (không phải node lá) sẽ được tính bằng cách hash giá trị của các node con trực tiếp của nó. Riêng các node lá sẽ lưu trữ dữ liệu gốc, hoặc lưu giá trị hash từ dữ liệu gốc. Nhờ đặc tính này mà việc kiểm tra xem hai tập dữ liệu được đại diện bởi hai Markle Tree có giống nhau hay ko khá hiệu quả.

Merkle Tree đang được sử dụng trong một số Database như Cassandra, ScyllaDB, DynamoDB. Đối với các hệ thống DB này, một cluster gồm nhiều instance thì mỗi instance sẽ tự tính và cập nhật phiên bản Merkle Tree cho các replica, nhờ vậy nếu có sự khác biệt trong dữ liệu giữa các replica thì hệ thống sẽ nhận diện và chỉnh sửa một cách dễ dàng.

Mời bạn đọc thêm bài viết này để hiểu thêm về cơ chế anti-entropy của Cassandra: link.

Code & Tools

  • Emscripten: An LLVM-to-WebAssembly Compiler

  • Azure Boards · Plan, track, and discuss work across your teams

  • State of JS 2020

This Week Sponsors

POPS is a creative, innovative & hyper-growth working environment where storytelling meets technology.

POPS is the leading digital entertainment company in Southeast Asia. With over 12 years in entertainment, we provide thousands of exclusive, high-quality, carefully curated local and international contents and bring a unique entertainment experience through POPS Original series, concerts, movies, comics, esports and more.

We are on a journey to find talents who are passionate about technology and love to develop POPS APP the digital entertainment product with the latest technologies such as: OTT, Video On Demand, Microservices, etc. to give end users in the region great experiences with an all-inclusive digital entertainment platform. 

Góc Tuyển Dụng

  • Software Architect

  • Technical Lead

Visit https://popsww.com/en/careers for current job openings.

Quotes

The best error message is the one that never shows up.

- Thomas Fuchs

Share this post

#157 - A year and a half with Debezium: CDC With MySQL

newsletter.grokking.org
Comments
TopNewCommunity

No posts

Ready for more?

© 2023 Grokking Vietnam
Privacy ∙ Terms ∙ Collection notice
Start WritingGet the app
Substack is the home for great writing