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

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

Как, несомненно, многие здесь знают, взрослые — это узлы, которые хранят данные и предоставляют их по запросу. Но что, если они начнут вести себя по-детски, отказываясь хранить или передавать данные или, по крайней мере, делать это медленнее, чем ожидалось? Ради сети нам нужно понизить или исключить такие своенравные узлы, но прежде чем мы это сделаем, мы должны перераспределить данные, которые они хранят. Нам также необходимо предоставлять осмысленные сообщения об ошибках клиентам и другим узлам, пытающимся сохранить данные, когда это не удается. Это то, что мы углубляемся в эту неделю.

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

@bochaco работает над безопасной оболочкой. Если вы введете «safe» в консоль (конечно, после установки «safe_network»), вы войдете в оболочку, что означает, что вам не нужно вводить «safe» каждый раз после этого. Со всеми недавними обновлениями CLI этот аспект остался немного позади, так что он исправляет это. А также приведение в порядок и рефакторинг кода узла в рамках подготовки к предстоящим изменениям членства.

В лабораториях DBC @danda работает над интеграцией Ring CT в сеть, в том числе над тем, чтобы сделать DBC более удобными для использования с двумя типами ключей: долгосрочный базовый ключ владельца для взаимодействия с третьими сторонами, например для пожертвований. , а также производный одноразовый ключ для взаимодействия с монетными дворами и расходной книгой. Он также работает над тестовыми функциями, которые можно включать и выключать для отладки и оптимизации, а также сократил количество вызовов, необходимых для повторения потраченной книги.

Что касается репликации данных, @yogesh добился прогресса в модели извлечения данных, в которой взрослым будет сказано, какие данные они должны хранить, и они начнут автоматически извлекать данные из сети, чтобы обеспечить нужное количество копий для избыточности. Подробнее об этом ниже.

А @joshuef и @Qi_ma рассматривают проблемы с подключением клиентов, возникающие из-за игровой площадки и комнета. Мы возможно устранили одну ошибку, интенсивно использующую ЦП (по крайней мере, мы больше не можем воспроизвести ее в данный момент), поэтому мы постараемся проверить это на грядущей игровой площадке.

Превентивная репликация данных и взрослые ошибки

Правильно функционирующие взрослые являются основой сети, и крайне важно, чтобы взрослый начал плохо себя вести, он был заменен, а хранящиеся в нем данные плавно перемещены. Это называется превентивной репликацией данных и подробно описано в PR #976.

Проверка работоспособности

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

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

Все это требует от взрослого узла некоторого самоосознания того, насколько он полон. Проверка места довольно ресурсоемка, поэтому мы делаем это шагами примерно по 10% доступного места.

Ошибки взрослых

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

Ниже приведен список ошибок, которые могут возникнуть на взрослом узле во время операций PUT/GET (не считая ошибок AE и DKG), и ответы, над которыми мы работаем.

CouldNotStoreData — ошибка взрослого во время хранения из-за механизма хранения взрослого. В этом виноват взрослый. Возможные причины: сбой при создании каталогов, проблемы с файловой системой или базой данных, используемой для хранения регистров, поврежденные регистры или неправильные пути к файлам.

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

NodeFull - узел заполнен! Сообщение об ошибке возвращается старшему, запрашивающему хранилище. Возможно, мы могли бы оштрафовать взрослых, которые не сообщили нам заранее, что уровень их запасов становится низким.

Ошибка спама

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

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


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

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

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