Введение 4
1. Обзор предметной области 6
1.1. Porto: предпосылки создания 6
1.2. Porto-слои 6
1.3. Системы Nirvana и YTsaurus 7
1.4. Ранее реализованная функциональность 8
2. Постановка задачи 9
3. Требования 10
3.1. Потенциальные пользователи 10
3.2. Функциональные требования 10
3.3. Нефункциональные требования 11
4. Архитектура 13
5. Особенности реализации 15
5.1. Поиск по porto-слоям 15
5.2. Версионирование porto-слоёв 16
5.3. Настройка прав доступа к porto-слоям 17
5.4. Сложности, возникшие в процессе реализации 17
5.4.1. Миграции базы данных без долгих блокировок . . 18
5.4.2. Обеспечение обратной совместимости 19
6. Тестирование и апробация 20
6.1. Тестирование 20
6.2. Апробация 21
Заключение 22
Список литературы 23
Каждому сервису, предоставляющему вычислительные ресурсы, требуется обеспечить изоляцию пользовательских пространств как друг от друга, так и от возможного негативного воздействия на операционную систему, в которой они исполняются. Пользователям этих сервисов для запуска вычислительных процессов, кроме изоляции, необходимо настроенное определённым образом окружение — установленные пакеты и библиотеки. В компании Яндекс окружения и их изоляция в основном реализуются с помощью Porto и Docker. Porto — система контейнеризации, разработанная внутри компании.
Porto-слой является отдельным набором директорий с файлами, по структуре повторяющий Unix-систему и служащий для запуска задач в предсказуемом окружении. Porto-слои — де-факто стандарт внутри компании Яндекс для запуска задач в предсказуемом окружении. Они используются в вычислительных сервисах различного назначения, например, в YTsaurus — в сервисе распределённого хранения больших объёмов данных и распределённых MapReduce вычислений. Кроме того, porto-слои используются для организации непрерывной интеграции (continuous integration, CI) и непрерывной доставки (continuous delivery, CD) кода во внутренней системе контроля версий.
Однако работа со слоями далека от того, чтобы быть удобной и прозрачной. Во многих сервисах можно лишь указать идентификатор слоя, который нужно использовать для запуска задачи, но нельзя посмотреть никакую информацию о слое и тем более найти подходящий слой. Лишь в сервисе Nirvana (неспециализированная облачная платформа для визуализации, управления и запуска вычислительных процессов) уже реализован просмотр списка слоёв с различными фильтрами и сортировками, просмотр метаинформации слоя и сборка нового слоя.
В рамках данной работы предлагается вынести эту функциональность в отдельный сервис — реестр porto-слоёв внутри компании, а также реализовать настройку прав доступа и просмотр истории версий слоя и их списаний. Ожидается, что новый сервис повысит не только удобство работы с porto-слоями, но и переиспользуемость слоёв внутри компании. Это в свою очередь повысит эффективность выполнения задач в сервисах YTsaurus и Nirvana за счёт того, что популярные слои закэшируются на узлах вычислительных кластеров.
В ходе данной работы были получены следующие результаты.
• Выявлены потенциальные пользователи сервиса, проведен сбор их пожеланий к функциональности. Сформулированы функциональные и нефункциональные требования.
• Уточнена архитектура сервиса. Проведена интеграция с сервисом управления доступами пользователей. Сервис реализован на языке Java с использованием фреймворков Spring Boot, Maven и библиотеки Hibernate.
• Улучшен поиск по porto-слоям и добавлена следующая функциональность: версионирование porto-слоев и возможность настройки прав доступа к porto-слоям.
• Написаны unit-, mock- и интеграционные тесты для проверки корректности работы сервиса. В ходе выпуска релиза, а конкретно проведения миграции базы данных, удалось избежать недоступности сервиса. Проведена апробация сервиса пользователями, никакой из бизнес-процессов не был сломан. Пользователи отметили повышение удобства работы с porto-слоями.