Hertz, an Ultra Large Scale Enterprise-Level Microservice HTTP Framework, is Now Officially Open Source

Bài tóm tắt ByteDance 2022 3. Quy mô lớn Độ khó: Dễ

ByteDance · 2022 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bài thông báo mở mã nguồn, nghiêng về giới thiệu tính năng; ít chi tiết kỹ thuật. Bài đi cặp với ByteDance 2022 (Kitex, phía RPC) và ByteDance 2024.

Bối cảnh

  • Framework HTTP nội bộ trước đây của ByteDance là một lớp bọc Gin: dễ dùng, hệ sinh thái đầy đủ. Khi nghiệp vụ lớn lên, nhu cầu hiệu năng và mở rộng tăng nhanh. Gin xây trên net/http của Go nên, theo team, khó mở rộng theo nhu cầu và khó tối ưu hiệu năng.

Thay đổi chính

  • Team service framework viết Hertz trên thư viện mạng tự phát triển Netpoll (cùng nền với Kitex), không dùng cấu trúc dữ liệu của net chuẩn. Bản 1.0 ra nội bộ 7/2021.
  • Sau khoảng một năm: framework HTTP lớn nhất trong công ty, hơn 10.000 service online, đỉnh hơn 40 triệu QPS (2022). Dùng cho cả nghiệp vụ lẫn thành phần lõi: nền tảng FaaS, nền tảng stress test, gateway, control plane của service mesh.
  • Thiết kế phân lớp với interface và bản cài đặt mặc định để mở rộng; hỗ trợ HTTP/1.1, HTTP/2, WebSocket, streaming và chunk (bản mở mã nguồn đầu chỉ có HTTP/1).
  • Công cụ hz sinh khung project từ IDL (Thrift, Protobuf) và cập nhật lại khi IDL đổi.
  • Quy trình ổn định: mọi PR do người có kinh nghiệm review, mỗi bản phát hành được test một thời gian (tương thích, đồng thời cao, kích thước package), có dịch vụ stability test mô phỏng tình huống online.
  • Một codebase cho trong và ngoài: lõi chuyển sang repo mã nguồn mở, nội bộ chỉ còn một lớp bọc; tính năng chỉ mở ra ngoài sau khi đã chạy ổn nội bộ.

Vì sao

  • Ở quy mô hàng chục nghìn service, framework chung là nơi tối ưu một lần có lợi cho mọi team; bọc một framework bên ngoài thì bị giới hạn bởi kiến trúc của nó (Nền tảng nội bộ cho service (đường ray chung)).
  • Đổi tầng mạng (Netpoll thay net/http) là cách lấy hiệu năng mà vẫn ở lại Go (Đổi ngôn ngữ và runtime).
  • Cái giá: không dùng net chuẩn nên phải tự làm lại phần hệ sinh thái (CORS, trace, metrics, reverse proxy, session).

Bài học cho SWE

  • Bọc framework phổ biến là bước đầu tốt; khi nhu cầu vượt qua kiến trúc của nó thì viết lại trên tầng mạng riêng, nhưng hãy tính chi phí dựng lại hệ sinh thái.
  • Giữ một codebase cho bản nội bộ và mã nguồn mở để tránh hai nhánh lệch nhau.

Liên quan