Входящий и исходящий трафик как различные множества
Двудольные графы в сетевой архитектуре
Двудольный граф разделяет узлы на два множества, при этом рёбра допустимы только между множествами (никогда внутри одного множества).
Сетевые границы имеют естественную двудольную структуру:
- Сторона входящего трафика: внешние клиенты с одной стороны, внутренние сервисы — с другой. Рёбра: входящие внешние запросы, исходящие внутренние ответы.
- Сторона исходящего трафика (Egress): внутренние сервисы на одной стороне, внешние конечные точки на другой. Рёбра: внутренние сервисы, инициирующие исходящие вызовы, и внешние ответы, возвращающиеся обратно.
Асимметрия:
- Входящий трафик (Ingress): множество источников неограничено (любой пользователь в интернете). Множество конечных точек мало (несколько сервисов). Объём трафика масштабируется в зависимости от числа пользователей.
- Исходящий трафик (Egress): множество источников мало (несколько внутренних сервисов). Множество конечных точек ограничено (несколько известных партнёров). Объём трафика масштабируется в зависимости от внутренней активности.
Дизайн с одним узлом сводит обе половины двудольного графа в один узел. Этот узел имеет входящий поток (fan-in) извне (входящий трафик) И входящий поток изнутри (обратное направление исходящего трафика). Нагрузка узла = сумма нагрузки с обеих сторон.
Разделённый дизайн сохраняет обе половины двудольного графа на отдельных узлах. Каждый узел выполняет одну роль с соответствующей осью масштабирования.
До раскола: разделяющая вершина повсюду
Один блок: одна вершина держит всё
До разделения между каждой парой внешних/внутренних узлов находится один прокси-сервер. В терминах теории графов это разделяющая вершина высокой степени: её удаление разобщает всех клиентов со всеми бэкендами И все внутренние сервисы со всеми внешними партнёрами.
Связность в этой вершине равна 1. Любое событие, нарушающее работу этой вершины (сбой процесса, сетевая помеха, завершение процесса по OOM), разобщает все зависимые пути.
После разделения: разделяющая вершина заменена двумя более лёгкими узлами
Разделение на входящий (ingress) и исходящий (egress) потоки создаёт два узла графа там, где раньше был один. Теперь каждый узел находится только в одной двудольной части:
- Узел входящего потока (Ingress): разделяющая вершина для двудольной части «внешние клиенты — внутренние сервисы»
- Узел исходящего потока (Egress): разделяющая вершина для двудольной части «внутренние сервисы — партнёры»
Петля «hairpin» исчезает геометрически: в графе с одним боксом внутренний сервис, пытающийся достичь внешнего сервиса через публичный адрес, должен был проходить через одну и ту же вершину дважды (сначала в роли исходящего, затем в роли входящего). В раздельном графе прохождение затрагивает две разные вершины.
Связность на каждой стороне остаётся равной 1, но две разделяющие вершины могут быть заменены независимо. Добавление второго прокси для входящего потока повышает связность на стороне входящего до 2, не изменяя сторону исходящего.
Репликация по сторонам
Производственные флоты часто запускают 2+ прокси-шлюза (HA) И 2+ прокси-эгресса (HA). Каждая сторона независимо достигает связности 2. Пропускная способность масштабируется горизонтально на каждой стороне по мере необходимости.
Устойчивость к сетевым разделениям
Синтез
Теперь вы можете читать сетевые архитектуры как двудольные графы, находить разделяющие вершины и отслеживать связность в каждой доле.
Примените это к сетевым разделениям.
Сетевое разделение — это разрез графа: рёбра, пересекающие разделение, выходят из строя; обе стороны продолжают работать, но не могут связаться друг с другом.
Географически распределённая система имеет два центра обработки данных, соединённые единым межцентровым каналом. Входящий трафик поступает через ЦОД1; исходящий трафик проходит через ЦОД1 к внешним партнёрам; некоторые внутренние сервисы размещены в ЦОД2 и обращаются в ЦОД1 для операций с состоянием.
Сопроводительные заметки
Сопроводительные заметки
Этот урок по геометрии переосмысливает основной урок Разделение входящего и исходящего трафика как анализ двудольного графа.
В следующем сопроводительном материале, geometry_of_failure_modes_and_blast_radius, выводится центральность междуности (идентификация узких мест) и минимальный срез (ограничение масштаба распространения сбоя).
Отличная работа.