Skip to content

Федерация ​

Основные задачи Федерации ​

  1. Для UnitNode, возможность создать связь между инстансами для получения данных с qos <= 1
  2. Синхронизация публичных Repo Registry, для единого реестра доступных репозиториев
  3. Возможность для пользователя, полностью выкачать свои данные - сделать бекап своего аккаунта

Связь UnitNode между инстансами ​

Связь UnitNode между инстансами, в том числе между разными пользователями, подписывается приватными ключами пользователей на стороне пользователей. Нужны две подписи.

  1. Владелец unit на первом инстансе подписывает запрос своим приватным ключом: какой выход его UnitNode пишет в какой вход UnitNode на втором инстансе.
  2. Владельцу unit на втором инстансе приходит уведомление с другого инстанса с просьбой подписать связь. В уведомлении уже лежит подпись приватным ключом пользователя, владельца unit на первом инстансе.
  3. Связь включается после второй подписи. Пока её нет, сообщения в этот вход не принимаются.
  4. На обоих инстансах обязательно есть аккаунты инициатора, для pair
  5. домен сверяется через отдельный https запрос

Модерация инстансов в федерации ​

  1. Автоматический бан (инкремент 1, 7, 30 дней) Внешних UnitNode, которые превышают лимиты, между инстансами
  2. Автоматическая система прерывания доверия между инстансами с добавлением инстанса в чёрный список
  3. Ручное отключение администратором инстансов по чёрным спискам. Для крайних случаев

Нагрузка ​

Раз в час MessageProcessor сравнивает суммарную нагрузку Unit с ресурсами инстанса и выставляет статус:

  1. Зелёный — доступен для создания Unit, нагрузка < 70%
  2. Жёлтый — система на грани тротлинга, нагрузка > 70% < 90%
  3. Красный — система в тротлинге, нагрузка > 90%
    • Часть Unit принудительно отключена, как ошибка отдаётся тротлинг системы

Доработки MessageProcessor ​

Внешнее взаимодействие ​

  1. Всё работает на актуальной таблице внешних связей + подписи
    • из этой таблице понятно куда ретранслировать внутренние сообщения
    • из этой таблицы понятно каким сообщеним можно доверять снаружи
  2. Транспорт - gRPC
  3. При отправке mqtt -> gRPC при получении gRPC -> mqtt
  4. Ставит ttl и прочие параметры сообщения, чтобы не было петель и дублей
  5. Выдаёт отказ в обслуживании при превышении лимита внешних сообщений
  6. Прерывает доверие между инстансами если много аномальных топиков
  • Секурное и стабильное внешнее общение

Механизм подписи связи между двумя UnitNode на разных инстансах ​

  • Пользователь доверяет обоим инстансам
  • Подписей всегда две. Вторая ставится на уже наполовину подписанный контракт, который приходит уведомлением
  • Один мульти аккуант на разных инстансах: Один и тот же аккаунт подписывает оба раза своим приватником: второй раз на другом инстансе.
  • Два мульти аккуанта на разных инстансах: вторую подпись ставит другой владелец, перед этим сверив отпечаток чужого постоянного публичного ключа. Важно чтобы аккаунт первого мультикааунта был представлен на обоих инстансах
  • номер редакции
#ЭтапЧто происходитКлючи
1Первая подписьИнициатор подписывает контракт: какой выход какого Unit пишет в какой вход, номер редакции. Связь ещё выключенаПостоянный приватный ключ инициатора
2Наполовину подписанный контрактНа второй инстанс приходит уведомление. В нём уже лежит первая подпись. Тот же аккаунт подписывает второй раз своим приватником. Другой аккаунт сверяет отпечаток и подписывает своимВторая подпись: тот же приватный ключ или приватный ключ второго владельца
3ВключениеСвязь включается только после второй подписи. До неё сообщения в этот вход не принимаютсяОбе подписи сходятся с постоянными публичными ключами
4ДоставкаИнстанс отправителя передаёт тело, uuid Unit, выход и вход по gRPC на домен из связи. Домен сверяется отдельным https-запросомПодписи на этом шаге нет
5ПриёмИнстанс получателя кладёт тело во вход, если домен отправителя тот, что в связи, и обе подписи на контракте сходятсяПостоянные публичные ключи подписавших
  • Отозвать связь можно новым номером редакции: снова первая подпись, затем наполовину подписанный контракт и вторая подпись. Либо удалив контракт на своей стороне.
  • Потребуется глубойкий рефактор таблиц, чтобы внешние инстансы корректно работали