Bài tóm tắt
Tóm tắt bằng lời riêng, luôn dẫn về bài gốc. 979 bài. Đọc miễn phí.
Nguồn dữ liệu danh sách bài viết của blog công ty
Danh sách bài trên trang công ty gồm 10.013 bài. Khoảng 73,6% (7.365 bài) do SWE Wiki thu thập thủ công từ kho lưu trữ blog chính chủ của các công ty, kèm ngày đăng. Phần còn lại lấy từ các danh sách công khai trên GitHub: binhnguyennus/awesome-scalability (667), abhivaikar/howtheytest (551), upgundecha/howtheysre (499), eugeneyan/applied-ml (376), Engineer1999/ML-System-Design-Case-Studies (239), upgundecha/howtheyaws (149) và một số danh sách nhỏ khác. Mọi link luôn dẫn về bài gốc trên blog của tác giả; SWE Wiki không sao chép nội dung bài. Hiện 9.115 bài thuộc 135 công ty có trang wiki riêng và 897 bài thuộc 261 trang danh sách bài viết (công ty chưa có trang wiki); thành viên xem được toàn bộ danh sách. Cảm ơn những người duy trì các danh sách đó.
Prefetch Caching of Items at eBay
Phần lớn traffic vào trang item đến từ trang kết quả tìm kiếm. Những năm trước eBay đã prefetch ảnh item sau khi trang tìm kiếm tải xong. Lần này họ muốn phục vụ cả trang item từ cache khi user bấm vào từ kết quả tìm…
5-year Evolution of Ele.me's Transaction System - Part 2
DB đơn hàng: 1 primary MySQL + 5 secondary + 1 node cho MHA. Không chịu được tải đột biến: nếu phòng kinh doanh không báo trước khuyến mãi thì secondary sập và chỉ còn biết chuyển qua lại giữa các DB.
5-year Evolution of Ele.me's Transaction System - Part 3
Team giao dịch chưa từng có kỹ sư test; mọi thứ do R&D tự test bằng tay. Team framework cho rằng kỹ sư phải tự bảo đảm chất lượng. Tác giả thấy vậy là quá lý tưởng, nên chia vai: R&D chịu trách nhiệm chất lượng code, kỹ…
5-year Evolution of Ele.me's Transaction System - Part 4
Sau khi shard (đầu 2016), nút cổ chai dời từ DB sang Redis (khoảng 6/2016). Twemproxy và Codis gặp nhiều vấn đề, nên Ele.me tự viết proxy Redis corvus có đủ metric (bộ nhớ, kết nối, hit rate, số key). Code dùng Redis…
5-year Evolution of Ele.me's Transaction System - Part 5
Incident RabbitMQ: test hiệu năng cho thấy throughput ổn, nhưng thực tế CPU cao tới mức kích hoạt cơ chế tự bảo vệ của RabbitMQ, chặn producer. Gốc nằm ở client RabbitMQ do một phòng khác tự đóng gói, dùng sai chế độ…
5-year Evolution of Ele.me's Transaction System - Part 6
Tách giao dịch thuận và nghịch (giữa 2016): giao dịch nghịch (hoàn, huỷ, khiếu nại) chỉ chiếm khoảng 1% đơn nhưng logic phân nhánh phức tạp hơn nhiều. Giao dịch thuận cần hiệu năng, đồng thời, ổn định. Hai bên khác nhau…
5-year Evolution of Ele.me's Transaction System - Part 1
2012: Zeus là một ứng dụng Python gom các module lõi (đơn hàng, user, nhà hàng) trong một repo, chạy trên cùng máy. Module đơn hàng EOS (Ele.me Order Service) có commit đầu tiên ngày 1/9/2012.
Autoscaling in Kubernetes: Why doesn't the Horizontal Pod Autoscaler work for me?
Chủ ứng dụng ở Expedia bật HPA theo tài liệu (ví dụ: scale khi CPU trung bình quá 80%) rồi thấy nó "không chạy". Series đặt bốn tiêu chí cho autoscaling: reliability, efficiency, responsiveness, resilience; bài này chỉ…
Inside Figma: a case study on strict null checks
Figma dùng TypeScript từ trước bản 2.0 (khi strictNullChecks ra đời); code mới vẫn không nhất thiết qua được cờ này. Bật cờ trên frontend khoảng 1.162 file sinh hơn 4.000 lỗi, sửa một lỗi thường lộ thêm lỗi khác.
Fly Behind The Scenes: Fresh Logging
Fly.io gom log của mọi app trên nền tảng (flyctl logs). Hệ cũ là 7 server Graylog lớn tập trung; với 20.000–30.000 log/giây, có lúc trong ngày không xử lý kịp và log bị rơi. Log tới user bằng cách poll API của Graylog.
From 48k lines of code to 10: the story of GitHub's JavaScript SDK
@octokit/rest khởi đầu là package cộng đồng github (commit đầu 6/2010, thời Node v0.1). Năm 2017 GitHub nhận nó làm SDK chính thức cho REST API, chạy cả Node lẫn trình duyệt; lúc đó khoảng 16.000 dòng, lõi là…
How we scaled async workload processing at GitLab.com using Sidekiq
GitLab (Rails) xử lý việc nền bằng Sidekiq trên Redis. Lịch sử: 2013 mỗi worker class một queue, không ai quản; 2016 gom theo tính năng; 2017 lại mỗi worker class một queue, gom thành nhóm realtime, asap, besteffort để…
How we built Status Page
Incident của GitLab.com được xử lý trong issue của một project công khai; người trực tự đăng cập nhật lên status.gitlab.com mỗi 15 phút. Người xử lý mất thời gian đổi công cụ và chép lại thông tin.
How we optimized infrastructure spend at GitLab
GitLab.com chạy trên GCP. Họ muốn kiểm soát chi phí cloud mà vẫn ra tính năng, theo hướng dữ liệu: mục tiêu là mọi thay đổi chi phí đều được hiểu, không còn bất ngờ.
Fear-free PostgreSQL migrations for Rails
Postgres là database mặc định của GoCardless, đứng sau monolith API chính (Rails). Schema đổi qua migration của Rails.
Incident review: Service outage on 25 October 2020
GoCardless quản lý secret bằng HashiCorp Vault chạy trên Kubernetes: kỹ sư tự ghi secret (không đọc được), ứng dụng chỉ đọc secret của chính nó theo service account. Vault là phụ thuộc của gần như mọi service production.
How We Monitor Apache Airflow in Production
Đội Data Engineering của Gojek chạy hơn một nghìn pipeline trên Airflow (2020). Ngoài scheduler, webserver, worker, executor, họ có thêm tiến trình riêng: sync DAG từ GCS/git, sync biến Airflow tuỳ biến. Theo họ, càng…
How We Upgrade Kubernetes on GKE
Kubernetes ra một bản minor mỗi quý; team Engineering Platform của Gojek phải theo kịp trên nhiều cluster GKE.
Three months, 30x demand: How we scaled Google Meet during COVID-19
Từ 17/2/2020, SRE của Meet nhận page về năng lực theo region (alert kiểu triệu chứng: "quá nhiều task lỗi", "cắt tải quá nhiều"), bắt đầu ở châu Á rồi Ý. Dùng lượng tăng 30 lần trong khoảng ba tháng; lúc kết thúc có hơn…
Journey from EC2 to Containers
Đỉnh user đồng thời: ~4,7 triệu (2017), ~10,3 triệu (IPL 2018).
GoCD on Kubernetes
Mục tiêu của Platform Team ở Hotstar: tự động hoá mọi bước can thiệp tay trong deploy, từ lúc merge vào trunk tới production. Muốn vậy, không chỉ code mà cả script deploy, hạ tầng, cấu hình ứng dụng đều phải được…
Infrastructure Security as a product for Hotstar
Engineer Hotstar tự vận hành thứ mình xây, deploy qua AWS Console, manifest Kubernetes hay Terraform. Đội security mới lập được vài tháng (cuối 2019), trước mùa cricket lớn.
Creating a Logical Replica from a Snapshot in RDS Postgres
Instacart cần bật mã hoá at-rest cho các DB RDS Postgres có sẵn (cỡ vài TB). Quy trình AWS khuyên: tắt DB, snapshot, mã hoá snapshot, restore: nhiều giờ downtime, trong khi cửa sổ trống chỉ khoảng 2 giờ (giữa chuyến…
Memory allocator showdown
OCaml 4.10 thêm allocator best-fit bên cạnh allocator mặc định next-fit. Jane Street chuyển sang best-fit và thấy cải thiện lớn, nhưng bài kể cái khó là chứng minh điều đó.