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 đó.
How we designed our continuous integration system to be more than 50% faster
Đội Engineering Productivity của Pinterest làm CI cho các repo lớn, phục vụ hơn 1.000 engineer (2020). Repo được nói tới là Optimus: monorepo Java hơn 120 service, gồm nhiều nền tảng dữ liệu quan trọng, khoảng 300 người…
What we learned from an iOS app OOMs incident
Đầu 2020: crash out-of-memory trên app iOS tăng mạnh; tỉ lệ người dùng không gặp crash (CFUR) giảm từ 99% xuống 96%.
Migration from HBase to MyRocks at Quora
Quora có hai kho dữ liệu chính, MySQL (đã tự shard dọc và ngang) và HBase (key-value, 3 cluster để cô lập). Hai hệ rất phức tạp và không chia sẻ được kiến thức hay công cụ với nhau.
Evolving Reddit's ML Model Deployment and Serving Architecture
Hệ ML của Reddit (2021) phục vụ hàng nghìn request inference mỗi giây cho feed, video, push, email. Inference nằm trong Minsky, một service Thrift Python (baseplate.py) vốn phục vụ dữ liệu relevance (độ giống giữa…
The Legends of Runeterra CI/CD Pipeline
Legends of Runeterra (2021): monorepo Git LFS khoảng 100 GB, một triệu file, 270k commit, khoảng 700 nhánh; Jenkins với scripted pipeline (logic phức tạp viết bằng Python, Groovy chỉ làm keo). Build farm trên AWS: 100…
Slack's Outage on January 4th 2021
Ngày làm việc đầu năm: Slack đi từ lúc vắng nhất năm sang một trong những ngày đông nhất chỉ qua một đêm; cache của client nguội nên lần kết nối đầu kéo nhiều dữ liệu hơn thường. Traffic còn có các đỉnh nhỏ đầu mỗi giờ…
Migrating Millions of Concurrent Websockets to Envoy
Hàng triệu user kết nối đồng thời lúc cao điểm, gửi nhau rất nhiều tin nhắn nhỏ qua websocket vào hệ "wss" (tin nhắn, presence, app). Từ đầu Slack dùng HAProxy ở nhiều region AWS để kết thúc websocket gần user.
Service Architecture at SoundCloud — Part 1: Backends for Frontends
Trước 2013, SoundCloud "tự ăn món mình nấu": một Public API duy nhất phục vụ cả app chính thức lẫn bên thứ ba.
Service Architecture at SoundCloud — Part 3: Domain Gateways
Bài cuối của series 3 phần về tiến hoá kiến trúc service của SoundCloud. Phần 1: ; phần 2: . Theo phần tóm tắt trong bài, kiến trúc có ba tầng:
Building a Healthy On-Call Culture
Ở SoundCloud, không chỉ DevOps/SRE mà nhiều engineer sản phẩm trực on-call. Bài mô tả cách tổ chức đã đúc kết qua thử sai.
Service Architecture at SoundCloud — Part 2: Value-Added Services
Sau nhiều năm dùng BFF, logic nghiệp vụ và phân quyền bị nhân bản ở từng BFF và lệch nhau (). Với SoundCloud, lộ track riêng tư hoặc chưa phát hành là kịch bản tệ nhất.
Designing a Better Kubernetes Experience for Developers
Theo Spotify, lúc đầu người dựng cluster Kubernetes cũng là người sở hữu service chạy trên nó. Khi Kubernetes phổ biến, tổ chức tách ra team hạ tầng dựng và giữ cluster (thường nhiều region để giảm latency), còn team…
Best practices can slow your application down
Stack Overflow ra đời trên stack Microsoft (.NET, C, SQL Server), mỗi server tốn thêm license, nên chiến lược từ đầu là scale up và làm code chạy thật nhanh để cần ít máy. Năm 2009: hai server thuê (một web, một DB),…
Fulfilling the promise of CI/CD
Theo tác giả, ai cũng nói "CI/CD" nhưng thực ra chỉ làm CI; gần như không ai thực hành continuous deployment. Mục đích của CI vốn là dọn đường cho CD.
A deeper dive into our May 2019 security incident
Ngày 12/5/2019, cộng đồng báo một tài khoản lạ có quyền moderator và developer trên toàn network Stack Exchange. Điều tra cho thấy đó chỉ là phần nổi: kẻ tấn công đã lấy được mã nguồn và làm lộ thông tin cá nhân của 184…
Service Level Testing for Microservices in Swiggy
Năm 2021 Swiggy chạy hơn 400 microservice production; vài năm trước chỉ vài chục. Cùng lúc tốc độ deploy giảm: tính năng kéo từ ngày thành tuần, sửa nhỏ cũng mất nhiều ngày dev và test.
PIT Mutation Testing on CI/CD Pipeline
Team Search của Trendyol (thương mại điện tử Thổ Nhĩ Kỳ) muốn tiến tới deploy một cú nhấp, nên pipeline CI/CD phải đủ tin cậy. Đang dùng code review và code coverage, nhưng coverage 100% vẫn có thể sai: test quên assert…
How we build the Image Gallery on trivago
Một pipeline ETL sinh gallery ảnh đã sắp thứ tự cho mỗi chỗ ở (theo tag nội dung và chất lượng ảnh) rồi gửi cho các đội frontend. Pipeline chạy trên AWS, rồi được chuyển sang GCP và thiết kế lại toàn bộ để thêm tính…
Postmortem: Removing all users from github.com/trivago
trivago áp dụng blameless postmortem từ 2019. Mọi nhân viên cần code, PR, CI hay tài liệu đều ở một GitHub organization; quyền vào được sync tự động từ một security group của Azure Active Directory (AAD) qua SAML SSO và…
How we rolled out security keys at Twitter
Sau incident bảo mật năm 2020 (bài nhắc tới, không kể chi tiết), Twitter đẩy nhanh dùng security key (FIDO/WebAuthn) cho nhân viên. Khác SMS hay OTP, security key phân biệt được trang thật và trang giả nên chặn được…
ADMIRE: A Product-Driven Approach to Automating Migrations
Đội Platform Engineering của Two Sigma chắc chắn phải làm migration (đổi DC, đổi container scheduler, đổi cloud), và phần lớn migration cần team khác làm việc; team nào cũng than "chẳng phải vừa xong đợt trước sao".
Sparkplug — a non-optimizing JavaScript compiler
Từ 2016 V8 thôi theo benchmark tổng hợp (Octane) để đo hiệu năng thực tế; với phiên ngắn (tải trang web, công cụ dòng lệnh) phần lớn thời gian trôi qua trước khi compiler tối ưu TurboFan kịp chạy. Họ đã làm parser,…
Next.js 12
Compiler Rust (SWC) thay Babel: theo Vercel, biến đổi mã nhanh hơn Babel 17 lần, refresh local nhanh khoảng 3 lần và build nhanh khoảng 5 lần. Phải viết lại các phép biến đổi Babel của Next.js bằng Rust, kể cả một…
A new Protocol Buffers generator for Go
Mọi giao tiếp giữa các thành phần của Vitess đi qua gRPC, mọi message là Protobuf. Năm 2020 Google ra Go Protobuf APIv2, không tương thích APIv1. Vitess không vội nâng: việc lớn, không có lợi ích trực tiếp (không dùng…