So You Think You Can Scale?

Bài tóm tắt Railway 2023 2. Tăng trưởng Độ khó: Trung bình

Railway · 2023 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc

Bài ra mắt tính năng của nhà cung cấp PaaS (Launch Week 01). Mọi nhận định ghi "theo Railway".

Bối cảnh

  • Trước 9/2023, muốn scale ngang trên Railway thì người dùng phải tự nhân bản service và tự viết load balancing.
  • Mô hình dữ liệu nội bộ chỉ có một deployment cho mỗi service.

Thay đổi chính

  • Một "nút xoay" chọn số replica cho mỗi service.
  • Orchestration: thêm khái niệm deployment instance (cùng setting, biến, môi trường, lặp lại được). Orchestrator riêng, không dùng Kubernetes, dựng trên Temporal: workflow build ảnh, rồi workflow deploy chọn region, chọn máy ("stacker") phù hợp, số lượng, và chạy các sub-workflow (chính là workflow deploy cũ) cho từng replica; đợi healthcheck của mọi replica.
  • Mạng riêng: mỗi container nhận một IPv6 riêng, đẩy vào network control plane chạy theo sự kiện, lan tới mọi proxy và DNS server qua gRPC trong vài mili giây. Service A gọi B qua DNS riêng, chọn ngẫu nhiên một bản ghi AAAA; muốn thuật toán khác thì tự đặt NGINX/HAProxy.
  • Mạng công khai: edge là đội Envoy với control plane Go; replica mới gây cập nhật CDS và vào bảng round-robin ngay.
  • Replica trải trên nhiều máy; một replica chết thì mạng tự chuyển sang replica khác. Replica giới hạn trong một region; multi-region failover và autoscaling (kể cả scale to zero) là kế hoạch.
  • API trước: mọi tính năng mở qua GraphQL API; người dùng tự viết autoscaler từ API metrics + API đổi số replica, đóng gói thành template.

Vì sao

  • Theo Railway: nhân bản container là phần dễ; phần khó là mạng, để replica nói chuyện được với nhau không phải đổi code.
  • Triết lý: xây primitive, dùng chúng cho tính năng của chính mình, rồi mở cho người dùng.

Bài học cho SWE

  • Đi từ "một deployment / service" sang "nhiều instance" là đổi mô hình dữ liệu trước, rồi mới tới orchestration (Nền tảng nội bộ cho service (đường ray chung)).
  • Control plane theo sự kiện đẩy endpoint mới tới proxy và DNS nhanh; load balancing đơn giản (ngẫu nhiên, round-robin) là đủ để bắt đầu.
  • Nhiều replica trên nhiều máy cho chịu lỗi máy, chưa phải chịu lỗi region (Độ tin cậy và multi-region).

Liên quan