Обновление Safe Network 🇷🇺 03 ноября 2022 г

Это машинный перевод. Оригинал на английском здесь: Update 3 November, 2022

Недавние обновления того, как обрабатываются события оттока, привели к осознанию того, что пользовательский процесс, который мы использовали для секции генезиса сети, больше не требуется. Чем меньше сложность, тем меньше путей кода, что дает множество преимуществ. @davidrusu объясняет немного подробнее ниже.

Общий прогресс

На этой неделе мы продвинулись дальше с использованием двунаправленного потока в узлах, так что теперь у нас есть поток, совершающий полное путешествие туда и обратно… от «клиента к старому, к взрослому, к старшему, к клиенту» для сообщения «ACK». Другими словами, ACK теперь будут поступать только после того, как данные будут записаны (тогда как main был ACK при получении сообщения в старших… взрослые не участвовали). Это аккуратно избегает целого класса ошибок во время тестов и дает нам больше уверенности в том, что мы видим во время хранения данных на клиенте.

Мы также усердно работали над рефакторингом, упрощая код. PR-менеджер @anselme привел в порядок кое-какую работу DKG. @roland почистил больше тестового кода, а @bzee усердно работает над обновлением для последнего ящика quinn и изменений, связанных с использованием streams в нем.

Делаем раздел Бытие менее особенным

Есть несколько вещей, которые делают самый первый раздел Safe Network особенным, например, это единственный раздел, у которого нет родительского раздела (очевидно). Но когда мы строим сложные системы, мы не хотим чего-то особенного. Это еще один случай для размышления.

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

то есть

  1. Узел A пытается присоединиться с возрастом узла по умолчанию, равным 4 годам.
  2. Сеть отвечает «Повторить попытку (возраст = 97)».
  3. Узел A снова запускает процесс присоединения с возрастом 97 лет.
  4. Сеть их принимает.
  5. Узел B пытается присоединиться с возрастом узла по умолчанию 4.
  6. Сеть отвечает повторной попыткой (возраст = 96) (возраст следующего узла снижается).

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

  1. Узлы A, B, C, D одновременно пытаются присоединиться с возрастом узла по умолчанию 4.
  2. Сеть отвечает «Retry(age=97)» всем им.
  3. Узлы A, B, C, D снова запускают процесс соединения с возрастом 97.
  4. Допустим, сеть принимает Node A.
  5. Узлы B, C, D по-прежнему будут пытаться присоединиться с возрастом 97, им нужно будет снова выполнить логику синхронизации возраста.

Причина, по которой мы это делали, заключалась в том, чтобы избежать чрезмерных перемещений в начале сети. Если вы помните, узлы выбираются случайным образом для перемещения в другие разделы, когда происходит событие оттока. Чем моложе был узел, тем больше вероятность, что его выберут для перемещения. Чтобы избежать одновременного перемещения 80 % вашего раздела, мы ввели этот алгоритм возрастного шага, чтобы снизить вероятность того, что произойдет перемещение.

В какой-то момент мы изменили способ обработки событий оттока, чтобы ограничить количество узлов, которые можно перемещать одновременно, чтобы разделы могли поддерживать здоровое количество взрослых.

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


Полезные ссылки

Не стесняйтесь отвечать ниже со ссылками на переводы этого обновления для разработчиков, и модераторы добавят их сюда.

Как проект с открытым исходным кодом, мы всегда ждем отзывов, комментариев и предложений сообщества - так что не стесняйтесь, присоединяйтесь и давайте вместе создадим безопасную сеть!