Inbound & Outbound Là Các Tập Hợp Rõ Rệt
Đồ Thị Hai Phần Trong Kiến Trúc Mạng
Một đồ thị hai phần chia các nút thành hai tập hợp, với các cạnh chỉ được phép giữa các tập hợp (không bao giờ trong cùng một tập hợp).
Ranh giới mạng có cấu trúc hai phần tự nhiên:
- Phía Ingress: các client bên ngoài ở một phía, các dịch vụ nội bộ ở phía kia. Các cạnh: các yêu cầu từ bên ngoài đi vào, các phản hồi nội bộ đi ra.
- Phía Egress (xuất): các dịch vụ nội bộ ở một bên, các đích bên ngoài ở bên kia. Các cạnh: các dịch vụ nội bộ khởi tạo các cuộc gọi ra bên ngoài, các phản hồi từ bên ngoài quay trở lại.
Sự bất đối xứng:
- Ingress (nhập): tập nguồn không giới hạn (bất kỳ ai trên internet). Tập đích nhỏ (vài dịch vụ). Khối lượng tăng theo số lượng người dùng.
- Egress (xuất): tập nguồn nhỏ (vài dịch vụ nội bộ). Tập đích có giới hạn (vài đối tác đã biết). Khối lượng tăng theo hoạt động nội bộ.
Thiết kế hộp đơn (single-box) gộp cả hai nửa đồ thị hai phần (bipartite) qua một nút duy nhất. Nút đó có fan-in từ bên ngoài (ingress) VÀ fan-in từ bên trong (hướng ngược lại của egress). Tải của nút = tổng của cả hai phía.
Thiết kế tách biệt (split design) giữ cả hai nửa đồ thị hai phần ở các nút riêng biệt. Mỗi nút xử lý một vai trò với trục mở rộng (scaling) phù hợp.
Trước Khi Tách: Một Đỉnh Cắt Ở Mọi Nơi
Hộp Đơn: Một Đỉnh Duy Trì Mọi Thứ
Trước khi tách, một hộp proxy duy nhất nằm giữa mọi cặp bên ngoài/bên trong. Theo thuật ngữ đồ thị, đây là một đỉnh cắt có bậc cao: việc loại bỏ nó sẽ ngắt kết nối tất cả các client khỏi tất cả các backend VÀ tất cả các dịch vụ nội bộ khỏi tất cả các đối tác bên ngoài.
Độ kết nối tại nút này = 1. Bất kỳ yếu tố nào làm gián đoạn nút này (lỗi tiến trình, sự cố mạng, OOM kill) sẽ ngắt kết nối mọi đường dẫn phụ thuộc.
Sau khi Tách: Đỉnh Cắt Được Thay Thế Bằng Hai Nút Nhẹ Hơn
Việc tách thành ingress + egress tạo ra hai nút đồ thị thay vì một. Mỗi nút giờ đây chỉ nằm trên một nửa đồ thị hai phần (bipartite):
- Nút Ingress: đỉnh cắt cho nửa đồ thị hai phần từ client bên ngoài đến dịch vụ nội bộ
- Nút Egress: đỉnh cắt cho nửa đồ thị hai phần từ dịch vụ nội bộ đến đối tác
Vòng lặp hairpin biến mất về mặt hình học: trong đồ thị một hộp, một dịch vụ nội bộ cố gắng tiếp cận một dịch vụ hướng ra bên ngoài qua địa chỉ công cộng yêu cầu đi qua cùng một đỉnh hai lần (ra qua vai trò egress, sau đó vào qua vai trò ingress). Trong đồ thị đã tách, hành trình đi qua hai đỉnh khác nhau.
Độ kết nối cho mỗi phía vẫn là 1, nhưng hai đỉnh cắt có thể được thay thế độc lập. Việc thêm một proxy ingress thứ hai sẽ nâng độ kết nối phía ingress lên 2 mà không làm thay đổi phía egress.
Sao chép theo từng phía
Các đội sản xuất thường chạy 2+ proxy ingress (HA) VÀ 2+ proxy egress (HA). Mỗi phía đạt kết nối 2 độc lập. Dung lượng được mở rộng theo chiều ngang ở mỗi phía theo nhu cầu.
Khả năng chịu lỗi phân vùng mạng
Tổng hợp
Bây giờ bạn có thể đọc các kiến trúc mạng như đồ thị hai phần, xác định các đỉnh cắt (cut vertices) & theo dõi tính kết nối theo từng nửa.
Áp dụng điều này vào các phân vùng mạng.
Một phân vùng mạng (network partition) là một vết cắt đồ thị: các cạnh (edges) xuyên qua phân vùng bị lỗi; cả hai phía vẫn hoạt động nhưng không thể liên lạc được với nhau.
Một hệ thống phân bố địa lý có hai trung tâm dữ liệu (datacenter) được kết nối bằng một liên kết liên trung tâm dữ liệu (inter-DC link) duy nhất. Lưu lượng đầu vào (ingress traffic) đi vào qua DC1; lưu lượng đầu ra (egress) đi qua DC1 đến các đối tác bên ngoài; một số dịch vụ nội bộ nằm ở DC2 & gọi ngược lại DC1 cho các thao tác có trạng thái (stateful operations).
Ghi chú bổ trợ
Ghi chú bổ trợ
Bài học về hình học này diễn giải lại bài học chính Tách biệt Ingress & Egress dưới dạng phân tích đồ thị hai phần.
Ghi chú bổ trợ tiếp theo, geometry_of_failure_modes_and_blast_radius, sẽ suy ra độ trung tâm giữa (xác định các nút nút cổ chai) & cắt tối thiểu (giới hạn bán kính ảnh hưởng).
Làm tốt lắm.