Facebook открыл реализацию платформы и протокола маршрутизации Open/R
16 ноября 2017 года
Facebook открыл наработки, связанные с платформой маршрутизации Open/R, которая изначально развивалась как распределённая система маршрутизации для динамически меняющихся беспроводных mesh-сетей, но затем была перенесена для других сетевых применений, включая опорную сеть Facebook Express Backbone. Код эталонной реализации Open/R написан на языке C++ и распространяется под лицензией MIT. Для определения RPC-вызовов используется язык описания интерфейсов Apache Thrift, а для обмена сообщениями между узлами - шина ZeroMQ.
Для управления доступен расширяемый CLI-интерфейс Breeze, написанный на языке Python. Для интеграции с централизованными системами управления трафиком предоставляется API, позволяющих внешним обработчикам получать сведения о состоянии линков или отслеживать обновления БД, например, получать информацию об изменении пропускной способности. Также доступен эмулятор для тестирования при помощи виртуальных сетей на базе Open/R, поддерживающий симуляцию различных видов сбоев, трафика и характеристик работы участков сети (возникновения потери пакетов, перегрузки, задержек, jitter и т.п.).
Протокол Open/R подходит для создания автономных сетевых решений с построением оптимальных маршрутов на основе построения реплицируемой базы данных о состоянии каналов. Open/R может применяться как альтернатива OSPF и IS-IS, легко адаптируемая для различных применений. Распределённая система маршрутизации является одним из таких применений. Вместо реализации собственных механизмов согласования соединений, оформления кадров и других низкоуровневых элементов протокола, в Open/R применяется идея задействования языка Thrift для кодирования всех связанных с Open/R сообщений и применения для их передачи уже проверенной временем библиотеки ZeroMQ, позволяющей использовать такие расширенные схемы, как издатель-подписчик (Архивная копия от 6 августа 2020 на Wayback Machine).
Open/R также изначально спроектирован как универсальная платформа, не привязанная к конкретным аппаратным системам и маршрутизаторам. Логика построения маршрутов и обмена информацией с другими узлами полностью отделена от средств установки маршрутов через специальную прослойку (модуль Platform). В качестве основной платформы для Open/R применяется сетевое оборудование на базе открытой платформы FBOSS, такое как коммутаторы Wedge 100. При этом Open/R не зависит от ASIC и также может работать как поверх обычного сетевого стека Linux, так и с операционными системами Arista EOS и Juniper JunOS (QFX и PTX) через предоставляемый ими API на базе gRPC.
Элементы архитектуры Open/R:
- KV-STORE - отвечает за ведение распределённого хранилища в формате ключ/значение (in-memory DB на базе CRDT), синхронизацию данных и репликацию состояния между узлами;
- Spark - выполняет задачи обнаружения соседних узлов при помощи протокола Link-Local Multicast и обрабатывает сведения об активности соседей. Каждый Hello-пакет передаётся с указанием цифровой подписи узла, что позволяет проверить его достоверность;
- LinkMonitor - выполняет мониторинг сетевых интерфейсов, обращаясь через прослойку Platform, а также управляет сеансами модуля Spark и транслирует выявленные соседние узлы в модуль
KV-STORE (поддерживает локальную базу соседних линков и управляет сеансами с соседними узлами);
- PrefixManager - решает задачи автоматического распределения сетевых префиксов;
- Decision - вычисляет оптимальные маршруты и строит локальную таблицу маршрутизации на основе информации о топологии сети и базы префиксов, полученных из хранилища KV-STORE;
- FIB - работает как прокси для программирования вычисленных маршрутов в фактическом системном окружении, обращаясь к нему через модуль Platform. Также занимается поддержанием базы состояний вычисленных маршрутов (forwarding state);
- Platform - прослойка для низкоуровневого программирования маршрутизации и взаимодействия с сетевыми интерфейсами. Создаётся для каждой целевой аппаратной платформы и абстрагирует доступ к ней.
Основные возможности:
- Первоочередная поддержка IPv6 и задействование возможностей IPv6 по привязке локальных адресов для автоматической настройки без необходимости явного задания сетевой конфигурации;
- Полноценная поддержка маршрутизации IPv4 при необходимости;
- Распределение сетевых префиксов и настройка IP-адресов для узлов самоорганизующихся динамических сетей ( Ad hoc);
- Возможность перезапуска без остановки работы и без нарушения процессов перенаправления трафика, что позволяет организовать применение обновлений на лету;
- Поддержка подсоединения и вывода из сети узлов и линков;
- Динамическое вычисление метрик RTT (время приема-передачи) и их уточнение через активные проверки;
- Возможность установки собственных значений метрик, их статическая привязка или динамическое вычисление;
- Быстрая конвергенция сети с применением счётчиков отсрочки (backoff) для сбойных линков или узлов;
- Python-библиотека для взаимодействия со всеми основными процессами Open/R;
- Возможность расширения платформы путём распространения любых видов дополнительной информации и изменения логики вычисления маршрута;
- Непрерывный контроль работоспособности сети через отправку проверочных запросов;
- Наличие API для интеграции с централизованными системами управления.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.