Revue, một nền tảng mà Grokking Newsletter sử dụng để soạn newsletter trong 5 năm qua sẽ chính thức đóng cửa trong tháng 1 sắp tới. Revue vốn được mua lại bởi Twitter vào đầu năm 2021. Việc đóng cửa Revue khiến team Grokking sẽ chính thức chuyển qua nền tảng mới, Substack. Với Substack các bạn có thể comment thảo luận nội dung trực tiếp ngay trên từng số newsletter. Một số tính năng khác như nhúng poll, donate cũng có thể triển khai dễ dàng hơn. Các bạn thử vote trên poll này xem trông như nào nhé.
📰Top 5 bài viết được đọc nhiều nhất năm 2022
Chỉ còn vài ngày nữa chúng ta sẽ bước qua năm mới 2023. Cùng điểm qua những bài viết được đọc nhiều nhất trên Grokking Newsletter trong năm 2022 nhé.
Build an Event-Driven Architecture with Apache Kafka, Apache Spark, and Apache Cassandra
How Google, Twitter, and Spotify built a culture of documentation
📻News
(by lpv)
Stack Overflow: 74% of developers are open to new jobs
Nghiên cứu từ Stack Overflow cho thấy rằng gần 3/4 (74%) lập trình viên sẵn sàng nhận công việc mới.
Cái gọi là “Sự từ chức vĩ đại” là một xu hướng kinh tế đang diễn ra sau đại dịch, trong đó nhân viên tự nguyện từ chức vì lương bị đình trệ, đối xử tệ, chính sách làm việc từ xa không linh hoạt, thiếu phúc lợi và không hài lòng với công việc.
Linux 6.1 Officially Adds Support for Rust in the Kernel
Sau hơn hai năm phát triển, hỗ trợ trong việc sử dụng Rust để phát triển kernel, nay Rust đã có mặt trong bản phát hành stable mới nhất, Linux 6.1.
📰Những bài viết hay
Reducing Logging Cost by Two Orders of Magnitude using CLP
(by steven)
Tại Uber, tại mọi cấp bậc mọi quyết định dều dựa trên dữ liệu. Để làm được điều này, Uber đã xây dựng một nền tảng dữ liệu big data với quy mô lớn có thể chạy hơn 250.000 các Spark job phục vụ cho công việc phân tích mỗi ngày, với mỗi job có thể bao gồm hàng trăm nghìn executor, chịu trách nhiệm xử lý hơn hàng trăm petabyte dữ liệu phân tích. Ngoài ra, nền tảng big data cũng sinh ra một lượng lớn dữ liệu log, và cùng với sự phát triển các hoạt động nghiệp vụ tại Uber đã dẫn đến sự gia tăng nhanh chóng các dữ liệu log.
Các dữ liệu logs phát sinh này đều quan trọng với cả các platform engineer và data scientist sử dụng Spark. Thông qua việc phân tích các logs, có thể giúp họ cải thiện chất lượng của ứng dụng, hoặc khắc phục sự cố hay tăng tốc xử lý, phân tích xu hướng, theo dõi các bất thường... Và vì vậy dữ liệu logs thường được yêu cầu lưu trữ tối thiểu từ 03 ngày cho đến ít nhất là một tháng.
Nếu tăng thời gian lưu trữ lên một tháng, chỉ tính riêng chi phí lưu trữ trên HDFS với quy mô dữ liệu lưu trữ đã nêu trên, chi phí đã lên đến hàng triệu đô mỗi năm. Các kỹ sư Uber đã có một vài hướng xử lý vấn đề lưu trữ, như các log không liên quan đến Spark thì được ingest và lưu trữ vào ClickHouse. Tuy nhiên ClickHouse chỉ phù hợp với dữ liệu log có cấu trúc (trong khi Spark log thì hầu như là không có cấu trúc). Và Spark log cũng gặp vấn đề về chi phí lưu trữ nếu như ingest vào ClickHouse, vì một Spark log cần lưu trữ trong một tháng sẽ chiếm dung lượng gấp đôi so với tất cả các service khác cộng lại.
Để giải quyết vấn đề lưu trữ về lâu dài này, các kỹ sư tại Uber đã quyết định nghiên cứu một chức năng nén trong thư viện logging (giúp giảm việc ghi dữ liệu vào SSD) và họ đã tìm thấy CLP (Compressed Log Processor). CLP là một công cụ có khả năng nén cao gấp đôi các công cụ khác, trong khi vẫn cho phép tìm kiếm log mà không cần phải giải nén hoàn toàn dữ liệu.
From Zero to 50 Million Uploads per Day: Scaling Media at Canva
(by quangle)
Được xây dựng từ năm 2013, đến nay Canva đã có hơn 100 triệu người dùng hoạt động hàng tháng và có thể phục vụ cho 50 triệu lượt upload mới mỗi ngày. Để hỗ trợ sự phát triển nhanh chóng này, đội ngũ kỹ sư đã liên tục phát triển, tối ưu media-service (một service quản lý các thao tác và trạng thái của tài nguyên media như: ID, thông tin hình ảnh, content, .v.v..). Tương tự các service trước đó, hệ thống của Canva hầu hết sử dụng MySQL lưu trữ trên AWS RDS với khả năng mở rộng theo chiều ngang, nhưng rồi những hạn chế bắt đầu phát sinh khi dữ liệu ngày càng nhiều:
Giới hạn về replication rate của MySQL 5.6
Chạm ngưỡng giới hạn của disk EBS của RDS MySQL (16TB)
I/O latency tăng cao ảnh hưởng đến requests của users
Traffic từ production buộc phải dùng đến hot buffer pool, làm cho các instances bị restart
Vậy nhóm phát triển của Canva làm cách nào để giải quyết được những thử thách trên, mời bạn đọc cùng tham khảo bài viết
10 bài viết hay trong 2022 của GitLab
(by lpv)
Những bài viết được đọc nhiều nhất từ blog của GitLab trong năm 2022:
👨💻Góc lập trình
(by ndaadn and phucnh)
Đề ra tuần này: Odd Even Linked List
Cho một danh sách liên kết đơn (singly linked list), hãy nhóm những nút có chỉ số lẻ theo sau là những nút có chỉ số chẵn.
Lưu ý: nút đầu tiên có chỉ số là 1
Ví dụ:
Input: 1 → 2 → 3 → 4 → 5
Output: 1 → 3 → 5 → 2 → 4
Lời giải tuần trước: Lowest Common Ancestor of a Binary Tree II
Theo định nghĩa của đề bài, một nút là nút tổ tiên chung gần nhất khi và chỉ khi thoả mãn 1 trong 2 điều kiện sau:
- Nếu nút hiện tại không phải là p hoặc q, và p, q nằm ở 2 cây con của nút hiện tại
- Nếu nút hiện tại là p (hoặc q), và một trong 2 cây con của nút hiện tại chứa nút còn lại
Quan sát trên cho ta giải thuật dựa trên phương pháp duyệt sau (post-order traversal):
class Solution {
TreeNode lca;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
lca = null;
doesRootCoverAtLeastANode(root, p, q);
return lca;
}
private boolean doesRootCoverAtLeastANode(TreeNode root, TreeNode p, TreeNode q) {
if (root == null) {
return false;
}
int oneNodeIsInLeft = doesRootCoverAtLeastANode(root.left, p, q) ? 1 : 0;
int oneNodeIsInRight = doesRootCoverAtLeastANode(root.right, p, q) ? 1 : 0;
int oneNodeIsRoot = root == p || root == q ? 1 : 0;
// if two of the three conditions are true, the current node is the lowest common ancestor
if (oneNodeIsInLeft + oneNodeIsInRight + oneNodeIsRoot >= 2) {
lca = root;
return true;
}
return oneNodeIsInLeft + oneNodeIsInRight + oneNodeIsRoot > 0;
}
}
Giải thuật có độ phức tạp về thời gian là O(n) với n là số nút của cây, độ phức tạp về không gian là O(h) với h là chiều cao của cây.
History
(by lpv)
Xin chúc mừng sinh nhật Linus Torvalds (28/12/1969). Một người đã quá nổi tiếng trong lĩnh vực của chúng ta, nên xin mời các bạn cùng nghe những chia sẻ của ông từ một cuộc phỏng vấn tại Ted: "I am not a visionary, I'm an engineer, I'm perfectly happy with all the people who are walking around and just staring at the clouds ... but I'm looking at the ground, and I want to fix the pothole that's right in front of me before I fall in”.
Video buổi phỏng vấn: The mind behind linux
🛠️Code & Tools
Linux for pirates: A book writing about Linux.
Sonic: A blazingly fast JSON serializing & deserializing library.
Quotes
Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning.