Dự án 05 · Dự án tiêu biểu
Nền móng kỹ thuật: hàng tỉ lượt hiển thị, và một sàn tự chạy
- Vận hành trong quá khứ — thuộc sở hữu của công ty
Mười một năm qua hai chặng ở cùng một công ty AdTech: bốn năm làm kỹ sư frontend duy nhất trong một đợt chuyển đổi nền tảng, sau đó là một sàn quảng cáo tự phục vụ xây từ đầu tới cuối, rồi tới các dịch vụ backend gánh hàng chục nghìn yêu cầu mỗi giây.
- Vai trò
- Software Engineer, sau đó Senior Software Engineer
- Năng lực
- Quy mô · Nền tảng · Trực tiếp làm
- Lĩnh vực
- Công nghệ quảng cáo — nghiệp vụ nhà xuất bản, bán hàng và chiến dịch
- Thời gian
- Hai chặng, mười một năm
Bối cảnh
Một công ty công nghệ quảng cáo vận hành các nền tảng cho nhà xuất bản, bán hàng và điều hành chiến dịch. Tôi vào năm 2011, rời đi năm 2017 để mở công ty riêng, và được mời quay lại hai lần trong hai năm sau đó; tôi trở lại năm 2019 ở bậc cao hơn và ở lại suốt đại dịch.
Bài toán và chỗ mơ hồ
Ba bài toán khác nhau trong mười một năm, nhưng cùng một hình dạng lặp lại: thứ chạy tốt ở một quy mô thì không chạy ở quy mô kế tiếp, và cách sửa chưa bao giờ nằm ở chỗ mọi người đang nhìn.
Vai trò của tôi
Vai trò của tôi: năm một tới năm bốn, kỹ sư frontend duy nhất trong đợt chuyển các giao diện vận hành của nền tảng từ hệ cũ sang hệ mới, kèm QA. Năm thứ năm: tôi đề nghị quản lý cho chuyển sang backend và được đồng ý — ⛔ tôi không bị điều chuyển, tôi là người xin. Sau đó tôi xây sàn quảng cáo tự phục vụ B2B của công ty, báo cáo trực tiếp cho CTO. Ở chặng thứ hai tôi dẫn dắt phần cải thiện backend và API cùng đợt chuyển sang lớp API mới.
Nắm bắt yêu cầu
Các giao diện vận hành không phải một bài tập thiết kế, chúng là một bài toán về khả năng dùng có cạnh thương mại: một phễu bán hàng đưa cơ hội đi qua các mức độ tin cậy tới hợp đồng chốt được rồi sang vòng đời chiến dịch, một trình quản lý chiến dịch nằm trên hệ phân cấp quốc gia, nhà quảng cáo, chiến dịch, đợt chạy, vị trí và mẫu quảng cáo, cùng một cổng cho nhà xuất bản gồm cấu hình vị trí quảng cáo, tích luỹ doanh thu và yêu cầu thanh toán. Muốn làm đúng những thứ đó thì phải ngồi cùng bộ phận vận hành quảng cáo và bán hàng, ⛔ không phải ngồi cùng một bản đặc tả.
Kiến trúc và đánh đổi
Phần việc về quy mô là một đợt chuyển kiến trúc cũ sang lớp API mới, và cả hai nửa đều quy về một điều: đưa công việc ra khỏi đường đi của yêu cầu. Dữ liệu đo quảng cáo — từng lượt hiển thị, từng cú nhấp, và phần tử nào bên trong mẩu quảng cáo được nhấp — sẽ làm ngập máy chủ nếu mỗi sự kiện tự gọi một lệnh, nên các sự kiện được gom lại và gửi theo chu kỳ cố định sang một dịch vụ ghi sổ riêng, xử lý bên ngoài hệ thống chính rồi ghi ngược lại. Báo cáo trước đó được sinh đồng bộ, nên một trang bị chặn trong lúc báo cáo chạy; phần đó chuyển sang các lô worker, trang tải ngay còn công việc báo lại khi xong.
Triển khai và tích hợp
Sàn này là một lớp thương mại hoàn chỉnh: quảng cáo được đóng thành gói và thoả thuận, một tầng thành viên cố ý làm đơn giản đặt trên phần lõi phức tạp, nối vào bộ máy API của công ty, có tự đặt và tự quản lý phía khách hàng, tải lên mẫu quảng cáo, nạp và trừ điểm trả trước ở phía người mua, cùng tích luỹ doanh thu và yêu cầu thanh toán ở phía nhà xuất bản. Nhà xuất bản có thể niêm yết gói, đặt vị trí của mình và bán.
Kiểm soát khi vận hành
Việc gửi báo cáo được làm thành bất biến khi lặp lại — tải lại trang không thể kích hoạt lần nữa một công việc đang chạy, đây là lỗi mà người dùng nào cũng tìm ra trong vòng một tuần. Bộ nhớ đệm nhiều tầng, tinh chỉnh truy vấn cơ sở dữ liệu và viết lại phần Node.js trên các đường nóng.
Tác động
Quy mô nền tảng: các dịch vụ backend gánh hàng chục nghìn yêu cầu mỗi giây và hàng tỉ lượt hiển thị quảng cáo mỗi tháng. Con số đó mô tả nền tảng, ⛔ không phải một thành phần do riêng tôi sở hữu — tôi làm trên những đường backend cụ thể bên trong nó. Trên những đường đó, việc gom lô, tinh chỉnh truy vấn, bộ nhớ đệm nhiều tầng và viết lại Node.js nói ở trên đã đưa thời gian phản hồi p95 xuống dưới 100 mili giây, đo trên chính những đường đã sửa.
Bài học dùng lại được
Cả hai lần thắng về quy mô đều tới từ cùng một nước đi — đưa công việc ra khỏi đường đi của yêu cầu — và không lần nào cần viết lại. Con số thông lượng là hệ quả của quyết định đó, ⛔ không phải một thành tích tự thân, và tôi thích được hỏi về cơ chế hơn là về con số.
Bằng chứng công khai
Tất cả ở trên là những gì có thể nói công khai. Phần được giữ lại, và phần đang chuẩn bị:
Thập kỷ này hợp với một bộ slide hơn là một repository — dự án P8 — vì công việc đã quá cũ và quá thuộc về khách hàng để dựng lại một cách trung thực.
Câu trả lời lấy từ chính trang này. Nó sẽ nói thẳng khi một dự án không đáng làm.