#124 - Đồng bộ real-time dữ liệu giữa 2 database
Những bài viết hay
So sánh các Framework Reactive — medium.com
Kĩ thuật Reactive Programming được ra đời và phát triển mạnh mẽ trong những năm gần đây nhờ ưu thế về asynchronize & event-driven. Nó được ứng dụng ở nhiều nơi và được ứng dụng rộng rãi trong các framework chạy trên nền JVM. Có thể kể đến một vài thư viện có sử dụng kỹ thuật này như Akka, LMAX, Vert.x, Projectreactor... với ưu/nhược điểm riêng.
Tại Priceline, họ có 3 team sử dụng reactive framework, và mỗi team lại có lựa chọn riêng, hãy cùng tìm hiểu những lí do dẫn tới những lựa chọn khác biệt này.
Scribe - hệ thống phân tải hàng nghìn terabytes dữ liệu mỗi giờ — engineering.fb.com
Bạn có bao giờ thắc mắc rằng Facebook tiếp nhận và truyền tải dữ liệu logs như thế nào khi mà họ có tới gần 2 tỷ người dùng cập nhật hàng ngày? Scribe là một hệ thống distributed queueing system được đội ngũ kỹ sư Facebook thiết kế 12 năm trước. Sau 12 năm cải thiện, Scribe hiện nay có thể tiếp nhận xử lý hơn 2.5 TB/s từ producers và truyền tải ra hơn 7 TB per second cho consumers.
Scribe được thiết kế theo 4 nguyên lý chính:
Simple - API được thiết kế một cách đơn giản để người dùng có thể ghi và đọc dữ liệu logs
(Write) Available - có khả năng chịu lỗi cao ở từng công đoạn của hệ thống để đạt được high availability mặc dù một số nhỏ dữ liệu có thể bị mất
Scalable - được thiết kế để scale một cách rất hiệu quả để tiếp nhận và truyền tải lượng lớn dữ liệu ở Facebook
Multitenant - được thiết kế để người dùng có thể chia sẻ tài nguyên mà không ảnh hưởng tới người khác
Mời bạn đọc bài viết sau để hiểu rõ hơn làm thế nào Scribe đạt được những con số ấn tượng như vậy.
Apache Airflow: Cơ chế hoạt động — medium.com
Apache Airflow là một open-source project được đội ngũ kỹ sư Airbnb thiết kế từ năm 2014 và được Apache Foundation hỗ trợ từ năm 2016. Apache Airflow là một trong những công nghệ phổ biến hiện nay cho workflow management systems (WMS) được các Data Engineers dùng tới để quản lý quá trình tạo đường dẫn thông tin (data pipeline) trong cơ sở dữ liệu cho việc xử lý và phân tích thông tin. Quá trình tạo data pipeline được Airflow thể hiện bằng directed acyclic graph (DAG) do từng công việc (task) thường phụ thuộc những tasks khác để lấy dữ liệu đã được xử lý.
Cấu trúc của Apache Airflow bao gồm 4 thành phần chính:
Metadata Database: là database chính để chứa thông tin về hoạt động của từng task trong hệ thống
Scheduler: là hệ thống lập kế hoạch chính để quyết định task nào sẽ được xử lý tiếp theo
Executor: là hệ thống message queue để cho Scheduler kết nối với từng bộ phận làm việc (worker) cho việc thi hành từng task
Workers: là bộ phận làm việc chính để chạy task được thành lập từ Data Engineer
Delta - hệ thống đồng bộ dữ liệu — netflixtechblog.com
Có lẽ bạn đọc sẽ không còn xa lạ với việc một ứng dụng sử dụng nhiều kho lưu trữ dữ liệu nhằm mục đích tối ưu sự hiệu quả cho từng công việc riêng như: caching (Memcached, Redis...) hay tìm kiếm nâng cao (ElasticSearch, Solr...).
Thách thức đặt ra là làm thế nào để giữ các kho dữ liệu luôn có dữ liệu đồng bộ với nhau và một số ứng dụng cũng cần phải tùy chỉnh hoặc cải thiện dữ liệu của mình thông qua việc gọi những dịch vụ bên ngoài. Để giải quyết những vấn đề này, đội ngũ kỹ sư ở Netflix đã trải qua quá trình nghiên cứu các giải pháp có sẵn nhưng chúng điều có những giới hạn và chưa phù hợp yêu cầu của họ. Hệ thống Delta được ra đời nhằm giải quyết vấn đề đó.
Góc Database
Làm sao để đồng bộ hiệu quả 2 database real-time với Change Data Capture (CDC)? — riccomini.name
CDC (Change Data Capture) giúp ghi nhận toàn bộ sự thay đổi của một database nguồn (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ý 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
CDC mang lại nhiều lợi ích nhưng gặp phải hạn chế lớn khi thay đổi schema của dữ liệu nguồn.
Trong quá trình phát triển sản phẩm, việc thay đổi cấu trúc dữ liệu của 1 bảng hoàn toàn có thể xảy ra ví dụ như: đổi tên, xoá hoặc thêm cột, thay đổi cấu trúc dữ liệu của cột,… Những thay đổi này có thể ảnh hưởng lớn đến hệ sinh thái Kafka khi downstream consumers có thể không xử lý được dữ liệu với cấu trúc mới.
Chúng ta có thể quản lý được sự thay đổi của cấu trúc dữ liệu nguồn với Schema Registry. Đây là service của Confluent cho phép kiểm tra tính tương thích trước & sau khi thay đổi. Nếu sự thay đổi của cấu trúc data nguồn vi phạm quy tắc thiết lập trong Schema Registry, toàn bộ những update của data nguồn sẽ không thể được gửi đến Kafka topic.
Vậy làm thế nào để ta có thể đồng bộ được các nguồn dữ liệu, vừa capture được toàn bộ sự thay đổi lại ít gặp khó khăn trong quá trình thay đổi schema của bảng gốc?
Có thể bạn chưa biết
Cổng mặc định của SSH (Secure Shell) là 22, đây không phải là một con số trùng hợp ngẫu nhiên. Phiên bản đầu tiên của SSH được viết vào năm 1995 bởi Tatu Ylonen. Đây là thời điểm mà ftp và telnet đang được sử dụng rộng rãi. SSH đã được thiết kế với mục đích thay thế telnet (cổng 23) và ftp (cổng 21). Khi đó thì cổng 22 đang "miễn phí". Nhưng làm sao để có được con số 22 đó?
Hoá ra là việc đăng ký cổng vào thời điểm đó (khoảng năm 1995) khá dễ dàng do quy mô mạng lưới internet còn đang rất nhỏ và đang ở giai đoạn phát triển bùng nổ. Việc phân bố sử dụng các cổng lúc đó được thông qua bởi tổ chức IANA (Internet Assigned Numbers Authority) được quản lý bởi Jon Postel và Joyce K. Reynolds, những nhà tiên phong trong Internet. Jon còn được biết đến là biên tập cho những chuẩn protocol khác như IP, ICMP hay TCP.
Đọc chi tiết về lịch sử và quá trình cổng SSH được đăng ký tại đây: https://www.ssh.com/ssh/port
Code & Tools
Frontend Checklist : Một checklist đầy đủ cho các frontend developer trong việc hoàn thiện một trang web.
Algorithm Visualizer: Mô phỏng thuật toán bằng hình vẽ
Quotes
Simplicity is the soul of efficiency
― Austin Freeman