Pull to refresh
VK
Building the Internet

Язык Go, PostgreSQL и видеоплатформы — обучающая разработка высоконагруженных сервисов от Ростелекома и GeekBrains

Reading time5 min
Views5.7K


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


Цель — научить студентов создавать комплексные сложные сервисы, в которых сочетается несколько технологий. О том, как все это будет выглядеть на практике, рассказывает Олег olegator99 Герасимов, директор центра компетенций в «Ростелеком ИТ» и одновременно — преподаватель факультета «Go-разработки» GeekBrains.


Почему Go, PostgreSQL и видеоплатформа, а не что-то другое?


Сейчас довольно популярными являются веб-сайты и сервисы, которые спроектированы по архитектуре SPA (Single Page Application). Это означает, что создаваемые сайты и сервисы взаимодействуют с выделенным backend-приложением через HTTP REST API.


Golang используется в качестве рабочего инструмента в проекте, поскольку это язык программирования, который имеет вполне явную специализацию: разработка серверного программного обеспечения, т.е. backend-проектов. В подавляющем большинстве случаев они предоставляют REST API для фронтенда и/или мобильных приложений.


Ну, и относительно видеоплатформы все объясняется просто. Дело в том, что разработка платформы интерактивного телевидения — вполне реальная задача, с которой можно столкнуться на практике. Еще более важно то, что в ходе ее разработки нужно использовать навыки и знания из смежных областей, причем таких, которые являются важными для любого другого крупного бэкенд-проекта, причем не только на Go. В ходе работы будет разработано полноценное бэкенд-приложение, спроектировано и задокументировано REST API, спроектированы схемы и структуры данные, которые затем будут переложены на SQL БД. PostgreSQL — выбран как наиболее популярная и хорошо себя зарекомендовавшая реляционная SQL БД.


В качестве наглядного примера используется платформа цифрового ТВ от «Ростелеком» Wink. Студенты могут сравнивать реально работающий проект со своим собственным сервисом.


Какие технологии нужны для разработки проекта?


Набор основных технологий и компонентов, которые будут использоваться, достаточно большой. Если говорить про основные, то получится такой набор:


  • SQL БД Postgres;
  • HTTP REST API, а также реализации HTTP web-сервера и роутера.

Кроме того, бонусом идет изучение технологии In-memory DB Reindexer. Студенты изучат еще и разработку метода поиска по базе фильмов с учетом морфологии русского языка. Для этого и будет использоваться DB Reindexer.


В принципе, на рынке существует довольно много разных БД, которые можно использовать, в том числе, для разработки платформы цифрового ТВ. Но большинство будет уступать проекту с DB Reindexer по производительности. Правда, только в том случае, если речь идет о высоконагруженном проекте.


Если же разрабатывается ТВ-платформа с небольшим количеством пользователей, можно выбирать практически любой другой инструмент, возможности которого устраивают разработчика. В качестве примера можно привести Elastic Search или Mongo — их вполне хватит для обслуживания проекта, который рассчитан на сотни тысяч пользователей. Но когда база пользователей достигает уже несколько миллионов, указанные решения не стоит использовать, поскольку это приведет к значительному увеличению количества серверов. Как следствие — увеличится стоимость поддержки проекта, ввода его в эксплуатацию и обслуживания.


Работа c Reindexer из Go не сложнее работы через ORM с обычной SQL БД, а за счет встроенного Query Builder в чем-то даже и проще. На освоение работы с Reindexer и его внедрение в проект уйдет немного времени. Reindexer и Go дают возможность разрабатывать бэкенды практически любых сервисов, где требуется отображение витрины с каким-либо контентом (фильмы, товары, книги и т.п.) со сложной фильтрацией. Подобную витрину можно использовать для интернет-магазина, сайта по продаже/аренде, туристического агентства и т.п.


Инструменты для создания высоконагруженного проекта


Самый минимальный набор для разработки такого рода проектов — IDE и отладчики. Для Golang доступно большое количество хороших IDE, как платных, так и бесплатных. Я бы рекомендовал Goland или VS Code — их возможности делают разработку удобнее и нагляднее. В качестве отладчика можно взять Delve.


Что касается реализации решений для поиска «узких» мест в памяти и производительности — можно использовать встроенный инструмент Go, который называется Pprof. Он в графическом виде отображает граф вызовов, который позволяет быстро локализовать и исправить чрезмерно ресурсоемкие места.


Ну а для визуальной работы с PostgreSQL решений еще больше, включая Psequel.


Наиболее важные моменты в разработке высоконагруженных проектов — инструменты для нагрузочного тестирования. Чтобы не было потом мучительно больно — лучше проверять все задолго до продакшена. Для быстрого и поверхностного тестирования в системе CI стоит использовать Wrk с обвязкой на Python. Wrk дает возможность сгенерировать большую нагрузку на методы HTTP REST API и оценить их скорость работы.


Глубокое нагрузочное тестирование со сложными пользовательскими сценариями стоит использовать Locust. Правда, наша команда разработала для него worker на Go, поскольку штатный Worker написан на Python, и его возможностей нам не хватало.



Что требуется, чтобы считаться хорошим разработчиком на Go?


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


Поэтому высококлассным разработчиком можно стать в том случае, если получить хороший комплексный бэкграунд:


  • принципы построения современных ОС;
  • принципы работы сущностей, с которыми работают ОС, включая процессы, потоки, файловые дескрипторы и т.п.;
  • уметь работать с командной строкой Unix: не просто немного разбираться, а работать;
  • понимать принципы работы компонентов: памяти, центрального процессора, сети, и т.п.

Кроме того, в силу специализации Go нужно и знание смежных технологий. В первую очередь это базы данных, не зря выше по тексту этому вопросу уделено столько внимания. Разработчик должен не просто уметь работать с конкретной БД, но и понимать, какие есть еще решения, какие у них плюсы и минусы. В итоге для каждого конкретного проекта программист должен уметь подобрать правильный тип БД.


После БД идет следующий «смежный» компонент — понимание стека сетевых протоколов и принципов их работы. Хороший разработчик должен уметь дать развернутый ответ на вопрос «Вы ввели в адресной строке браузера www.google.com. Что в этом момент происходит на уровне сетевого взаимодействия?»


И на третьем месте — знания и хотя бы небольшой опыт в DevOps. Уровень должен быть достаточным для автоматизации сборки и тестирования средствами Gitlab CI, Jenkins или им подобным CI/CD системам. Требуется еще и быть хотя бы поверхностно знакомым со средствами деплоя вроде Ansible и/или Chef.

Tags:
Hubs:
+24
Comments0

Other news

Information

Website
vk.com
Registered
Founded
Employees
5,001–10,000 employees
Location
Россия
Representative
Миша Берггрен