Входящий и исходящий как отдельные множества
Бипартитные графы в архитектуре сетей
Бипартитная графа разделяет вершины на две группы, с ребрами, разрешенными только между группами (никогда не внутри группы).
Границы сетей имеют естественную бипартитную структуру:
- Ингрессная сторона: снаружи клиенты на одной стороне, внутренние сервисы на другой. Ребра: внешние запросы, входящие, внутренние ответы, выходящие.
- Эгрессная сторона: внутренние сервисы на одной стороне, внешние назначения на другой. Ребра: внутренние сервисы, инициирующие исходящие вызовы, внешние ответы, возвращающиеся.
Асимметрия:
- Ингресс: множество источников неограниченное (каждый на интернет). Множество назначения небольшое (несколько сервисов). Объем пропорционален количеству пользователей.
- Эгресс: множество источников небольшое (несколько внутренних сервисов). Множество назначения ограниченное (несколько известных партнеров). Объем пропорционален внутренней активности.
Однородная схема сводит обе бипартитные половины через одну вершину. Эта вершина имеет вход от снаружи (ингресс) И вход от внутри (эгресс в обратном направлении). Загрузка узла = сумма обеих сторон.
Разделенная схема сохраняет обе бипартитные половины в отдельных узлах. Каждый узел обрабатывает одну роль со своим соответствующим масштабом.
Перед разделением: отрезанная вершина везде
Одиночная Бокс: Все Вещи Сосредоточены На Одной Вершине
Перед разделением одна прокси-бокс находится между каждой внешней/internal парой. В графовых терминах это вершина разветвления высокого порядка: ее удаление разрывает связь всех клиентов с бэкендами И всех внутренних сервисов с внешними партнерами.
Связность этой вершины = 1. Любое нарушение этой вершины (сбой процесса, сетевой сбой, OOM-убийство) разрывает все зависимые пути.
После разделения: Вершина Разветвления Заменена Двумя Менее Тяжелыми Нодами
Разделение на вход + выход создает две графовые ноды, где было одна. Каждая нода теперь находится только на одной бипартиту:
- Нод входа: вершина разветвления для внешних-клиентов/internal-сервисов бипартиту
- Нод выхода: вершина разветвления для internal-сервисов/partners бипартиту
Геометрически исчезает hairpin loop: в графе одиночной бокс внутренний сервис, пытаясь достичь внешнесерверной службы через публичный адрес, требовал перехода через ту же вершину дважды (вывести через роль выхода, а затем ввести через роль входа). В разделенном графе переход касается двух разных вершин.
Связность по стороне остается на уровне 1, но две вершины разветвления могут быть заменены независимо. Добавление второй прокси-входа повышает связность входной стороны до 2, не изменяя выходную сторону.
Репликация По Стороне
Продакшн-флиты часто используют 2+ входных прокси (HA) И 2+ выходных прокси (HA). Каждая сторона достигает связи 2 независимо. Объем масштабируется горизонтально на каждой стороне по мере необходимости.
Толерантность К Разрыву Сетей
Синтез
Теперь вы можете читать сети как бипартитные графы, определять вершины разрыва и отслеживать связность по половинам.
Примените это к разделению сетей.
Разделение сети - это разрез графа: краевые ребра теряют работоспособность; обе стороны продолжают работать, но не могут достучаться друг до друга.
Географически распределенная система имеет две дата-центры, соединенные одним интер-дата-центровым каналом. Трафик входа поступает через DC1; выходной трафик проходит через DC1 к внешним партнерам; некоторые внутренние сервисы живут в DC2 и вызывают DC1 для состоятельных операций.
Дополнительные заметки
Дополнительные заметки
Эта геометрия-урок преобразует урок основной темы Разделение входа и выхода в анализ бипартитного графа.
Следующий дополненный, geometry_of_failure_modes_and_blast_radius, получает междуцентральность (определяет узкие места) и мин-разрез (ограничивает радиус разрушения).
Хорошая работа.