Scaling with common sense #2: Being future ready
Zerodha · 2021 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc
Bài tiểu luận nhiều quan điểm của CTO Zerodha (công ty môi giới chứng khoán lớn ở Ấn Độ). Mọi nhận định là "theo Zerodha"; có phần chỉ trích lãnh đạo "phi kỹ thuật", wiki chỉ ghi lại các ý về hệ thống.
Bối cảnh
- Trong khoảng một năm (2020–2021), số khách tăng hơn 3 lần do thị trường vốn bùng nổ, trong khi 10 năm trước đó tăng chậm và đều. Theo Zerodha, họ thích ứng được nhờ các nguyên tắc "lẽ thường" chứ không nhờ dự đoán trước.
- Đội kỹ thuật nhỏ; nền tảng giao dịch Kite ra mắt năm 2015 với khoảng 1.000 user đồng thời, đến 2021 là hơn 1 triệu.
Các ý chính
-
Viết lại có chủ đích, thường xuyên:
- Kite v1 viết bằng Python, v2 là một đợt refactor lớn;
- ticker (đẩy hàng chục triệu gói dữ liệu thị trường mỗi giây) được viết lại ít nhất 5 lần trong 6 năm, khi họ viết Go giỏi hơn;
- Console (báo cáo trên hàng trăm tỷ dòng) bỏ bản Python, viết lại toàn bộ bằng Go.
Nguyên tắc: "đừng sửa thứ chưa hỏng, nhưng hãy sửa thứ sắp hỏng".
-
Đóng băng tính năng mới để dọn nợ kỹ thuật: chấp nhận trễ tính năng vài tuần đến vài tháng để refactor. Theo Zerodha, nhờ vậy về sau họ ship nhanh hơn đối thủ.
-
Interface ổn định quan trọng hơn cài đặt: API nội bộ cần được chăm như API công khai, vì nó cho phép thay hẳn hệ thống bên dưới. API sạch của Kite trở thành Kite Connect, một nền tảng "brokerage as a platform" cho công ty khác xây sản phẩm.
-
Thực dụng hơn hoàn hảo: ví dụ năm 2020 cơ quan quản lý cho khoảng 4 tuần để đổi toàn bộ quy trình bán cổ phiếu, rồi thêm OTP, rồi đổi hiệu lực uỷ quyền.
-
"Kết nối bằng cách ngắt kết nối": mạng API đồng bộ dữ liệu khách giữa nhiều phòng ban được thay bằng PubSub. Hệ thống không còn biết nhau, nên thêm, sửa, bỏ một hệ ít gây xáo trộn.
-
Tự host phần mềm mã nguồn mở: tự chạy Postgres, MySQL, ClickHouse, Redis, Kafka, ELK, Sentry, Grafana, GitLab... Theo Zerodha, cách này vừa rẻ (ví dụ hệ ticket hỗ trợ cho hơn 1.000 người dưới 10.000 USD/năm) vừa cho phép đổi nhanh theo quy định. Họ cảnh báo về hoá đơn SaaS tăng dần và bị khoá vào nhà cung cấp.
-
Hệ thống luôn có lúc sập: sự kiện chưa từng thấy (giá dầu âm năm 2020, các nghiệp vụ doanh nghiệp phức tạp) phá hệ thống. Họ canh thời gian batch cuối ngày để còn chỗ xử lý.
Bài học cho SWE
- Một hệ thống nóng (ticker) có thể viết lại nhiều lần nếu interface ổn định. Viết lại là hoạt động thường xuyên, không phải dự án một lần (Đổi ngôn ngữ và runtime).
- Tự host FOSS là một cực của trục build vs buy: rẻ và linh hoạt, đổi lại cần đội đủ năng lực (Chi phí hạ tầng và build vs buy).
- Thay đồng bộ điểm-điểm giữa các hệ bằng PubSub làm giảm khớp nối giữa phòng ban (Realtime và fan-out).