#209 - Uber's Big Data Platform: 100+ Petabytes dữ liệu
Trong số này, chúng ta cùng tìm hiểu về:
Cách Wayfair xây dựng hệ thống ML cho marketing;
Cách Twitter sử dụng NLP để truy vấn dữ liệu nội bộ;
Quá trình Uber thiết kế hệ thống Big Data;
Lời giải bài toán "Find K-th Smallest Pair Distance";
Grokking Techtalk #44 về chủ đề "Kỹ năng Giải quyết Vấn đề".
Những bài viết hay
Building Scalable and Performant Marketing ML Systems at Wayfair
Để tăng hiệu quả marketing, các công ty thương mại điện tử có thể áp dụng Machine Learning (học máy) nhằm tối ưu hoá việc hiển thị quảng cáo cho khách hàng.
Có hai phương án phổ biến là xây dựng mô hình tổng quát hoặc mô hình đặc thù, đều sử dụng Supervised Machine Learning để hiểu về khách hàng qua lịch sử dữ liệu. Tuy nhiên, những mô hình kiểu này không thể cung cấp cho ta một phương án tổng thể để tối ưu hoá chiến dịch marketing đa kênh. Hơn nữa, nếu chỉ hiển thị lặp đi lặp lại một mẩu quảng cáo được cho là tốt nhất, khách hàng có thể sẽ thấy nhàm chán, dẫn tới làm giảm hiệu quả của chiến dịch.
Để giải quyết các vấn đề này, công ty Wayfair đã phát triển một nền tảng Machine Learning đa tầng. Nhiệm vụ của hệ thống này là tối ưu hoá các reward gộp từ nhiều chiến dịch marketing. Ví dụ: nền tảng Paid Media ML (WayLift) sử dụng Reinforcement Learning để cân bằng giữa việc khai thác mẩu quảng cáo tốt nhất với việc thử nghiệm các mẩu quảng cáo thay thế.
Nền tảng Machine Learning của Wayfair được cấu thành bởi ba tầng:
Customer Scoring là một nhóm các mô hình xu hướng (propensity model), cung cấp kiến thức cơ bản về khách hàng. Mỗi mô hình sẽ được train trên tập dữ liệu quan sát (observational data) để hiểu khách hàng quan tâm loại sản phẩm nào, mức giá họ thấy phù hợp, và để biết được họ đang ở trong giai đoạn nào trong chu trình mua sắm. Sau đó, kết quả sẽ được truyền vào tầng Decision Optimization.
Decision Optimization là một tập hợp nhiều quy luật và/hoặc mô hình học máy để tối ưu hoá các quyết định hiển thị quảng cáo.
Feedback Generation là một nhóm nhiều mô hình dự đoán (forecasting model) để phản hồi cho các mô hình ở tầng Decision Optimization. Mỗi mô hình sẽ sớm dự đoán ảnh hưởng tài chính dài hạn dựa trên các chỉ số tương tác ngắn hạn. Ví dụ: mô hình dự báo business KPI (60-day GRS) dựa trên các chỉ số ngắn hạn như lượt click, lượt xem trang; hoặc mô hình dự đoán thay đổi của customer lifetime value (CLV) dựa trên lượt tải ứng dựng và lượt đăng ký dịch vụ.
Mời các bạn đọc bài viết gốc để có thêm thông tin chi tiết cùng hình ảnh minh họa.
(by philong)
Next generation data insights using natural language queries
Theo thống kê, Twitter cần xử lý khoảng 400 tỷ event trong thời gian thực và tạo ra dữ liệu có quy mô lên tới hàng petabyte (PB) mỗi ngày. Vì vậy các bài toán về dữ liệu ở đây rất đa dạng, tiêu biểu như xử lý dữ liệu, lưu trữ và sử dụng dữ liệu.
Một trong những bài toán khó mà Twitter đang giải quyết là việc làm sao để thu thập thông tin chi tiết kịp thời, có ý nghĩa. Vấn đề này phát sinh khi các kỹ sư và analyst ở Twitter liên tục phải xử lý từ backroom mỗi khi có yêu cầu dữ liệu cần sử dụng.
Việc này làm giảm giá trị thời gian của dữ liệu, như vậy sẽ rất khó để đưa ra những quyết định dựa trên dữ liệu một cách nhanh chóng.
Bên cạnh đó, các kỹ sư và analyst cũng phải liên tục phát triển và bảo trì các trang dashboard/report do nhu cầu kinh doanh ngày càng phát triển.
Vì những công cụ hiện tại không thể dự đoán và chủ động đưa ra insight từ khối dữ liệu khổng lồ, nên các câu hỏi đều xuất phát từ chính các nhân viên thay vì được cả con người lẫn nền tảng đề xuất.
Để giải quyết vấn đề này, đội ngũ kỹ sư Twitter đã xây dựng một sản phẩm nội bộ có tên Qurious, cho phép nhân viên trong công ty truy vấn bằng ngôn ngữ tự nhiên (tiếng Anh). Ngay sau đó, họ sẽ nhận được câu trả lời với thông tin chi tiết trong thời gian thực mà không cần tạo bất kỳ một trang dashboard hay report nào cả. Dự án này bao gồm ứng dụng web và chatbot Slack, cả hai đều được tích hợp với các API BigQuery và Data QnA. Công cụ này thực sự "dân chủ hóa" quyền truy cập dữ liệu cho tất cả người dùng trong công ty, bất kể mức độ hiểu biết về dữ liệu của họ.
Dự án này ở Twitter có thể là tương lai của một thế giới "No-SQL". Để đọc chi tiết, các bạn có thể truy cập đường dẫn sau.
(by hungngph)
Uber's Big Data Platform: 100+ Petabytes with Minute Latency
Uber là một nhà cung cấp dịch vụ vận chuyển phạm vi toàn cầu. Theo thời gian, họ có hơn 100 petabyte dữ liệu phân tích cần được lưu trữ và cung cấp thông qua nền tảng dữ liệu lớn (big data) dựa trên Apache Hadoop. Bài viết này mô tả lại hành trình xây dựng nền tảng Hadoop của Uber và thảo luận về những gì đang được xây dựng tiếp theo để mở rộng hệ sinh thái phức tạp và phong phú này.
Giai đoạn 1: Sự khởi đầu của dữ liệu lớn tại Uber
Trước năm 2014, dữ liệu của họ được lưu trữ trong các cơ sở dữ liệu truyền thống (MySQL và PostgreSQL). Để sử dụng các cơ sở dữ liệu này, các kỹ sư phải truy cập từng cơ sở dữ liệu hoặc bảng một cách độc lập và viết mã của riêng nếu họ cần kết hợp dữ liệu từ các cơ sở dữ liệu khác nhau. Vào thời điểm đó, họ chưa có một cơ sở dữ liệu tập trung để phục vụ cho việc phân tích tất cả dữ liệu được lưu trữ của mình. Trên thực tế, dữ liệu của họ nằm rải rác trên các cơ sở dữ liệu OLTP khác nhau, tổng kích thước dữ liệu khoảng vài terabyte và độ trễ để truy cập dữ liệu này là rất cao (thường là vài phút).
Do việc kinh doanh của Uber phát triển nhanh chóng, lượng dữ liệu cũng tăng lên đặt ra yêu cầu cho họ phải xây dựng một kho dữ liệu tập trung. Điều này cũng giúp hình thành thế hệ đầu tiên của kho dữ liệu lớn tại Uber.
Kho dữ liệu này tập trung vào việc tổng hợp tất cả dữ liệu của Uber vào một nơi cũng như hợp lý hóa việc truy cập dữ liệu. Họ quyết định sử dụng Vertica làm phần mềm quản lý dữ liệu của mình do các ưu điểm như thiết kế lưu trữ dữ liệu dạng cột, khả năng mở rộng và tốc độ nhanh.
Giai đoạn 2: Sự xuất hiện của Hadoop
Thế hệ đầu tiên có một số hạn chế đó là dữ liệu thiếu sự nhất quán và khả năng mở rộng còn hạn chế. Để giải quyết những hạn chế này, họ đã tái cấu trúc nền tảng dữ liệu lớn của mình xung quanh hệ sinh thái Hadoop. Cụ thể hơn, họ đã xây dựng một kho dữ liệu Hadoop nơi tất cả dữ liệu thô được trích xuất từ các kho dữ liệu trực tuyến khác nhau một lần duy nhất và không có biến đổi trong quá trình trích xuất.
Để truy cập dữ liệu trong Hadoop, họ sử dụng Presto cho các truy vấn trực tiếp, Apache Spark để hỗ trợ truy cập vào dữ liệu thô (ở cả định dạng SQL và không phải SQL) và Apache Hive để phục vụ cho các truy vấn lớn. Họ cũng tận dụng định dạng File dạng cột tiêu chuẩn của Apache Parquet để giảm dung lượng lưu trữ nhờ tỷ lệ nén được cải thiện.
Giai đoạn 3: Xây dựng lại nền tảng dữ liệu lớn cho mục tiêu dài hạn
Vào đầu năm 2017, nền tảng dữ liệu lớn của họ đã được các team trong toàn công ty sử dụng. Người dùng có thể dễ dàng truy cập dữ liệu trong Hive, Presto, Spark, Vertica, Notebook, ... thông qua một cổng giao diện người dùng duy nhất. Với hơn 100 petabyte dữ liệu trong HDFS, 100.000 vcores trong cụm máy chủ, 100.000 truy vấn Presto mỗi ngày, 10.000 công việc Spark mỗi ngày và 20.000 truy vấn Hive mỗi ngày, kiến trúc Hadoop của họ bắt đầu đạt mức giới hạn về khả năng mở rộng và nhiều dịch vụ bắt đầu bị ảnh hưởng bởi độ trễ dữ liệu.
Uber đã bắt đầu nghiên cứu để xây dựng thế hệ kho dữ liệu lớn tiếp theo. Họ tập trung vào bốn yêu cầu sau:
Khả năng mở rộng của HDFS
Truy cập dữ liệu nhanh hơn trong Hadoop
Hỗ trợ thao tác cập nhật và xóa trong Hadoop và Parquet
ETL và mô hình hóa nhanh hơn
Dựa vào 4 yêu cầu nêu trên, họ đã xây dựng Hudi, một thư viện mã nguồn mở của Spark. Hudi được xây dựng dựa trên HDFS và Parquet để hỗ trợ cho thao tác cập nhật và xóa. Sử dụng thư viện Hudi đã cho phép họ giảm độ trễ truy xuất dữ liệu từ 24 giờ xuống dưới một giờ.
Bài viết còn trình bày những mục tiêu đặt ra để xây dựng thế hệ dữ liệu thứ 4 tiếp theo của Uber. Mời các bạn đọc bài viết gốc để tìm hiểu sâu hơn về nội dung này.
(by ndaadn)
Góc Lập Trình
Đề tuần này: Sliding Window Maximum https://leetcode.com/problems/sliding-window-maximum/
Lời giải đề bài tuần trước:
Đề bài: Find K-th Smallest Pair Distance
Lời giải:
Đề bài yêu cầu tìm cặp thứ kth có khoảng cách giữa 2 số là nhỏ nhất trong tất cả các cặp tạo được bởi mảng đầu vào nums
. Với những bài yêu cầu tìm kth lớn nhất, hoặc nhỏ nhất, ta có thể nghĩ ngay tới các hướng tiếp cận như sử dụng giải thuật sắp xếp, cấu trúc dữ liệu heap, hoặc giải thuật quick select... Những hướng tiếp cận này thường cho ta lời giải tối ưu với những bài cho biết trước “đối tượng tìm kiếm". Ví dụ như những bài sau:
Tuy nhiên, trong bài này để áp dụng những hướng tiếp cận trên, ta phải tạo tất cả các cặp từ mảng đầu vào. Gọi độ dài của mảng là n
, ta có n * (n - 1) / 2
cặp. Vì vậy, độ phức tạp time complexity và space complexity tốt nhất mà ta có được sẽ là O(n^2)
.
Để tối ưu bài này, ta cần quan sát kỹ hơn vào dữ kiện “khoảng cách giữa 2 số trong cặp". Nếu ta có thể tạo được m
cặp với khoảng cách ≤ D
, vậy với minD
là khoảng cách nhỏ nhất sao cho m >= k
, minD
chính là kết quả mà ta cần tìm. Không gian tìm kiếm của D
là khoảng [0 ... max(nums) - min(nums)] tăng dần, vì vậy ta có thể áp dụng binary search như sau: https://pastebin.com/73X6CQ24
Việc đếm số cặp có khoảng cách ≤ mid có độ phức tạp time complexity là O(n), vì vậy tổng time complexity là O(n * logD) với D là khoảng cách lớn nhất giữa 2 số trong mảng đầu vào.
(by phucnh)
Tech Talks
Grokking Techtalk #44: Problem Solving skills for Software Engineers
Bạn nghĩ khả năng giải quyết vấn đề của bạn tốt đến đâu? Làm sao bạn đo được chuyện đó?
Giải quyết vấn đề (Problem Solving) là một trong những kỹ năng hàng đầu mà bất kỳ kĩ sư nào cũng cần, và hầu như nhà tuyển dụng nào cũng ghi trong JD của họ. Tuy nhiên khi đi sâu vào, thì ta có thể thấy có những câu hỏi mà ít có câu trả lời hơn: Làm sao đánh giá problem solving skills? Đâu là những phương pháp quy củ để tiếp cận vấn đề?
Đến với Grokking Techtalk #44: Problem Solving lần này, bạn sẽ được giới thiệu một cách bài bản về tư duy giải quyết vấn đề cho software engineers!
Nội dung bài talk:
Problem là gì? Một cái nhìn/định nghĩa hữu ích hơn về Problem
Problem Space và Solution Space
Cách phân tích vấn đề theo các tầng “abstraction ladder” khác nhau.
Cách suy luận để tìm solutions. Các loại tradeoffs khác nhau.
Các ví dụ thực tiễn về problem solving cho software engineers.
Ngôn ngữ: Tiếng Việt
Speaker:
Đinh Khắc Thành - Cofounder & Chief Architect @ Holistics.
Anh Thành hiện đang làm việc tại Holistics Software với vai trò Co-founder và Chief Engineer.
Thông tin sự kiện:
📅 Thời gian: 09:00 - 11:00 Thứ 7, 26/02/2022
🏬 Địa điểm: Online qua Zoom & Livestream on Youtube Grokking Vietnam
🎆 Link đăng ký cho sự kiện: https://forms.gle/9aC1iR4XdtUboQUy5
Lưu ý:
Các bạn đăng ký sẽ nhận invitation thông qua Google Calendar, các bạn accept để nhận được thông báo sự kiện
Link Zoom tham dự event sẽ được gửi thông qua Google Calendar, 100 bạn tham gia đầu tiên sẽ join được Zoom
Các bạn không join được Zoom vui lòng xem qua livestream được phát trên kênh youtube Grokking Vietnam
Code & Tools
Behat - một framework kiểm thử dựa trên phương thức Behavior-Driven Development sử dụng ngôn ngữ PHP
Mermaid - một thư viện tạo diagram và flowchart từ text
Góc Sponsors
Fossil Việt Nam, tiền thân là Misfit, giữ vị thế là Trung tâm Nghiên cứu và Phát triển Công nghệ Thiết bị đeo thông minh trực thuộc Fossil Group. Từ những ngày đầu thành lập, đội ngũ kỹ sư Việt đã thiết kế và xây dựng hệ sinh thái thiết bị đeo thông minh phục vụ cuộc sống của hàng triệu người toàn cầu. Chúng tôi tự hào là những nhà đổi mới luôn bứt phá giới hạn của công nghệ và thời trang, tập trung phát triển 3 nhóm sản phẩm chủ lực: thiết bị, ứng dụng, và dữ liệu trên đám mây.
ĐIỀU FOSSIL TỰ TIN MANG ĐẾN CHO BẠN?
Tham gia nghiên cứu và phát triển Thiết bị đeo thông minh hàng triệu người dùng trên toàn thế giới. Với Fossil, mỗi việc bạn làm đều có thể mang lại thay đổi cho cuộc sống của rất nhiều người.
Lộ trình nghề nghiệp đa dạng, bất kể bạn muốn quản lý đội ngũ hay tập trung phát triển chuyên môn kỹ thuật.
Cơ hội làm việc và học hỏi từ các kỹ sư Google, Qualcomm, Citizen, v.v.
Bảo hiểm sức khỏe cao cấp, thu nhập và phúc lợi cạnh tranh mang đến trải nghiệm làm việc toàn diện nhất.
Môi trường làm việc linh hoạt để bạn thỏa sức học hỏi, phát triển và tạo ra tác động tích cực!
Fossil Việt Nam đang mở ra cơ hội với hàng loạt vị trí hấp dẫn (Cloud Engineer, Android Engineer, Software Architect), mời bạn tham khảo chi tiết công việc tại ĐÂY.
Kết nối với Fossil Việt Nam
Email tuyển dụng: people@fossil.com
Linkedin: https://www.linkedin.com/company/fossilvietnamcareers
Quotes
You are not reading this book because a teacher assigned it to you, you are reading it because you have a desire to learn, and wanting to learn is the biggest advantage you can have.
― Cory Althoff, The Self-Taught Programmer: The Definitive Guide to Programming Professionally
---------------------------------------------------------------------------
Bạn đánh giá nội dung số newsletter này thế nào?
(1 = Rất tệ / 5 = Rất tốt)
(Việc đánh giá của các bạn sẽ giúp chúng tôi cải thiện nội dung newsletter tốt hơn.)