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

un

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

Входящий и исходящий как отдельные множества

Бипартитные графы в архитектуре сетей

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

Границы сетей имеют естественную бипартитную структуру:

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

- Эгрессная сторона: внутренние сервисы на одной стороне, внешние назначения на другой. Ребра: внутренние сервисы, инициирующие исходящие вызовы, внешние ответы, возвращающиеся.

Асимметрия:

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

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

Однородная схема сводит обе бипартитные половины через одну вершину. Эта вершина имеет вход от снаружи (ингресс) И вход от внутри (эгресс в обратном направлении). Загрузка узла = сумма обеих сторон.

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

Бипартитный ингресс и эгресс: отдельные множества узлов, отдельные отрезанные вершины

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

Перед разделением: отрезанная вершина везде

Одиночная Бокс: Все Вещи Сосредоточены На Одной Вершине

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

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

После разделения: Вершина Разветвления Заменена Двумя Менее Тяжелыми Нодами

Разделение на вход + выход создает две графовые ноды, где было одна. Каждая нода теперь находится только на одной бипартиту:

- Нод входа: вершина разветвления для внешних-клиентов/internal-сервисов бипартиту

- Нод выхода: вершина разветвления для internal-сервисов/partners бипартиту

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

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

Репликация По Стороне

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

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

Толерантность К Разрыву Сетей

Синтез

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

Примените это к разделению сетей.

Разделение сети - это разрез графа: краевые ребра теряют работоспособность; обе стороны продолжают работать, но не могут достучаться друг до друга.

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

Предсказайте, что произойдет, если разорваться меж-District связь: (1) какие бипартиту останутся связанными внутри каждой DC, (2) какие потоки продолжатся, а какие остановятся, и (3) предложите одну архитектурную изменение, которое позволило бы системе переносить это разделение с ограниченным снижением производительности, а не полным отказом.

Дополнительные заметки

Дополнительные заметки

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

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

Хорошая работа.