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. 72 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 8.979 bài thuộc 133 công ty có trang riêng được hiển thị cho thành viên. Cảm ơn những người duy trì các danh sách đó.
Orchestrating Cassandra on Kubernetes with Operators
Cassandra ở Yelp dùng cho cả dữ liệu chính lẫn dữ liệu dẫn xuất; mỗi cụm production trải nhiều region AWS, chạy trên EC2 + ASG, dữ liệu trên EBS (backup bằng snapshot), seed provider dựa trên synapse.
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 mạng chắc chắn có lúc timeout.
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.
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,…
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.
DBLog: A Generic Change-Data-Capture Framework
Nền tảng Delta của Netflix giữ nhiều kho dữ liệu đồng bộ: một kho là nguồn sự thật (MySQL), các kho khác dẫn xuất (Elasticsearch). CDC thay cho dual write và transaction phân tán.
Geosharded Recommendations Part 3: Consistency
Sau khi shard theo địa lý, có hai kho dữ liệu phải khớp nhau:
The story of a V8 performance cliff in React
V8 không lưu số JavaScript (Float64 theo spec) theo một cách cố định: số nguyên 31 bit có dấu là Smi, số khác là HeapNumber. Mỗi trường của object được đánh dấu "representation" trên shape (hidden class): Smi, Double…
Meet Bandaid, the Dropbox service proxy
Bandaid bắt đầu là reverse proxy bù cho điểm yếu của các service phía server, rồi thành service proxy giúp Dropbox chuyển sang SOA. Viết bằng Go như phần lớn hạ tầng lõi; hỗ trợ TLS termination, HTTP/2, gRPC, service…
Rethinking Netflix's Edge Load Balancing
Cloud Gateway (Zuul) nhận hơn 1 triệu request/giây (2018). Zuul dùng Ribbon round-robin + loại server có tỉ lệ lỗi kết nối cao, kèm vài tuỳ biến bớt traffic cho server mới khởi động; một số cụm origin vẫn có lỗi do quá…
Scaling Time Series Data Storage — Part II
1/2016 Netflix mở ra 130 nước, 20 ngôn ngữ; cuối 2016 thêm video preview khi duyệt trên TV. Kiến trúc phần 1 coi mọi dữ liệu xem như nhau.
Building a dynamic and responsive Pinterest
2015: phần lớn nội dung được sinh sẵn cho user trước khi họ đăng nhập, lưu tĩnh trong HBase. Kiến trúc này đưa Pinterest tới 100 triệu MAU.
How Discord Scaled Elixir to 5,000,000 Concurrent Users
Discord dùng Elixir/Erlang VM (BEAM) từ prototype đầu tiên. Sau 2 năm: gần 5 triệu user đồng thời, hàng triệu event/giây (2017).
Infrastructure update: evolution of the Dropbox backbone network
Đưa hàng trăm PB dữ liệu về data center riêng () trong khi user vẫn tăng đòi hỏi mạng phải lớn nhanh. Họ xây song song một edge network toàn cầu và một backbone nối các data center ở Bắc Mỹ với nhau và với các edge…
Dismissing Python Garbage Collection at Instagram
Web server Django chạy uWSGI ở chế độ pre-fork: process master fork ra hàng chục worker để chia sẻ bộ nhớ theo copy-on-write (CoW). Worker bị restart khi RSS vượt ngưỡng để tránh OOM.
Taming architecture complexity in V8 — the CodeStubAssembler
Builtin là các hàm có sẵn trong mọi chương trình JavaScript (Array.prototype....). V8 viết chúng theo hai cách, cả hai đều có giá:
Nebula as a Storage Platform to Build Airbnb's Search Backends
2015: dữ liệu cá nhân hoá cho search vượt sức một máy. Thay vì chỉ làm lại service đó, Airbnb xây nền tảng chung vì thấy nhiều service sẽ cần cùng thứ: phục vụ độ trễ ms cho traffic site, nhận cập nhật realtime từ…
Scaling to exabytes and beyond (Magic Pocket)
Dropbox luôn là hybrid cloud: metadata và web server ở data center riêng, nội dung file trên Amazon S3. Họ là khách hàng sớm của S3 và nói thẳng là không thể lớn nhanh như vậy nếu không có AWS.
Why Uber Engineering Switched from Postgres to MySQL
Kiến trúc ban đầu: monolith Python + Postgres. 2016: microservices, và phần lớn chỗ trước đây dùng Postgres giờ dùng Schemaless, một lớp sharding tự xây trên MySQL. Một số trường hợp đặc biệt dùng Cassandra.
Instagration Pt. 2: Scaling our infrastructure to multiple data centers
2013, khoảng một năm sau khi về Facebook: 200 triệu user/tháng, 20 tỷ ảnh. Họ bắt đầu "Instagration", chuyển từ AWS sang hạ tầng Facebook.
Chat Service Architecture: Servers
Chat LoL (2015): mỗi ngày thường định tuyến khoảng 1 tỷ event (presence, message, IQ) và hàng triệu REST query; một ngày tháng 7 có 1,7 triệu lượt kết bạn mới.
Better Crash-safe replication for MySQL
Booking.com (2014) dùng replication MySQL để scale đọc, với hàng nghìn slave; số lượng đó nghĩa là sớm muộn sẽ có slave chết.
Lessons from Deploying MySQL GTID at Scale
Replication MySQL truyền thống dựa trên toạ độ tương đối (tên file binlog + vị trí). GTID (MySQL 5.6) gán cho mỗi transaction một ID duy nhất, nên replica tự biết mình đã chạy tới đâu (auto-positioning).
Inside the Go Playground
Playground (9/2010) cho chạy chương trình Go bất kỳ từ trình duyệt, dùng trong tài liệu, tour, slide. Ba phần: backend trên máy của Google (compile + chạy, trả output qua RPC), frontend trên App Engine (nhận HTTP, gọi…