Hiểu đúng ranh giới lỗi của vùng khả dụng: hai dạng shared fate nằm ngoài Multi-AZ
Xem nhanh
Railway là một PaaS (Platform-as-a-Service) cho developer: kết nối GitHub repo là tự động build, deploy và có database managed (Postgres, MySQL, Redis) mà không cần tự quản lý hạ tầng bên dưới. Để tránh phụ thuộc một cloud provider duy nhất, Railway chạy workload trên cả AWS, Google Cloud và cụm bare-metal riêng (Railway Metal). Sự cố Railway ngày 19/5/2026 diễn ra theo bốn mốc:
Railway sau đó xác nhận chính phụ thuộc này biến sự cố ở một nhà cung cấp thành sự cố toàn nền tảng. Phân tán hạ tầng ra nhiều nơi không đồng nghĩa với phân tán được ranh giới lỗi (failure boundary). Multi-AZ cần được hiểu trong cùng giới hạn đó: một cơ chế khoanh vùng sự cố, không phải một minh chứng rằng các thành phần trong hệ thống có tính độc lập.
Vật lý: Vùng khả dụng (AZ) được thiết kế trước hết để cô lập lỗi tương quan theo vị trí vật lý: nguồn điện, làm mát, hạ tầng mạng và những thành phần cùng chịu tác động trong một khuôn viên. Nhưng tự thân điều đó chưa đủ để đảm bảo high availability, cần thêm 3 điều kiện đúng: locality, quorum và capacity.
Điều kiện để AZ phát huy tác dụng
Locality: Giá trị của thiết kế zonal định lượng được. Giả định một trong ba vùng hỏng hoàn toàn, tài nguyên phân bố đều: nếu dịch vụ gọi ngẫu nhiên qua các AZ (kiểu regional), một lần gọi chỉ còn 4/9 khả năng thành công, và với chuỗi gọi dài N bước, khả năng đó giảm dần theo (2/3)N. Nếu dịch vụ chỉ gọi trong cùng một vùng (kiểu zonal), khả năng thành công luôn giữ ở mức 2/3, bất kể chuỗi gọi dài bao nhiêu - nguyên tắc "ưu tiên gọi trong cùng AZ" này gọi là locality, giúp tránh rủi ro cộng dồn qua từng bước gọi. Nhưng cả hai công thức trên đều giả định các AZ hoàn toàn độc lập với nhau - đây là điều kiện cần, chưa đủ để đảm bảo high availability.
Quorum và capacity: Cụ thể, dù đã chạy trên nhiều vùng, high availability vẫn chưa được đảm bảo do hai yếu tố thường bị bỏ sót:

Giới hạn: nơi Multi-AZ không còn bảo vệ
Giả sử cả ba điều kiện trên: locality, quorum, capacity đều đã đúng, vẫn còn một lớp phụ thuộc chưa được tính tới: control plane dùng để vận hành chính các AZ đó, đây là hạ tầng nằm phía trên ranh giới AZ. Dù có bao nhiêu AZ, chúng vẫn thường dùng chung một control plane duy nhất để điều phối (DNS, orchestration, network state). Khi control plane này gặp lỗi, tất cả AZ bên dưới đều bị ảnh hưởng cùng lúc, bất kể locality, quorum hay capacity đã cấu hình đúng. Hai dạng shared fate - tình trạng các thành phần đặt ở AZ khác nhau nhưng vẫn cùng sập chung vì chia sẻ một điểm phụ thuộc nào đó, trình bày dưới đây là hai trường hợp điển hình:
Bản chất: Nhân bản (Replication) không đồng nghĩa với tính độc lập. Nhiều bản sao đặt tại các AZ khác nhau vẫn sẽ chung số phận nếu cùng phụ thuộc vào một shared state, một Single point of failure, hay một control plane ở tầng cao hơn.
Thực tế:
Bản chất: Cô lập vật lý không bảo vệ hệ thống trước một cấu hình lỗi được phát tán đồng loạt. Blast Radius của cấu hình tỷ lệ thuận với phạm vi quyền hạn của nó, không bị giới hạn bởi ranh giới địa lý. Đáng cảnh giác nhất là các self-healing mechanism: phản ứng càng nhanh và rộng thì sức tàn phá càng lớn khi đánh giá sai.
Thực tế:
Cả hai dạng Shared fate kể trên đều có chung một dấu hiệu nhận biết: tồn tại một shared logic nằm ngoài phạm vi cô lập của từng AZ.
Việc bạn có thể làm ngay lúc này là mở sơ đồ kiến trúc của hệ thống đang vận hành và đánh dấu đỏ toàn bộ các thành phần duy nhất cấp Region/Tài khoản - bao gồm bản ghi DNS, centralized config store, hay các automation process có quyền ghi diện rộng. Mỗi dấu là một điểm thể hiện số vùng khả dụng không có ý nghĩa.
Shared fate mới chỉ là một phần của bức tranh. Còn 3 dạng Failure mode khác mà mô hình Multi-AZ không thể tự bảo vệ:
Phần 2 đi sâu phân tích 3 dạng này.
Nguyễn Phúc Lộc
Phó Giám Đốc Trung Tâm Phát Triển Dịch Vụ Hạ Tầng Cloud