#153 - Rewriting the heart of Dropbox Sync Engine
Thân gửi các bạn đọc,
Sau hai tuần kể từ khi kêu gọi quyên góp tài trợ cho các hoạt động của Grokking, team đã nhận được một số đóng góp từ phía các bạn đọc của Grokking Newsletter. Qua đó giúp team Grokking có thêm nguồn kinh phí để duy trì các hoạt động như chi phí server, hosting, quay video các buổi talk, …
Các bạn nào có nhã ý đóng góp cho các hoạt động Grokking thì có thể chuyển khoản vào tài khoản của Grokking với thông tin như sau:
- Chủ tài khoản: Cong ty TNHH Grokking Vietnam
- Số tài khoản: 216092759
- Ngân hàng: ACB
- Chi nhánh: HCM
- Nội dung: <ho ten> tai tro Grokking 2021 qua newsletter
Và một điều rất quan trọng, sau khi chuyển tiền tài trợ, bạn vui lòng chụp hình uỷ nhiệm chi gửi email về cho finance@grokking.org để team ghi nhận và cập nhật bạn vào danh sách người đóng góp để nhận các báo cáo định kỳ cập nhật thông tin về quá trình sử dụng kinh phí tài trợ của Grokking như thế nào nhé.
Ngoài ra, tùy theo mức độ đóng góp của các bạn, các bạn sẽ nhận được những phần quà đặc biệt từ phía team Grokking được cung cấp riêng cho nhà tài trợ.
Thân,
Grokking Vietnam
Những bài viết hay
Scaling Cache Infrastructure at Pinterest — medium.com
Caching là một trong những phần thiết yếu để tăng tốc độ và cải thiện hệ thống. Bài viết sau đây được Kevin Lin, một kỹ sư ở Pinterest bên mảng Storage và Caching, nói về cách Pinterest làm thế nào để scale hệ thống caching của họ.
Ở Pinterest, họ dùng Memcached cho việc chứa dữ liệu cache vì Memcached có những điểm nổi bật như là:
Memcached chạy rất hiệu quả cho asynchronous event-driven architecture hoặc multithreaded processing model
Memcached hỗ trợ extstore để chứa dữ liệu trên NVMe flash disk nhanh hơn
Memcached được thành lập khá là lâu nên được test về độ chính xác và độ hiệu xuất nhiều hơn
Đồng thời, Pinterest cũng vận dụng hệ thống mcrouter - một hệ thống được các đội ngũ kỹ sư ở Facebook xây dựng (có được đề cập ở Grokking Newsletter #151). Với mcrouter, họ có thể scale Memcached một cách dễ dàng hơn với nhiều Memcached clusters. Bài viết đồng thời nói thêm về những tradeoffs và những điểm chú ý khác khi các đội ngũ kỹ sư ở Pinterest thiết lập hệ thống này.
Rewriting the heart of our sync engine — dropbox.tech
Hệ thống Sync Engine ở Dropbox là một trong những hệ thống hạ tầng thiết yếu để kết nối files từ các máy tính ở clients tới các máy chủ ở Dropbox. Nhiệm vụ chính của Sync Engine là giúp việc upload, download và kiểm tra các files một cách đơn giản và hiệu quả cho người dùng Dropbox. Từ lúc ra đời năm 2008, Dropbox Sync Engine đã được cải thiện và nâng cấp nhiều lần với nhiều chức năng hữu ích. Tuy nhiên, mỗi lần cải thiện Sync Engine thì hệ thống càng ngày càng phức tạp với những hạn chế từ ngôn ngữ lập trình Python và data models của hệ thống.
Joel Spolsky, người thành lập Trello và Stackoverflow, đã từng nói rằng việc xây dựng một hệ thống phần mềm lại từ đầu là một trong những lỗi lầm chiến lược mà một công ty phần mềm thường gặp phải. Mặc dù vậy, bài viết sau đây của các đội ngũ kỹ sư ở Dropbox đưa ra những lý do và lập luận về việc tại sao viết lại hệ thống này là một điều hợp lý trong tình huống này. Hệ thống được viết lại có tên là Nucleus và được viết bằng Rust thay vì Python.
Disaster Recovery for Multi-Region Kafka at Uber — eng.uber.com
Uber là một trong những hệ thống triển khai Apache Kafka lớn nhất thế giới, tại đây họ xử lý hàng nghìn tỷ message và hàng petabyte data mỗi ngày.
Apache Kafka đã trở thành một nền tảng cơ sở cho hạ tầng kiến trúc tại Uber, đặc biệt trong việc xây dựng một hệ sinh thái phức tạp, với một cơ chế pub/sub message bus để truyền event data từ các ứng dụng lái xe và tài xế.
Có rất nhiều thử thách họ đã vượt qua trong việc cung cấp một nền tảng có khả năng mở rộng, tin cậy, hiệu quả cao, và dễ sử dụng trên nền Apache Kafka.
Trong bài viết này, nhấn mạnh môt số thử thách của việc phục hồi dữ liệu từ các sự cố xảy ra như cluster downtime, và mô tả việc xây dựng một kiến trúc Apache Kafka multi-region như thế nào tại Uber.
Việc phục hồi dữ liệu từ các sự cố được xây dựng một cách cẩn thận để giảm thiểu những thiệt hại tới kinh doanh. Các sự cố có thể xảy ra một cách tự nhiên hoặc do lỗi con người, ví dụ như các sự cố về điện, lỗi phần mềm hay lỗi mạng.
Uber sử dụng một chiến thuật multi-region, ở đó các service được deploy với các trung tâm dữ liệu phân tán theo vùng địa lý. Khi một hạ tầng vật lý tại một khu vực xảy ra sự cố và ko truy cập được, service vẫn có thể hoạt động với data từ một khu vực khác.
Uber đã xây dựng một nền tảng Kafka multi-region, tại đó cung cấp cơ chế data redundancy để hỗ trợ khả năng chịu lỗi theo vùng (region-level failover). Có rất nhiều service tại Uber ngày nay phụ thuộc vào khả năng này, các service này giả định rằng data luôn sẵn sàng (available) và tin cậy (reliable) tại Kafka.
Trong kiến trúc này có 2 loại clusters: Producer publish các message locally đến Region Cluser, và sau đó message từ regional cluster được replicated tại Aggregate cluster.
Chìa khóa của kiến trúc này chính là cơ chế message replication.
Các message được "replicated asynchronously", từ regional cluster đến aggregation cluster. Để làm việc này, Uber đã xây dựng uReplicator, một giải pháp opensource nhằm replicate data một cách linh hoạt và đáng tin cậy.
Góc Distributed System
Distributed Cron được xây dựng ở Google như thế nào ?
Cron jobs là một thành phần tương đối cơ bản trong các hệ thống. Nhiệm vụ cơ bản của nó là thực thi một (hoặc nhiều) câu lệnh tại những thời điểm được định nghĩa sẵn. Cron có thể thực hiện rất nhiều tác vụ, phụ thuộc hoàn toàn vào định nghĩa của người vận hành (ví dụ garbage collection, data analysis, etc). Dạng cơ bản của Cron jobs có thể nói tới Crontab - chương trình này mặc định có trong OS, giúp người sử dụng có thể định nghĩa intervals mong muốn để thực hiện một chương trình nào đó.
Cron hoạt động đơn giản, nhưng khi vận hành hệ thống large-scale distributed system cỡ Google, việc sử dụng cron có gì khác biệt?
Cron reliability - đối với Google, cron cũng là một thành phần cần đảm bảo độ ổn định. Do vậy, họ không đặt cron jobs ngay trên các machine cần thực thi chương trình, mà de-couple thiết kế thành 1 distributed cron service riêng biệt - nếu muốn thực thi một service/program, đăng kí với cron service và chỉ định program, input, và datacenter (target) nào muốn thực thi program đó. Khi đó, cron service sẽ truyền lệnh thực thi tới datacenter scheduler (thông qua RPC) đó để thực hiện. Cron service này được quản lý như các hệ thống critical khác trong Google.
Thuật toán đồng thuận trong việc tracking trạng thái của các cron jobs - nhằm mục đích restore trong trường hợp failure. Trạng thái của cron jobs là 1 loại dữ liệu sensitive, và cần đảm bảo tính nhất quán trong môi trường distributed. Do vậy, cần có thuật toán đồng thuận. Google sử dụng Fast Paxos để giải quyết vấn đề này.
Cron service được deploy thành nhiều replicas (distributed), trong đó có 1 replica là leader và những replicas khác là worker.
Chỉ duy nhất Leader replica có quyền thực hiện các cron jobs. Leader replica có một scheduler bên trong để thực hiện việc này. Cách thức hoạt động tương tự crond.
Chỉ duy nhất Leader replica có quyền thay đổi trạng thái (write state) của cron jobs. Các replicas khác chỉ có nhiệm vụ sync trạng thái về.
Khi Leader replica gặp sự cố, tiến trình leader election sẽ tìm ra replica leader mới.
Trạng thái cơ bản được lưu trữ trong cron service là những cron jobs nào đã được thực thi thành công (thời gian start, thời gian kết thúc, jobs nào đã được thực hiện)
Giao tiếp trong thuật toán này thực hiện ở mode synchronous.
Khi Leader replica bị "mất quyền làm leader", nó buộc phải ngắt kết nối với datacenter scheduler. Điều kiện này đảm bảo tính mutual exclusion giữa "old leader" và "new leader".
Một số vấn đề khác của hệ thống distributed cron service này bao gồm: xử lý lỗi, lưu trữ trạng thái ra sao, đối với những large cron jobs thì sao, mời các bạn tìm hiểu cụ thể theo link bài viết https://sre.google/sre-book/distributed-periodic-scheduling/
Góc Database
Ổ SSD (solid state drive) đã trở nên khá phổ biến trong nhiều năm trở lại đây và dần dần thay thế cho hard-disk thông thường. Một trong những ưu điểm của SSD đó là tốc độ đọc ngẫu nhiên tốt hơn hẳn so với hard-disk. Tuy nhiên, bản thân quá trình ghi (write) đặc biệt là ghi ngẫu nhiên của SSD vẫn còn chậm hơn nhiều lần so với đọc (read) khá nhiều lần.
Theo phân tích của các tác giả đến từ Đại học khoa học và công nghệ HongKong thì các cơ chế phổ biến để index như B+-tree và LSM trên thị trường mặc dù vẫn sử dụng được trên SSD nhưng vẫn chưa thực sự tận dụng hết các đặc tính của SSD để cải thiện hiệu năng tốt hơn.
Chính vì vậy, trong bài báo này, các tác giả đề xuất sử dụng FD-tree để làm cơ chế index trên các ổ đĩa SSD, một cấu trúc dữ liệu được xây dựng dựa trên B+-tree để vừa tận dụng được cơ chế đọc của SSD vừa giải quyết được vấn đề ghi ngẫu nhiên. Cơ chế index này được thiết kế dựa trên ba nguyên tắc chính:
Biến đổi các lệnh ghi ngẫu nhiên thành các lệnh ghi mang tính tuyến tính.
Giới hạn việc ghi ngẫu nhiên và các khu vực nhỏ
Hỗ trợ tối ưu hoá I/O đa trang.
Mời các bạn cùng đọc bài báo để hiểu thêm về cơ chế đề xuất của các tác giả: link
Sự kiện nổi bật
Grokking Techtalk #40 đã được tổ chức vào ngày hôm qua và nhận được sự tham gia đông đảo tới từ nhiều bạn. Các bạn có thể xem lại các slide của hai bài talk tại hai link sau:
LINE CODE WOW 2021 — codewow.linecorp.vn
Cuộc thi lập trình đầu tiên tại Việt Nam do LINE tổ chức với tên gọi LINE CODE WOW đã bắt đầu khởi động đăng ký.
Ngoài giải thưởng tiền mặt với tổng giá trị lên đến 18 triệu đồng, LINE CODE WOW hứa hẹn sẽ là một sân chơi để các bạn trẻ đam mê thuật toán thử sức với các bài toán thực tế do chính các kỹ sư LINE ra đề.
Chi tiết và đăng ký: https://lin.ee/tEKp4cu/kgdu
Code & Tools
This Week Sponsors
Established in 2012, Chotot.com is the leading online classified website in Vietnam with more than 1,2 billion monthly page views, 10 million monthly users, 3,6 million transactions in 2019. With the motto “Muốn Là Có” (“A Way to Your Wants”), Chotot.com provides an effective online marketplace for Vietnamese to buy and sell various types of products easily. For more information, please visit www.chotot.com.
Góc Tuyển Dụng
Cho Tot creates products using a variety of open source and cloud native technologies, to name some: Kubernetes, Kafka, Elastic Search, PostgreSQL, MongoDB, TimescaleDB. We utilize Google Cloud Platform services such as Google Kubernetes, AI Platform, Cloud Composer, Data Catalog, BigQuery, Google Analytics for our infrastructure needs while running our heavy workloads on our own on-premises infrastructure. Visit careers.chotot.com to learn more about our vacancies and company culture.
Quotes
Programming is the art of doing one thing at a time
- Michael Feathers