#151 - Spotify đã cải tiến hệ thống Event của họ như thế nào?
Thân gửi bạn đọc newsletter,
Tính từ lúc thành lập Grokking năm từ cuối năm 2014 cho đến giờ cũng gần 6 năm. Trong suốt 6 năm qua thì các hoạt động của Grokking chủ yếu được duy trì dựa trên tinh thần đóng góp từ các thành viên core team là chính. Tuy nhiên trong 2 năm gần đây 2019-2020, Grokking bắt đầu mở rộng các hoạt động chỉn chu hơn nữa nên bắt đầu cần nguồn kinh phí ổn định để duy trì các chi phí server, hosting, quay video các buổi talk, ...
Để đảm bảo duy trì và phát triển cho các hoạt động hiệu quả, Grokking đang cần kêu gọi một khoản đóng góp tự nguyện từ các thành viên trong cộng đồng để duy trì và mở rộng các dự án cốt lõi của Grokking (trong đó có newsletter)
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
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é.
Thân,
Grokking Vietnam
Những bài viết hay
How Alibaba Is Reshaping the Java Language on the Cloud — alibaba-cloud.medium.com
Được tạo ra từ 20 năm trước, Java là một ngôn ngữ lập trình hướng đối tượng (OOP), được hỗ trợ bởi rất nhiều enterprise framework. Java với JVM (Java Virtual Machine) cung cấp sự ổn định và hiệu suất cao trong các điều kiện hoạt động nghiêm ngặt và lâu dài (với các tính năng như bộ Garbage Collector khá trưởng thành, được tối ưu tốt, Realtime Profiling và Adaptive Optimization...).
Tuy nhiên, với sự phát triển và bao phủ của các hệ thống Microservices và Cloud Native như ngày nay thường đòi hỏi các ngôn ngữ lập trình phải có tính đơn giản, gọn lẹ và có tốc độ build nhanh chóng để phù hợp với các "service-nhỏ" và giảm được thời gian cũng như chi phí vận hành (cho việc deployment/monitoring).
Trong bài viết này, anh Yu Lei - technical expert tại Alibaba JVM team đã chia sẻ về cách mà JVM team của anh ấy đã giải quyết những khó khăn trong việc vận hành số lượng lớn các service phức tạp ở Alibaba bằng Java.
My Top 3 SQL Interview Questions. I frequently interview candidates for… — towardsdatascience.com
Có lẽ SQL là khái niệm mà không dev nào không biết tới. Trong hầu hết các cuộc phỏng vấn, các câu hỏi về SQL được đưa ra rất nhiều từ mức độ đơn giản đến phức tạp. Vì vậy, trước mỗi lần phỏng vấn cho vị trí Software Engineer, Data Engineer hay Data Analyst, việc chuẩn bị kiến thức nền tảng về SQL là không thể thiếu.
Trong bài viết, tác giả đưa ra 3 vấn đề trong SQL có các mức độ phức tạp khác nhau mà tác giả thường dùng để kiểm tra các ứng viên. Dưới góc nhìn của tác giả, các cuộc phỏng vấn không nên chú trọng đến việc kiểm tra các cú pháp cụ thể, mà thiên về đánh giá mức độ hiểu biết của ứng viên về các khái niệm, áp dụng phương pháp giải quyết vấn đề, khả năng học hỏi từ những sai lầm và mức độ mà người đó có thể đóng góp cho team.
Những câu hỏi mà tác giả đưa ra không chỉ là gợi ý để việc đánh giá kĩ năng SQL của các ứng viên hiệu quả hơn, mà nó cũng giúp chúng ta đánh giá lại kiến thức của bản thân về SQL. Qua đó, ta có thể hiểu rõ hơn về bản chất và hoạt động của SQL.
Dưới đây là 3 câu hỏi được đề cập tới trong bài viết, các bạn hãy thử suy nghĩ trước khi đọc những phân tích của tác giả nhé:
Nếu bạn mắc lỗi đánh máy trong mọi mệnh đề của truy vấn SQL, lỗi đầu tiên sẽ được phát hiện là gì?
Bạn có thể viết lại một truy vấn SQL bằng IN hoặc EXISTS thành một truy vấn JOIN không? Nó ảnh hưởng như thế nào đến hiệu suất?
Giải thích về sự khác biệt giữa HASH JOIN và SORT MERGE JOIN và cách cơ sở dữ liệu xử lý chúng.
Introducing mcrouter: A memcached protocol router for scaling memcached deployments — engineering.fb.com
Memcached là một hệ thống phân tán lưu trữ bộ nhớ (distributed memory-caching system) được ra đời vào năm 2003 và được sử dụng rộng rãi cho nhiều hệ thống ở các công ty công nghệ. Vào năm 2014, các đội ngũ kỹ sư ở Facebook đã cho ra một hệ thống gọi là mcrouter - được dùng để scale hệ thống memcached của họ lúc bấy giờ. Mcrouter hỗ trợ rất là nhiều chức năng mà memcached không có vào thời điểm đó. Một vài chức năng tiêu biểu mcrouter hỗ trợ như là:
Standard open source Memcached ASCII protocol support: tất cả các clients mà có thể giao tiếp với giao thức Memcached hỗ trợ đều có thể dùng mcrouter. Việc này giúp cho cho việc triển khai mcrouter khá là dễ dàng nếu bạn muốn đặt mcrouter như là hệ thống trung gian giữa các clients và memcached servers
Replicated pools: mcrouter sẽ tự động hóa việc nhân rộng dữ liệu và truyền tải clients tới nhiều bản sao mà không cần clients phải lo lắng gì về việc dữ liệu đang nằm ở đâu
Destination health monitoring and automatic failover: mcrouter tự động theo dõi tình trạng của mỗi server. Nếu mà server đó không phản hồi thì request sẽ được tự động dời qua một bản backup. Đồng thời, mcrouter sẽ kiểm tra server bị lỗi đó ở trạng thái background để có thể truyền tải request lại tới server này ngay khi server được hồi phục lại
Reliable delete stream: để việc xóa dữ liệu cache một cách đáng tin cậy khi mà một server có thể ở trạng thái lỗi, mcrouter lưu câu lệnh xóa ở trên một log file chứa trên disk để mà replay lại câu lệnh khi mà server đó được hồi phục
Mặc dù Redis hiện nay được dùng nhiều hơn và phổ biến hơn Memcached. Đồng thời, Redis cũng có những chức năng tương tự như mcrouter có. Qua bài viết sau đây của các kỹ sư ở Facebook ở trên blog của họ, chúng ta có thể hiểu thêm cách mà họ đưa ra quyết định scale Memcached như thế nào vào lúc đó. Nếu bạn muốn tìm hiểu sâu hơn về hệ thống thay vì qua bài viết tóm tắt ở trên Facebook engineering blog, bạn có thể đọc qua bài báo này mà họ đăng lên ở NSDI năm 2013.
Góc Distributed System
Tại thời điểm bài viết, Spotify đang có những tính năng được ưa chuộng như: Discover Weekly playlist, Year in music, Spotify Party. Những tính năng này có được đều dựa trên hệ thống back-bone về event messaging được các kỹ sư Spotify xây dựng xoay quanh Kafka v0.7. Tuy nhiên tại thời điểm đó, Kafka Broker không đạt được đổ ổn định nên Spotify đã chọn phương án lưu trữ xuống file trên HDFS, điều này lại dẫn đến việc HDFS trở thành single-point-of-failure.
Trong số newsletter kỳ này, mời các bạn cùng tham khảo serie ba bài viết chia sẻ quá trình cải tiến hệ thống event của Spotify qua từng giai đoạn.
Bài viết đầu tiên mô tả hệ thống "cũ" của Spotify xoay quanh self-hosted Kafka, HDFS, và các ETL jobs và những bài học của họ trong quá trình vận hành: link phần một.
Bài toán Reliable Persistent Storage vẫn gặp khó khăn, ngay cả khi họ nâng cấp Kafka lên 0.8 và một số cải tiến trong kĩ thuật xử lý như:
Sử dụng nhiều topic cho mỗi event type.
Đẩy nhiều việc về xử lý dữ liệu về phía Producer hơn để giảm latency cho các job ETL ở phía Consumer.
Xây dựng dự án Mirror Maker để mirroring dữ liệu giữa các data center.
Để cải thiện hơn bài toán Reliable Persistence, Spotify đã có 1 quyết định chiến lược là loại bỏ hệ thống Kafka self-hosted mà thay bằng dịch vụ Google Cloud Pub/Sub. Một số tính năng của Cloud Pub/Sub được khai thác bởi Spotify bao gồm:
Có thể giữ message chưa gửi đi trong 7 ngày
Hỗ trợ mô hình gửi "at-least-once"
Cung cấp global availability
Cung cấp REST API thân thiện và dễ sử dụng
Các tính năng về monitoring, alerting hoặc deployment được hỗ trợ dễ dàng bởi Google Cloud
Tại thời điểm áp dụng, hệ thống của Spotify phía Producer đạt 700k events trên mỗi giây và về phía consumer là 800k events trên giây. Họ đã tiến hành thử nghiệm load test với Cloud Pub/Sub với mong muốn có thể đạt được 2M events trên giây trên mỗi zone. Với global availability, con số mong muốn đạt được là: số lượng zone * 2M events trên giây. Link phần hai
Một số cải tiến tiếp theo để tối ưu phần xử lý dữ liệu phía đầu consumer được Spotify mô tả trong phần cuối của blog:
Export dữ liệu từ Pub/Sub qua các bucket theo giờ sử dụng Google Dataflow.
Một số cải tiến trong các ETL job (có implementation detail trong bài viết).
Áp dụng Sharding và Window.
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
Talk is cheap. Show me the code.
- Linus Torvalds