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. 625 bài (đã lọc). Đọ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 đó.
Dynein: Building a Distributed Delayed Job Queueing System
Job nền ở Airbnb gồm cả job hẹn giờ xa (nhắc check-in trước nhiều tháng, thậm chí nhiều năm). Yêu cầu: at-least-once, scale ngang, cô lập theo service, p95 lệch giờ dưới 10 giây, ack từng message, dead letter queue, mỗi…
Avoiding Double Payments in a Distributed Payments System
Airbnb chuyển sang SOA; một API thanh toán gọi xuống nhiều service, mỗi service đổi trạng thái và có tác dụng phụ: thực chất là một transaction phân tán, trong khi request network chắc chắn có lúc timeout.
A Decade of Evolution of Alibaba's Databases - Part 2
2016, giám sát: hệ giám sát DB thành nút cổ chai khi số DB tăng: độ chi tiết chỉ 1 phút, sau tối ưu mới được 10 giây. Bộ phận bảo mật lại đòi thu toàn bộ câu SQL để phân tích realtime. Họ dựng lại cả hệ giám sát (giám…
A Decade of Evolution of Alibaba's Databases - Part 1
Double 11 tạo ra một đỉnh tải cực lớn đúng 00:00, và chính đỉnh đó định hướng công nghệ database của Alibaba suốt một thập kỷ.
Chaos Testing a Distributed System with Jepsen
Data store của Appian (nền tảng low-code) chọn Consistency khi phải đánh đổi theo CAP và cam kết linearizability: ghi xong thì mọi lần đọc bắt đầu sau đó phải thấy giá trị đó hoặc mới hơn; cộng read-your-own-writes,…
Chaos Testing a Distributed System with Jepsen — Part II
Sau khi chọn Jepsen, việc khó là đưa nó vào hạ tầng thật: hệ cần test (SUT) phụ thuộc Kafka và Zookeeper, binary và thư viện nằm trong kho nội bộ có xác thực, và test phải chạy liên tục chứ không chỉ trên máy dev.
Analysis of recent downtime & what we're doing to prevent future incidents
Đa số dữ liệu người dùng của Asana đã shard, nhưng một phần mô hình dữ liệu dùng chung cho mọi team/workspace của user nằm trong một database dùng chung (MySQL trên RDS, cấu hình HA).
Using an event-driven architecture to improve Jira Software responsiveness
Board của Next-Gen Jira Software poll mỗi phút để lấy dữ liệu mới. Hậu quả: người khác sửa issue thì phải chờ khoảng một phút mới thấy, và phần lớn request là thừa vì không có gì đổi.
Our not-so-magic journey scaling low latency, multi-region services on AWS
Atlassian "all in" trên AWS từ 2016; nhiều service phải viết lại cho stateless.
Basecamp 2 and Basecamp 3 search outage report
Basecamp 2 và tính năng search của Basecamp 3 phụ thuộc vào các kết nối network tới một nhà cung cấp cloud.
How Reliability and Product Teams Collaborate at Booking.com
2019: hơn 1,5 triệu đêm phòng/ngày, 50.000+ server vật lý ở 4 data center và 6 PoP. Quy mô đủ để có team reliability riêng cho từng nền tảng lớn.
A monolithic architecture for our clients' hundreds of versions: how we write and support tests
Backend Badoo là monolith PHP 12 năm tuổi, khởi đầu không có test. Backend developer viết tính năng và đưa lên production trước mọi client (app mobile, site), bọc bằng feature flag hoặc A/B test; client phát hành sau…
Using Rust to Scale Elixir for 11 Million Concurrent Users
Discord đổi cách cập nhật Member List: chỉ gửi thay đổi của phần danh sách đang hiển thị thay vì mọi thành viên, đỡ bandwidth và pin cho client.
Enhancing Bandaid load balancing with real-time backend server load information
Request của user qua GSLB (DNS) tới hơn 20 PoP, qua L4 rồi edge proxy L7, vào data center thì Bandaid định tuyến tới service. Bandaid đang dùng random N choices (N = 2) theo số request đang mở mà chính instance đó thấy,…
Courier: Dropbox migration to gRPC
Dropbox chạy hàng trăm service bằng nhiều ngôn ngữ, trao đổi hàng triệu request mỗi giây (2019). Trước Courier có giao thức tự serialize, Thrift cho pipeline log, và "legacy RPC" chính là HTTP/1.1 + protobuf.
Finding Kafka's throughput limit in Dropbox infrastructure
Kafka ở Dropbox phục vụ analytics, ML, monitoring, search, stream processing (Cape); đội Jetstream vận hành và cần biết giới hạn throughput để cấp cluster.
How we optimized Magic Pocket for cold storage
Magic Pocket () lưu block bất biến tối đa 4 MB trên đĩa quay (SMR từ 2018, ); trong một region thì mới upload là replication n-way, sau đó erasure coding nền.
Centralized Application Logging at eBay (CAL Ingress)
CAL gom log cục bộ của các application server về một chỗ và làm báo cáo cho mọi mảng của eBay. CAL Ingress nhận log từ hàng nghìn client qua kết nối TCP sống lâu, chia ra: raw log tới Filer, metric VID (gộp lại) qua…
GRIT: a Protocol for Distributed Transactions across Microservices
Trong microservices, một ứng dụng gọi nhiều service do nhiều team viết, mỗi service dùng DB riêng. Vẫn có nhu cầu thật về giao dịch ACID xuyên service.
How we used delayed replication for disaster recovery with PostgreSQL
GitLab.com (2/2019): khoảng 3 triệu user, gần 7 triệu project; theo GitLab là một trong những site SaaS single-tenant mã nguồn mở lớn nhất. Postgres là thành phần sống còn.
Lessons from our journey to enable global code search with Elasticsearch on GitLab.com
Bản tự host của GitLab đã có tích hợp Elasticsearch (global search, code search) vài năm, nhưng GitLab.com, instance lớn nhất, vẫn chưa bật được.
Update: Elasticsearch lessons learnt for Advanced Global Search
Deadlock "con gà quả trứng": muốn giảm kích thước index thì cần dữ liệu từ một deployment thật, mà chưa có deployment thật vì index quá lớn. Phản hồi khách và test nhỏ không đủ; dogfooding là cách tốt nhất.
GitLab's unconventional journey to CI/CD and Kubernetes
feature freeze từ ngày 7, release ngày 22;
Designing Resilient Systems Beyond Retries (Part 2): Bulkheading, Load Balancing, and Fallbacks
Bài thứ hai trong series ba phần của Grab về các kỹ thuật chịu lỗi "ngoài retry" (bài 1 nói về rate limiting). Bài thiên về giải thích pattern, chỉ có vài đoạn ngắn về cách Grab áp dụng.