Grokking Newsletter

Share this post

#148 - Facebook scales hệ thống live stream cho hàng triệu người xem như thế nào?

newsletter.grokking.org

#148 - Facebook scales hệ thống live stream cho hàng triệu người xem như thế nào?

Grokking Vietnam
Nov 22, 2020
Share this post

#148 - Facebook scales hệ thống live stream cho hàng triệu người xem như thế nào?

newsletter.grokking.org

Thứ 7 (21/11/2020) vừa rồi, tại văn phòng Axon đã diễn ra Grokking Techtalk #39 với hai chủ đề Gossip Protocol and applications và How to build an event driven architecture with Kafka & Kafka Connect được anh Nguyễn Anh Tú và Nguyễn Văn Lợi chia sẻ. Nếu bạn không thể tham gia sự kiện vừa rồi, bạn có thể xem lại livestream tại đây.


Những bài viết hay

Scaling Live streaming for millions of viewers - Facebook Engineering — engineering.fb.com

Facebook xây hệ thống live stream đáp ứng cho cả người dùng cá nhân lẫn những chương trình chuyên nghiệp như giải bóng đá La Liga, CONMEBOL, and UEFA.

Các kỹ sư tại Facebook đã xây dựng hệ thống như thế nào để phục vụ live stream cho các sự kiện lớn như trận đấu chung kết UEFA Champions League với hàng triệu người xem cùng lúc?

Tiếp nhận dữ liệu đáng tin cậy - Reliable ingestion

Các chương trình truyền hình thường giữ mọi thứ trên các đường truyền riêng, thường là hai đường truyền cáp quang độc lập hoặc một đường truyền cáp quang và một đường truyền vệ tinh dự phòng. Để phục vụ các chương trình phát sóng có lượng người xem cao, Facebook tận dụng cơ sở hạ tầng của chương trình truyền hình với bộ mã hoá riêng và được kết nối với các Data Centers của Facebook. Facebook cũng xây dựng cơ chế cho phép chuyển đổi từ luồng dữ liệu chính (main streams) sang luồng phụ một cách tự động hoặc thủ công trong trường hợp có sự cố. Điều này nhằm đảm bảo trải nghiệm người dùng vẫn hoàn hảo.

Truyền tải dữ liệu tới người xem

Ngoài việc tiếp nhận video từ nhà cung cấp một cách liền mạch, Facebook cũng cần giải quyết bài toán phân phối nội dung video đến hàng triệu người xem. Với những sự kiện lớn như giải bóng đá UEFA Champions League, hay các trận cầu siêu kinh điển, số lượng người theo dõi có thể lên đến hàng triệu thậm chí nhiều hơn. Điều này tạo ra một lượng lớn người xem tăng vọt khi Live stream vừa bắt đầu. Facebook đã xây dựng cơ sở hạ tầng mạnh mẽ và liên kết với các nhà mạng (ISP) để đảm bảo hệ thống vẫn hoạt động tốt trong trường hợp phải phục vụ lượng lớn người dùng cùng lúc.

Cho dù đã đạt được những thành công bước đầu, Facebook cũng nhận ra một số vấn đề như việc phân phối qua sóng vô tuyến là một thách thức lớn vì những hạn chế của công nghệ di động. Qua đó họ đang nguyên cứu áp dụng LTE-Broadcast để giải quyết bài toán trên.

JavaScript Best Practices for Readable and Maintainable Code — blog.bitsrc.io

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

- Martin Fowler

Martin Fowler đã nhấn mạnh tầm quan trọng của việc code sao cho người khác có thể hiểu. Một nguyên nhân đơn giản là các sản phần mềm đa số được thiết kế và implement bởi nhiều người, và qua nhiều "thế hệ", người viết code có thể không phải là người maintain. Sau đây là một số best practices được Mahdhi Rezvi liệt kê, tuy bài viết được viết trong ngữ cảnh Javascript nhưng chúng có thể được áp dụng cho bất kì ngôn ngữ nào khác.

Góc Distributed System

Đối với bài toán event messaging, chúng ta cần một hệ thống có đủ high availability, scalability và hỗ trợ nhiều ngôn ngữ cho client-side. Một giải pháp phổ biến hiện nay là sử dụng Kafka. Có bao giờ bạn tự hỏi ngoài Kafka thì còn giải pháp nào khác không ? Đáp án thì có nhiều: RabbitMQ, ActiveMQ, NATS, Apache Pulsar, etc. Trong các giải pháp này, NATS có một số điểm khác biệt:

  • NATS cung cấp cơ chế log-based streaming giúp việc lưu trữ và replay messages dễ dàng; thay cho việc phải cố gắng persist messages.

  • NATS streaming subscribers vẫn có thể nhận được message gửi đi trong thời gian chúng offline thông qua cơ chế buffer.

  • NATS có hệ sinh thái đa dạng về Streaming và clients ở nhiều ngôn ngữ: Go, Python, Ruby, Node.js, Elixir, Java, C và C#, Arduino, Rust, Lua, PHP, Perl.

  • NATS đã được đưa vào incubator-level projects của CNCF, hứa hẹn sẽ được lựa chọn để tích hợp vào rất nhiều giải pháp trong hệ sinh thái của CNCF.

Góc DS tuần này giới thiệu tới các bạn loạt bài viết chi tiết về cách áp dụng NATS ở Choria.io :

  • Series introduction

  • Description of the major messaging patterns supported by NATS

  • Running NATS Server and exploring patterns from the CLI

  • Creating a basic log distribution tool

  • Adding scalability to the log distribution tool

  • Introducing JetStream

  • Interacting with the JetStream API

  • Adjusting the log distribution tool for JetStream

  • Reliable delivery and Acknowledgement Patterns

Góc Database

The Absolute Minimum Everyone Working With Data Absolutely, Positively Must Know About File Types, Encoding, Delimiters, and Data types — theonemanitdepartment.wordpress.com

Bạn đã từng làm việc với data?

Bạn có bao giờ làm việc với tập dữ liệu có nhiều hàng và cột không?

Bạn đã bao giờ gặp phải một trong những vấn đề sau đây:

  • Các ký tự kỳ lạ xuất hiện ở giữa một từ: à © €µ.

  • Các hàng đột nhiên có nhiều hoặc ít cột hơn hoặc các giá trị kết thúc trong cột bị sai.

  • Dữ liệu về ngày hoặc số không được load theo cách bạn mong đợi.

Có một số insight về cách dữ liệu được lưu trữ mà bạn nên biết để giải quyết những vấn đề này. Nếu bạn làm việc với dữ liệu, bài viết này sẽ giúp ích cho bạn khá nhiều:

  • File types – and why CSV files are not Excel files

  • Encoding – and why text does not exist

  • Byte Order Mark – and why text exists

  • Newlines – and why everything is text

  • Delimiters – and why columns don’t exist

  • Data types – and why numbers and dates don’t exist

Bloom Filters by Example — llimllib.github.io

Bloom filter là cấu trúc dữ liệu xác suất (probabilistic data structure), được thiết kế để cho bạn biết một phần tử có trong một tập hợp hay không một cách nhanh chóng và hiệu quả. Nếu kết quả trả về là False thì chắc chắn phần tử sẽ không nằm trong tập xác định. Nhưng vì dựa vào xác suất, nên nếu kết quả trả về là True thì phần tử chưa chắc đã nằm trong tập xác định.

Cấu trúc dữ liệu cơ sở của Bloom Filter là một Bit Vector. Nguyên lý hoạt động của Bloom Filter tương đối đơn giản. Khi một phần tử được thêm vào, giá trị của nó sẽ được hash, lấy một vị trí trong mảng bit và chuyển vị trí này thành 1. Để kiểm tra một phần tử tồn tại trong một tập hơp hay không, Bloom filter sẽ kiểm tra giá trị băm của phần tử và bit tương ứng trong dãy bits đã được chuyển thành 1 hay chưa. Trong bài viết, tác giả sẽ phân tích kĩ hơn về cơ chế của Bloom Filter.

Về mặt ứng dụng, một số database như Google Bigtable, Apache HBase, Apache Cassandra và PostgreSQL sử dụng bộ lọc Bloom để giảm tra cứu đĩa cho các hàng hoặc cột không tồn tại, hoặc để kiểm tra liệu một partition key có nằm trong một partition data hay không. Việc tránh tra cứu ổ đĩa tốn kém sẽ làm tăng đáng kể hiệu suất của hoạt động truy vấn cơ sở dữ liệu.

Code & Tools

  • Các công cụ để xây dựng một bản thiết kế hệ thống

  • Former2, công cụ scan và ghi ra thông tin về hệ thống của bạn

Tin tức khác

GitHub Reinstates Youtube-DL — torrentfreak.com

GitHub đã phục hồi lại repo youtube-dl sau khi kết luận rằng repo này không vi phạm đạo luật bản quyền Digital Millennium Copyright Act.

This week sponsor

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

ChoTot create product 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, such as Airflow, Argo, Data Catalog, Google AI Platform, Google BigQuery, Google Analytics, Superset 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.

  • Backend Software Engineer

  • Principal platform software engineer

Quotes

"Evolution is necessary to meet the challenges of a changing world and to incorporate new ideas."

- Bjarne Stroustrup

Share this post

#148 - Facebook scales hệ thống live stream cho hàng triệu người xem như thế nào?

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