English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

гость
1 / ?
назад к урокам

Входящий и исходящий трафик как различные множества

Двудольные графы в сетевой архитектуре

Двудольный граф разделяет узлы на два множества, при этом рёбра допустимы только между множествами (никогда внутри одного множества).

Сетевые границы имеют естественную двудольную структуру:

- Сторона входящего трафика: внешние клиенты с одной стороны, внутренние сервисы — с другой. Рёбра: входящие внешние запросы, исходящие внутренние ответы.

- Сторона исходящего трафика (Egress): внутренние сервисы на одной стороне, внешние конечные точки на другой. Рёбра: внутренние сервисы, инициирующие исходящие вызовы, и внешние ответы, возвращающиеся обратно.

Асимметрия:

- Входящий трафик (Ingress): множество источников неограничено (любой пользователь в интернете). Множество конечных точек мало (несколько сервисов). Объём трафика масштабируется в зависимости от числа пользователей.

- Исходящий трафик (Egress): множество источников мало (несколько внутренних сервисов). Множество конечных точек ограничено (несколько известных партнёров). Объём трафика масштабируется в зависимости от внутренней активности.

Дизайн с одним узлом сводит обе половины двудольного графа в один узел. Этот узел имеет входящий поток (fan-in) извне (входящий трафик) И входящий поток изнутри (обратное направление исходящего трафика). Нагрузка узла = сумма нагрузки с обеих сторон.

Разделённый дизайн сохраняет обе половины двудольного графа на отдельных узлах. Каждый узел выполняет одну роль с соответствующей осью масштабирования.

Двудольный граф входящего и исходящего трафика: отдельные наборы узлов, отдельные точки разрыва

Постройте двудольный граф для небольшого SaaS: 5 внешних конечных точек клиентов (отправляющих запросы), 3 внутренних сервиса (бэкенда) и 4 внешних API партнёров (вызываемых исходящим образом). Определите, какие рёбра относятся к половине двудольного графа входящего трафика, а какие — к половине исходящего трафика. Предскажите, что произойдёт с связностью графа, если один из внутренних сервисов выйдет из строя.

До раскола: разделяющая вершина повсюду

Один блок: одна вершина держит всё

До разделения между каждой парой внешних/внутренних узлов находится один прокси-сервер. В терминах теории графов это разделяющая вершина высокой степени: её удаление разобщает всех клиентов со всеми бэкендами И все внутренние сервисы со всеми внешними партнёрами.

Связность в этой вершине равна 1. Любое событие, нарушающее работу этой вершины (сбой процесса, сетевая помеха, завершение процесса по OOM), разобщает все зависимые пути.

После разделения: разделяющая вершина заменена двумя более лёгкими узлами

Разделение на входящий (ingress) и исходящий (egress) потоки создаёт два узла графа там, где раньше был один. Теперь каждый узел находится только в одной двудольной части:

- Узел входящего потока (Ingress): разделяющая вершина для двудольной части «внешние клиенты — внутренние сервисы»

- Узел исходящего потока (Egress): разделяющая вершина для двудольной части «внутренние сервисы — партнёры»

Петля «hairpin» исчезает геометрически: в графе с одним боксом внутренний сервис, пытающийся достичь внешнего сервиса через публичный адрес, должен был проходить через одну и ту же вершину дважды (сначала в роли исходящего, затем в роли входящего). В раздельном графе прохождение затрагивает две разные вершины.

Связность на каждой стороне остаётся равной 1, но две разделяющие вершины могут быть заменены независимо. Добавление второго прокси для входящего потока повышает связность на стороне входящего до 2, не изменяя сторону исходящего.

Репликация по сторонам

Производственные флоты часто запускают 2+ прокси-шлюза (HA) И 2+ прокси-эгресса (HA). Каждая сторона независимо достигает связности 2. Пропускная способность масштабируется горизонтально на каждой стороне по мере необходимости.

Команда в настоящее время использует один прокси-сервер (единственный критический узел для обоих направлений). Они разделяют его на один прокси-шлюз и один прокси-эгресс, а затем добавляют второй прокси-шлюз (пару HA), но оставляют один прокси-эгресс. Проследите, как изменяется связность графа на каждом шаге, и определите, какая из двух частей двудольного графа остаётся 1-связной после шага 3 (что делает её режимом отказа с наименьшей допустимостью).

Устойчивость к сетевым разделениям

Синтез

Теперь вы можете читать сетевые архитектуры как двудольные графы, находить разделяющие вершины и отслеживать связность в каждой доле.

Примените это к сетевым разделениям.

Сетевое разделение — это разрез графа: рёбра, пересекающие разделение, выходят из строя; обе стороны продолжают работать, но не могут связаться друг с другом.

Географически распределённая система имеет два центра обработки данных, соединённые единым межцентровым каналом. Входящий трафик поступает через ЦОД1; исходящий трафик проходит через ЦОД1 к внешним партнёрам; некоторые внутренние сервисы размещены в ЦОД2 и обращаются в ЦОД1 для операций с состоянием.

Предскажите, что произойдёт, если выйдет из строя межцентровый канал: (1) какие доли двудольного графа останутся связанными внутри каждого ЦОД, (2) какие потоки трафика продолжат работу, а какие прекратятся, и (3) предложите одно архитектурное изменение, которое позволит системе выдерживать это разделение с ограниченным снижением производительности, а не полным отказом.

Сопроводительные заметки

Сопроводительные заметки

Этот урок по геометрии переосмысливает основной урок Разделение входящего и исходящего трафика как анализ двудольного графа.

В следующем сопроводительном материале, geometry_of_failure_modes_and_blast_radius, выводится центральность междуности (идентификация узких мест) и минимальный срез (ограничение масштаба распространения сбоя).

Отличная работа.