Архитектура и управление

18 января 2023
Архитектура и управление

С наступившим, гоферы! Поговорим про чистую архитектуру и хороший код, взглянем на экспериментальную фичу по управлению памятью и узнаем про альтернативу традиционному OpenSSH-серверу.

Чистая архитектура

Умение адаптироваться к внешним условиям — важное условие разработки для бизнеса. Как только бизнес требует внести изменение, а разработчик начинает сомневаться, не сломает ли это какую-то функциональность — это хороший повод задуматься о переходе на чистую архитектуру. Это даст возможность организовать код так, чтобы не зависеть от используемых фреймворков, UI или баз данных. Бонусом станет предсказуемое поведение всех компонентов построенной системы.

Минусов у чистой архитектуры тоже достаточно. Необходимо соблюдать правила обмена данными между условными «слоями» приложения. Так что решение даже простых задач потребует написания большего количества кода. Проектировать взаимодействие модулей сложно. Это дополнительный барьер для внедрения чистой архитектуры.

Удобно иметь наглядный пример такой архитектуры, вроде проекта go-backend-clean-architecture. Это такой шаблон с заранее подобранными слоями и проверенными временем инструментами. Общая схема взаимодействия выглядит следующим образом:

Чистая архитектура

В качестве инструментов для реализации этой схемы автор выбрал достаточно популярные пакеты:

  • gin — веб-фреймворк;
  • mongo go driver — коннектор для MongoDB;
  • jwt — аутентификация на основе токенов;
  • viper — загрузчик конфигурации;
  • bcrypt — хэш-функция формирования ключа;
  • testify — тестирование правильности работы кода;
  • mockery — фиктивная реализация интерфейсов.

Существует два варианта развёртывания шаблона: в Docker-контейнере и локально (требуется наличие установленного go и MongoDB). Документация для каждого из вариантов есть в репозитории проекта. 

Если вы серьёзно задумались, как спроектировать приложение на чистой архитектуре, обратите внимание на книгу «Чистая архитектура. Искусство разработки программного обеспечения» Роберта Мартина. В ней освещены вопросы архитектуры и дизайна приложений. Это универсальные знания, которые будут полезны разработчикам, системным архитекторам и аналитикам данных.

Экспериментальная arena

Остаётся совсем немного времени до февральского релиза Go 1.20. Есть в нём одна интересная экспериментальная фича — арены памяти. Давайте кратко разберёмся, что это такое и зачем нужно.

Не секрет, что в Golang существует специфический garbage collector (GC). Именно он следит, чтобы приложение не упало, обожравшись памяти. Задумка была такая, чтобы разработчику в целом не приходилось заботиться о ручном управлении памятью.

Пока приложение выполняется, GC следит за объектами и помечает трёхцветным алгоритмом, какие из них оставить в куче, а какие удалить. Как только размер помеченных на удаление объектов удваивает изначальный размер кучи — именно в этот момент происходит стирание объектов и освобождение памяти.

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

Вот тут мы возвращаемся к тому, с чего начали — аренам памяти. Это попытка увеличить производительность за счёт того, что в специально выделенных участках памяти (аренах) GC не будет функционировать. При этом у разработчика будет возможность выделять адреса объектов в такой арене, а также иметь возможность вручную запустить процесс освобождения памяти через вызов free. При этом вся арена будет очищена.

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

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

Ну а проблемами здесь могут стать контроль за утечкой памяти и попытка чтения/записи в структуру на освобождённой арене. Предполагается, что в первом случае будут хорошо работать штатные механизмы профилирования. А для второго Address sanitizer и Memory sanitizer через go run -asan и go run -msan соответственно.

Альтернатива OpenSSH

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

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

Wish

 

Впрочем, можете самостоятельно подключиться к SSH-серверу git.charm.sh и проверить работу платформы. Используя связку из небольшого TUI-фреймворка BubbleTea и Wish, можно создавать красивые приложения, предназначенные для работы в терминальном режиме.

Автор платформы не стал изобретать велосипед и воспользовался готовой реализацией протокола от GliderLabs. Её писали в сотрудничестве с разработчиком знаменитого ssh-chat.

Видеоподкаст про Go

Видеоподкаст "Немного IT" снимают и развивают двое наших коллег из Evrone. Они обсуждают его преимущества и недостатки, сравнивают с другими языками. Выпуски длятся 50-70 минут, а значит можно совместить какие-нибудь скучные занятия с обучением. Отличная возможность погрузится в нюансы Go, стоя в пробке или проезжая очередную станцию метро! Ну а если вам есть что сказать — добро пожаловать в комментарии! Сайт проекта.

Митапы

Онлайн

Go meetup

15 марта 2023

Год только начался, а у нас уже запланирован Go Meetup, который пройдёт 15 марта 2023. Программа мероприятия формируется, но регистрация уже открыта. Кстати, вы уже можете подать доклад прямо в режиме онлайн. Заявки на участие принимаются до 1 марта.

Интересуетесь нашими мероприятиями? В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи прошедших митапов. Тем для кого выступать в новинку, мы оказываем всяческую поддержку и помогаем оформить экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.

Регистрация

Вакансии

Удаленка / Офис

Evrone 

Мы открыты для новых Go-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах и выступления на конференциях, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.