5-year Evolution of Ele.me's Transaction System - Part 1
Bài tóm tắt Ele.me 2020 2. Tăng trưởng Độ khó: Dễ
Ele.me · 2020 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Phần 1 của series 6 phần, hồi ký của một kỹ sư team đơn hàng (Ele.me là nền tảng giao đồ ăn, sau thuộc Alibaba). Các phần sau: Ele.me 2020 (shard, message broadcast), Ele.me 2020 (test, diễn tập lỗi), Ele.me 2020 (Redis, polling), Ele.me 2020 (sự cố RabbitMQ), Ele.me 2020 (tách domain).
Bối cảnh
- 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.
- 5/2015: lập team đơn hàng chỉ 4 người. Tháng đầu họ xin CTO cho không nhận yêu cầu nghiệp vụ để đọc từng dòng trong hàng chục nghìn dòng Python (gần như không có tài liệu) và vẽ sơ đồ vòng đời đơn hàng.
- Giữa 2015, khối R&D đã lên hàng trăm kỹ sư; CTO mới vào đầu năm; nửa sau 2015 bắt đầu xây hạ tầng. Theo tác giả, đó là lúc "thay lốp khi xe đang chạy".
Thay đổi chính
- Tách Zeus (từ khoảng 6/2015) thành các service: đơn hàng (eos), user (eus), merchant (ers), marketing (eps), SMS. Sau đó tách tiếp, ví dụ booking/giỏ hàng và đánh giá khỏi eos. Cuộc họp chia ranh giới và chọn chủ sở hữu kéo dài hơn một tháng, "tranh luận gay gắt".
- Các bước, mỗi bước một tháng hoặc hơn:
- 7/2015: repo chung chia module chạy độc lập. Toàn bộ code vẫn được đẩy lên máy, nhưng mỗi máy chỉ bật một module và một port.
- 8/2015: đặt proxy ở API cũ trỏ sang API của service mới; service registry điều khiển lượng traffic chuyển.
- 8–9/2015: tách script và module.
- 9/2015: tách repo bằng
git filter-branch, giữ lịch sử. Lúc này vẫn deploy lẫn: "release ứng dụng độc lập" thực ra là thay một thư mục trong project Zeus lớn. - 9/2015: tách cấu hình (từ saltstack dùng chung sang lấy từ service registry).
- 3/2016: tách hẳn deploy vật lý.
- Sinh ra zeus_core, framework SOA cho Python, tách ra khoảng 4/2016.
Kết quả
Giai đoạn 1 kéo dài khoảng nửa năm, không gây sự cố nào. Theo tác giả, đó là nhờ thói quen tốt của kỹ sư và vận hành, không phải công cụ cao cấp; khi đó họ chưa có kỹ sư test chuyên trách.
Bài học cho SWE
- Tách logic trước, tách vật lý sau: module trong repo chung → proxy + registry chuyển traffic → tách repo → tách cấu hình → tách deploy. Cùng mẫu với GitHub và Figma (Monolith và microservices — đi và quay lại, Migration không downtime).
- Phần khó nhất là ranh giới và quyền sở hữu, không phải code.
- Một tháng chỉ đọc code và vẽ sơ đồ trước khi nhận việc là khoản đầu tư rẻ cho team kế thừa hệ thống không tài liệu.
Liên quan
- Monolith và microservices — đi và quay lại
- Migration không downtime
- Cùng nhóm công ty: Alibaba 2019
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (4)