ЧАСТЬ I
Надеюсь, вы пели! Если нет, то прошу прослушать упомянутую в заголовке композицию.
На прошлой неделе обсудили квазислучайные графы. Мельком упомянули, что это пример «хорошей сети», но без дополнительных пояснений. Сегодня разберём идею Jellyfish.
Сделаем ещё один шаг назад — к fat-tree. Ниже небольшая иллюстрация, как оно может выглядеть.
============== ЯДРО ============
[C1] [C2] <-- Core
| \ / |
| \---------/ |
| \-------/ |
=== ПОД 1 ====== ПОД 2 =========
[A1] [A2] [A3] [A4] <--
Aggregation
| X | | X |
[E1] [E2] [E3] [E4] <--
Edge / ToR
/ \ / \ / \ / \
S1 S2 S3 S4 S5 S6 S7 S8 <-
серверы
Это не совсем дерево, скорее странный лес, где кроны переплетаются друг с другом. Идея очень понятная.
За простоту приходится платить. Если помните, то для fat-tree есть формулы расчёта, каких узлов сколько нужно. Расчёты зависят от одного-единственного параметра — от количества портов на коммутаторе k. Например:
при k = 4 будет 16 серверов
при k = 6 будет 54 сервера
при k = 8 будет 128 серверов
и так далее (формулу серверов можно взять k³ / 4).
Давайте теперь представим: вы маленький стартап. Вам выше крыши хватало 16 серверов первые 5 лет. Вы построили fat-tree сеть. Но вот продукт подрос, клиентов стало больше, а с ними приходит нагрузка. Пора докупать сервера. Мы уверены, что дополнительных 16 серверов хватит ещё на 5 лет. Вот только ставить эти сервера некуда. Придётся перестраивать всё дерево и покупать более дорогие коммутаторы. В итоге ещё и получим сильно большую ёмкость сети, чем надо (следующая ступень — это сразу 54 сервера, а не 32).
Короче, у дерева есть проблемы (это не единственная). Но fat-tree реально долгое время был основной архитектурой для сетей.
В 2012 пришли ребята из Иллинойса со статьёй. Посыл: давайте забудем про дерево! Давайте возьмём коммутаторы и просто соединим их случайным образом! Но есть условие: граф должен быть регулярным. Так родилась концепция Jellyfish.
(Господи, доколе? Ещё какие виды графов есть?)
Что такое регулярный граф?
Регулярный — это такой, где у каждой вершины одинаковое число рёбер. На языке железа всё очень логично: у каждого коммутатора одинаковое количество портов. Скажем, из 32 портов 24 отдаём под серверы, а 8 — на связь с другими коммутаторами. Значит, у каждого узла ровно 8 рёбер «наружу» → степень 8 у всех.
Теперь добавим щепотку случайности: случайно раскидываем эти рёбра. Вот и вся топология.
Случайный регулярный граф ведёт себя квазислучайно. Это почти гарантирует нам равномерно размазанные рёбра, короткие пути, да ещё и разные варианты путей для случайной пары вершин.
Завтра разберём почему это круто и почему Jellyfish не серебряная пуля.
#бабанюра_программирует
