Mỗi PoP Sở hữu Một Ô của Mặt phẳng
Lát gạch Voronoi
Đặt N điểm (PoP: Điểm hiện diện) trên một mặt phẳng. Vẽ các ranh giới vùng sao cho mọi điểm trên mặt phẳng được gán cho PoP gần nhất. Kết quả là một biểu đồ Voronoi: mặt phẳng được phân chia thành N ô, một ô cho mỗi PoP, mỗi ô chứa tất cả các điểm gần PoP của nó hơn so với bất kỳ PoP nào khác.
Hình học CDN: mọi yêu cầu của người dùng được định tuyến đến PoP gần nhất. Mỗi PoP phục vụ một ô của mặt phẳng địa lý. Các ranh giới ô là các đường trung trực của các đường nối giữa các PoP lân cận.
Cách đọc hình học:
- Thêm một PoP làm thu nhỏ các ô của các PoP lân cận (& tạo ra một ô mới)
- Xóa một PoP buộc ô của nó phải phân phối lại cho các PoP lân cận (gây đột biến dung lượng tại các PoP lân cận)
- Một người dùng nằm gần biên giới của một ô có thể chuyển đổi giữa các PoP khi cân bằng tải thay đổi
- Sự cố của một PoP làm mở rộng hiệu quả ô của mọi PoP lân cận trong thời gian sự cố
Hậu quả vận hành: khi một PoP gặp sự cố, tải của nó không biến mất; nó di chuyển sang các PoP lân cận. Nếu các PoP lân cận chỉ được thiết kế cho dung lượng bình thường của ô của chúng, sự đột biến này sẽ khiến chúng bị quá tải tiếp theo (sự cố PoP lan truyền). Các nhà cung cấp CDN chuyên nghiệp sẽ thiết kế dung lượng cho mỗi PoP với sự tính toán đến sự đột biến do sự cố của PoP lân cận.
Bất đẳng thức Tam giác mà bạn không thể qua mặt
Vật lý đặt ra ngưỡng dưới
Ánh sáng truyền đi với tốc độ ~300.000 km/s trong chân không. Trong sợi quang, tốc độ khoảng 200.000 km/s do chiết suất. Điều đó có nghĩa là:
- ~1.000 km sợi quang = ~5 ms một chiều = ~10 ms khứ hồi
- Bờ Đông sang bờ Tây Hoa Kỳ (~5.000 km) = ~50 ms RTT tối thiểu
- Hoa Kỳ sang Châu Âu (~8.000 km) = ~80 ms RTT tối thiểu
- Hai điểm đối cực (nửa vòng quanh thế giới) = ~200 ms RTT tối thiểu
Đây là mức sàn. RTT thực tế luôn lớn hơn (các bước nhảy router, chuyển mạch, xếp hàng, tắc nghẽn). Không ứng dụng nào có thể nhanh hơn giới hạn cho phép của vật lý.
Bất đẳng thức tam giác
Với ba nút A, B, C, bất đẳng thức tam giác nói rằng d(A,C) <= d(A,B) + d(B,C): một đường đi trực tiếp ngắn hơn (hoặc bằng) bất kỳ đường đi gián tiếp nào.
Cách đọc trong mạng: nếu dịch vụ của bạn định tuyến A -> B -> C thay vì A -> C trực tiếp, độ trễ sẽ ít nhất là tổng độ trễ của hai chặng. Thường là nhiều hơn do xử lý tại B.
Cách đọc kiến trúc: mỗi lớp trung gian (proxy, load balancer, hop CDN) đều thêm ít nhất một chặng round-trip vào độ trễ cảm nhận của người dùng. Lợi ích của CDN đến từ việc làm ngắn chặng của người dùng (PoP gần hơn so với origin), mặc dù tổng số hop tăng lên.
Bẫy đa khu vực: một dịch vụ đọc từ khu vực A nhưng ghi vào khu vực B sẽ chịu độ trễ A-to-B cho mỗi thao tác ghi. Nếu A & B cách nhau 100 ms, mỗi thao tác ghi mất tối thiểu >= 100 ms. Các cơ sở dữ liệu kéo dài (stretched databases) phải trả mức sàn này mỗi lần.
Trả Mức Sàn
Một dịch vụ chạy ở hai khu vực: US-East (us-east-1) & EU-West (eu-west-1). Hai khu vực này cách nhau khoảng 5.500 km. Dịch vụ có cơ sở dữ liệu chính (primary database) ở US-East. Người dùng EU có các yêu cầu của họ được xử lý bởi các backend ở EU-West, nhưng mọi thao tác ghi đều yêu cầu một cuộc gọi quay lại primary ở US-East.
Thiết kế năng lực theo địa lý
Tổng hợp
Bạn giờ có thể đọc các ô Voronoi như các vùng thu hút PoP, tính sàn độ trễ theo tốc độ ánh sáng, & áp dụng đường cong hàng đợi ở tầng proxy.
Áp dụng cả ba.
Một nhóm lập kế hoạch phủ sóng CDN cho một dịch vụ có người dùng ở ba châu lục: Bắc Mỹ (60% người dùng), Châu Âu (30%), Châu Á (10%). Họ có ngân sách cho 6 PoP. Mỗi PoP có thể phục vụ một cell ổn định ở mức sử dụng 70% mà không vượt qua điểm khuỷu của đường cong hàng đợi.
Kết thúc Khóa học Bổ trợ
Kết thúc Khóa học Bổ trợ
Bạn đã hoàn thành cả năm bài học đồng hành về hình học của hệ thống phân tán:
- Proxy & Nguồn gốc (Origins): đồ thị có hướng, số bước nhảy (hop count), fan-in / fan-out, gián tiếp (indirection)
- Mở rộng ngang không trạng thái (Stateless Horizontal Scaling): Định luật Little như diện tích, đường cong hàng đợi & điểm khuỷu (knee) của nó
- Tách biệt Ingress & Egress: cấu trúc hai phần (bipartite), loại bỏ đỉnh cắt (cut vertex), khả năng chịu phân vùng (partition tolerance)
- Chế độ lỗi & Bán kính ảnh hưởng (Failure Modes & Blast Radius): độ trung tâm giữa (betweenness centrality), cắt tối thiểu (min-cut), đường kính (diameter)
- Quan sát & Sức chứa (Observability & Capacity) (bài này): các ô PoP Voronoi, sàn tam giác độ trễ (latency triangle floor), thiết kế sức chứa theo địa lý
Sợi chỉ xuyên suốt: các hệ thống phân tán có cấu trúc hình học. Mọi kiến trúc đều là một đồ thị. Mọi sàn độ trễ đều là bất đẳng thức tam giác. Mọi quyết định về sức chứa đều là một đường cong & một điểm khuỷu. Một khi bạn nhìn thấy hình học, các quyết định vận hành sẽ bắt nguồn từ đó.
Kết hợp với năm bài học chính (cs_distsys_*), bạn đã có một mô hình nhận thức hoạt động của một hệ thống phân tán quy mô web & kỷ luật lý thuyết đồ thị để lập luận về nó.
Làm tốt lắm.