Rest.li 2.x and a Protocol Upgrade Story

Bài tóm tắt LinkedIn 2015 3. Quy mô lớn Độ khó: Trung bình

LinkedIn · 2015 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Rest.li 2.0 đổi định dạng URL (gọn hơn, nhất quán giữa compound key và complex key, biểu diễn được list/map/chuỗi rỗng) và không tương thích ngược với 1.0. Server mới hiểu cả hai, client mới gửi 2.0 tới server cũ thì hỏng. Đồ thị gọi gồm hàng chục service.

Thay đổi chính

  • Handshake qua D2: phiên bản giao thức cao nhất mỗi service hiểu được lưu trong cấu hình D2; client đọc rồi chọn phiên bản theo luật. Object Request chỉ giữ dữ liệu, URL được sinh sau khi biết phiên bản.
  • Beta kín: ép 2.0 giữa các service mà server chắc chắn đã nâng cấp (frontend–backend feed homepage; trang profile–graph service), ramp bằng hệ A/B test lên 100% traffic và chạy nhiều tuần.
  • Rollout có kiểm soát: mỗi tuần một nhóm service; chỉ cần sửa cấu hình D2 của service, ZooKeeper đẩy tới mọi client; client cũ vẫn gửi 1.0. Khoảng 100 service trong Q4/2014, không cần chủ service tham gia.

Bài học cho SWE

  • Thay đổi giao thức không tương thích: nâng server trước, để client chọn phiên bản theo thông tin server công bố qua discovery, rollout bằng cấu hình chứ không bằng deploy client.

Liên quan