#157 - A year and a half with Debezium: CDC With MySQL
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:
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
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
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
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
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
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
Visit https://popsww.com/en/careers for current job openings.
Quotes
The best error message is the one that never shows up.
- Thomas Fuchs