Какие технологии Яндекс строит для команд разработки?

Рассказ об отделе, который делает инструменты для разработчиков сервисов.

У Яндекса огромная инфраструктура хранения и обработки данных. Важно, что многие её составляющие сделаны в самой компании. Алексей Круглов, технический менеджер отдела технологий разработки, рассказал о технологиях внутри компании и о том, как его команда делает так, чтобы разработка всех сервисов Яндекса была максимально эффективной.

Яндекс сам проектирует и строит дата-центры, сети и механизмы управления десятками тысяч серверов, сам производит систему для параллельного выполнения вычислительных задач сразу на множестве машин (MapReduce). Есть свои базы данных, механизмы доставки «сообщений» (пакетов данных) и обработки в реальном времени. Дело в том, что большинство инструментов от сторонних производителей рассчитаны на гораздо меньшие объёмы и нагрузки — с нашими они не справляются. Специалисты компании решают самые хардкорные задачи в области распределённых систем и инфраструктуры.

Основная часть кода Яндекса хранится в едином репозитории. В компании работают тысячи разработчиков, каждый день создавая тысячи коммитов (записей изменений в кодовую базу) и пул-реквестов (запросов на применение этих изменений). Поддержка огромной кодовой базы наряду с обеспечением высокой производительности большого числа разработчиков — это серьёзный вызов.

Зона ответственности нашего отдела начинается в момент написания кода и заканчивается тогда, когда программа собрана и готова к выпуску на внешнюю аудиторию пользователей. Через создание удобных инструментов отдел делает так, чтобы у любого проекта Яндекса была готовая инфраструктура для быстрого и качественного написания программ.

Системы контроля версий (VCS)

Мы живём по принципам единого репозитория и trunk-based development. Это идеология развития проекта в основной ветке разработки (master branch или trunk). Важно надолго от неё не отступать, избегать создания долгоживущих параллельных веток. Тем самым мы поддерживаем кодовую базу Яндекса в порядке. При этом возникает задача масштабирования — расширения систем под нужды разных команд. Речь идёт о двух системах — контроля версий и работы с исходным кодом. Сейчас мы разрабатываем свою систему контроля версий — Arc. В ней комфортно работать и можно быстро вносить изменения в большую кодовую базу. В разных подразделениях сейчас используются разные VCS — Arc заменит их все и вберёт в себя весь исходный код Яндекса. Интерфейс Arc похож на интерфейс самой популярной VCS в мире — Git.

Сервис для работы с исходным кодом 

Ежедневно через него проходит более 2000 изменений кода и более 1000 успешных проверок: их каждый раз выполняют коллеги автора кода. Наш продукт упрощает и ускоряет работу с кодовой базой Яндекса: на сервисе доступны поиск и навигация по коду, отслеживание изменений, проверка кода (code review), запуск тестов и многое другое. Это один из основных инструментов разработчика в Яндексе.

Системы сборки

В основном в компании применяют четыре языка программирования: C++, Java, Python и Go. На них написаны сотни систем, приложений и сервисов. Когда в разных проектах требуется использовать один и тот же алгоритм, принято не просто его копировать, а хранить отдельно и ссылаться на него везде, где необходимо. Так возникают проекты, зависимые от этого кода. И если он меняется, все зависимые от него проекты нужно заново собрать — превратить в готовые исполняемые файлы и приложения. Если выполнять подобную задачу на одном сервере, она займёт слишком много времени. Поэтому вычислительная нагрузка распределяется по нескольким серверам.Проекты можно параллельно и с большой скоростью собирать при помощи Ya make — нашей системы сборки. Ya make позволяет легко реализовать описанную схему с многократным использованием фрагментов кода, но это имеет свою цену: каждый раз мы заново тестируем весь код, затронутый изменением. Так что у нас строгие требования к скорости работы системы. Повышение скорости — один из вызовов, стоящих перед нами прямо сейчас.

Тестовая инфраструктура 

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

Sandbox

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

Система непрерывной интеграции

В Яндексе работают несколько тысяч разработчиков, они пишут сотни программ, тысячи библиотек и сотни тысяч тестов. Наша инфраструктура позволяет специалистам быстрее выполнять свои задачи, автоматически проводя сборку и тестирование кода при каждом изменении и для всех платформ. Сборки и тесты запускаются параллельно на больших кластерах из сотен серверов. Подробнее можно почитать в статье на Хабре: часть первая и часть вторая.

Инфраструктура мобильной разработки

Сотни разработчиков трудятся над тем, чтобы десятки миллионов пользователей могли ежедневно решать свои задачи с помощью мобильных устройств и приложений. Отдел создаёт и улучшает инструменты, которые позволяют повысить скорость мобильной разработки и доставки изменений пользователям. Сюда входят инструменты разработки, тестирования и сборки для мобильных приложений, а также внутренние общие библиотеки для iOS и Android.

Selenium Grid

Распределённая «ферма» браузеров для тестирования вёрстки страниц. Сейчас у нас одна из самых больших в мире ферм такого рода. Проверка на Selenium Grid является частью процедуры обновления базы поиска. Кроме того, во множестве команд такая проверка обязательно проводится перед запуском или обновлением сервисов. Отсюда — самые высокие требования по надёжности и стабильности. Сервис постоянно развивается, предоставляя сотрудникам новую функциональность (например, запись видео тестов) и поддержку новых платформ: например, тесты можно прогонять в симуляторе iPhone и iPad. Подробности можно узнать в статье на Хабре.

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

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