#238 - Làm thế nào để contribute vào mã nguồn Redis?
Trong số này, chúng ta cùng tìm hiểu về:
Nguyên nhân làm chậm Node.js server ở Trivago
Làm thế nào để contribute vào mã nguồn Redis?
Giải quyết vấn đề scaling với Hexagons và Elasticsearch
Lời giải bài Remove Nth Node From End of List
Ngoài ra các bạn vẫn có thể tiếp tục đặt mua ấn phẩm Dijkstra tập 2 tại đây.
News
(by lpv)
The 2022 Founder Salary Report — pilot.com
Bạn nên trả cho chính bạn bao nhiêu?
Microsoft Reportedly Cuts Nearly 1,000 Employees—Here Are The Biggest U.S. Layoffs This Year — www.forbes.com
Forbes tiếp tục theo dõi những đợt layoff lớn nhất tại US trong năm qua. Mới nhất là Microsoft với gần 1000 nhân viên.
Stability AI, the startup behind Stable Diffusion, raises $101M — techcrunch.com
Stability AI, startup đứng đằng sau hệ thống AI chuyển văn bản thành hình ảnh Stable Diffusion đã raise thành công 101 triệu đô và định giá công ty lên hơn 1 tỉ đô.
Những bài viết hay
How to substantially slow down your Node.js server
(by quangle)
Vào tháng 3 năm nay, Trivigo đã nỗ lực chuyển đổi framework cho server NodeJS GraphQL từ Express sang Fastify với mong muốn cải thiện gấp đôi performance của hệ thống trên production. Tuy nhiên điều họ mong muốn đã không xảy ra.
Để giải quyết bài toán performance, đội ngũ kỹ sư tại Trivago đã tiến hành rà soát lại toàn bộ quá trình migrate, thực hiện các bài kiểm tra load test k6 kĩ càng ở môi trường staging nhưng vẫn không phát hiện ra điều gì bất thường. Họ đã rollout một single-pod trên môi trường production, điều hướng một lượng traffic requests và thực hiện live profiling (kiểm tra tốc độ thực thi, dung lượng RAM/memory, CPU usage, …) ngay trên pod này. Bằng việc sử dụng heapdump (một pkg cho phép ghi lại snapshot V8 heap), cuối cùng họ phát hiện nguyên nhân đến từ log redaction đã gây tiêu tốn khá nhiều bộ nhớ của server.
Vậy log redaction là gì? Tại sao issue lại xảy ra trên production mà không phải là môi trường khác như staging? Mời bạn đọc cũng tìm hiểu chi tiết bài viết.
(by zalopay)
Redis (Remote Dictionary Server) là một ứng dụng mã nguồn mở được dùng để lưu trữ dữ liệu có cấu trúc, có thể sử dụng như một database, bộ nhớ cache hay một message broker.
Ở ZaloPay, Redis được sử dụng nhiều trong nhiều thành phần khác nhau của hệ thống, đặc biệt trong việc giải quyết bài toán hotspot account khi xây dựng phần lõi kế toán. Và trong quá trình đánh giá hệ thống thông qua kĩ thuật Chaos Engineering, team Zalopay đã tìm thấy một bug của Redis liên quan một tính năng xử lí vấn đề Split-brain (version < 6.2.7).
Bug fix đã được gửi và sau quá trình xem xét đã được merge và release trong version 7.0 của Redis. Với pull request này đã giúp team zalopay giải quyết được một vấn đề tiềm ẩn có thể dẫn đến mất mát dữ liệu trong điều kiện có lỗi ở hệ thống khi thao tác với Redis cũng như giải quyết được vấn đề tương tự ở một tính năng mới khác của Redis - Redis FUNCTION.
Ở bài viết này tác giả sẽ chia sẻ về quá trình và trải nghiệm trong lần đầu đóng góp vào mã nguồn lớn như Redis. Hy vọng những ghi chú này sẽ có ích cho các bạn độc giả lần đầu đóng góp cho cộng đồng mã nguồn mở.
Taming Content Discovery Scaling Challenges with Hexagons and Elasticsearch
(by steven.do)
Bài viết mô tả những khó khăn thực tế mà đội ngũ kỹ sư tại Doordash gặp phải khi cần phải xử lý nhu cầu tìm kiếm và hiện thị một lượng lớn dữ liệu quảng cáo theo thời gian thực, qua đó đưa ra các gợi ý phù hợp gần vị trí của mỗi người dùng.
Mỗi khi khách hàng có nhu cầu booking sản phảm, hệ thống của Doordash sẽ ngay lập tức tìm kiếm một tập hợp các cửa hàng (bao gồm nhà hàng, cửa hàng tạp hóa, v.v) nằm trong bán kính có thể tiến hành giao hàng và gợi ý ngay các của hàng có thể đáp ứng nhu cầu của khách hàng và thỏa mãn các ràng buộc về khâu hậu cần và vị trí địa lý. Hệ thống Discovery sẽ chịu trách nhiệm thu thập nội dung, gom nhóm và xếp hạng các cửa hàng và thể hiện lên trang chủ. Hệ thống Campaign nội bộ sẽ cố gắng tìm và load các chiến dịch quảng cáo theo từng cửa hàng đáp ứng theo ngữ cảnh của khách hàng.
Thách thức đặt ra với đội ngũ kỹ sư Doordash đó là đối với các địa điểm đông đúc có nhiều cửa hàng kinh doanh, chỉ với 1 request gửi đến hệ thống sẽ phát sinh ra hàng ngàn request khác nhau. Và trong thời điểm lượng truy cập cao, sẽ sinh ra hàng triệu truy vấn mỗi giây đến các hệ thống cơ sở dữ liệu của DoorDash dẫn đế quá tải trên tất cả các hệ thống microservice và hệ thống lưu trữ. Và khi số lượng của hàng càng nhiều cũng như các campaign càng tăng nhanh để làm nổi bật các nội dung quảng cáo phù hợp thì việc duy trì vận hành càng trở nên khó khăn hơn.
Thông qua bài viết, đội ngũ kỹ sư tại Doordash sẽ giới thiệu quá trình research hướng tiếp cận xử lý vấn đề quá tải hệ thống và cách thức áp dụng giải giải pháp H3 kết hợp với Elasticsearch giải quyết các vấn đề mà Doordash đang gặp phải.
Góc Lập Trình
Đề ra tuần này: Masking Personal Information
Cho trước một chuỗi s, đại diện cho địa chỉ email hoặc số điện thoại. Trả lại chuỗi đã được xử lý bằng cách sử dụng các quy tắc dưới đây.
- Để che dấu một email:
+ Các chữ hoa trong tên và miền phải được chuyển thành chữ thường.
+ Các chữ cái giữa của tên (nghĩa là tất cả trừ các chữ cái đầu tiên và cuối cùng) phải được thay thế bằng 5 dấu sao "*****"
.
- Để che một số điện thoại:
+ Loại bỏ tất cả các ký tự phân tách sau {'+', '-', '(', ')', ' '}
+ Số điện thoại được che phải có dạng:
"***-***-XXXX"
nếu mã quốc gia có 0 chữ số.
"+*-***-***-XXXX"
nếu mã quốc gia có 1 chữ số.
"+**-***-***-XXXX"
nếu mã quốc gia có 2 chữ số.
"+***-***-***-XXXX"
nếu mã quốc gia có 3 chữ số.
+ "XXXX" là 4 chữ số cuối cùng của số địa phương.
Ví dụ:
Input: s = "1(234)567-890"
Output: "***-***-7890"
Lời giải đề bài tuần trước: Remove Nth Node From End of List
(by ndaadn)
Đây là một bài toán cơ bản về danh sách liên kết. Thông thường, ta có thể lặp qua toàn bộ danh sách liên kết để đếm tổng số nút của danh sách, sau đó xác định vị trí của phần tử thứ n tính từ nút cuối cùng rồi thực hiện lặp một lần nữa để xóa nút đó.
Tuy nhiên, ta còn có cách giải quyết với chỉ một lần lặp bằng cách sử dụng 2 con trỏ (tạm gọi là con trỏ fast và con trỏ slow) như sau:
Dịch chuyển con trỏ fast n nút về phía trước.
Lần lượt dịch chuyển mỗi con trỏ từng bước một cho đến khi con trỏ fast trỏ vào nút cuối cùng của danh sách liên kết. Lúc này con trỏ slow đang ở vị trí trước vị trí nút cần loại bỏ, từ đó ta chỉ cần gán slow->next = slow -> next -> next là bài toán được giải quyết.
Cài đặt cho cách giải trên như sau: https://pastebin.com/qnGpuZyk
Độ phức tạp thuật toán là O(N).
Code & Tools
k6 - k6 là một công cụ load test được phát triển và open source bởi Grafana Labs. k6 cung cấp các API, tập lệnh rõ ràng, dễ tiếp cận, có thể thực thi cục bộ (local) cũng như trên nền các dịch vụ điện toán đám mây với tùy chỉnh cấu hình linh hoạt cho người dùng.
Feedback
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 là rất quan trọng, sẽ giúp chúng tôi liên tục cải thiện nội dung newsletter tốt hơn)
Grokking mang lại cho các bạn những kiến thức mới mẻ và hữu ích thông qua:
Tech Talk: Là một hoạt động thường xuyên của Grokking từ những ngày đầu thành lập. Tại đây các diễn giả chia sẻ kiến thức xoay quanh Computer Science và Software Engineer. Các buổi Tech Talk đều được record và upload lên kênh youtube của Grokking.
Grokking Knowledge Graph: Tập hợp những nguồn kiến thức phong phú với hơn 1000 bài viết chọn lọc, các đầu sách, khóa học, v.v… Các bài viết đều được gán nhãn để giúp bạn đọc dễ dàng tìm kiếm.
Webinar: Là chương trình kết nối các kỹ sư Việt Nam và các kỹ sư đang làm việc tại các công ty công nghệ hàng đầu thế giới.
Dijkstra: Một ấn phẩm được xuất bản bởi các thành viên của Grokking. Với những bài viết đào sâu vào kỹ thuật và kiến thức khoa học máy tính.
Kipalog: Nền tảng chia sẻ kiến thức dành cho các lập trình viên.
Newsletter: Những bài viết hay về công nghệ sẽ được gửi tới bạn hàng tuần qua email.
Chúc các bạn sẽ tìm được nhiều điều mới mẻ khi đến với Grokking và xin hẹn gặp lại các bạn vào tuần sau.
Quotes
Unix will give you enough rope to shoot yourself in the foot. If you didn’t think rope would do that, you should have read the man page.
— @mhoye