Яндекс опубликовал исходный код кадра просмотр пользователя, что позволяет создавать высоконагруженные приложения C++, работающие в асинхронном режиме. Рама проверено на загрузках уровня Яндекса и используется в таких сервисах, как Яндекс Go, Лавка, Доставка, Маркет и финтех-проектах.
просмотр пользователя лучше всего подходит для разработки приложений с микросервисной архитектурой. Изначально отметкаили был разработан для Яндекс Такси, с его помощью команда перешла от монолитного приложения к архитектуре, позволяющей разрабатывать отдельные независимые компоненты (микросервисы) и использовать их в разных приложениях.
Сегодня мы объявляем о выпуске пользовательского фреймворка с открытым исходным кодом для создания высоконагруженных приложений. Для нас это важный способ поделиться накопленным нами опытом разработки микросервисов. Вот ссылка на репозиторий GitHub с исходным кодом, документацией, примерами, шаблоном для создания собственных сервисов (с настроенным CI, средой сборки и тестирования) и сервисом динамической настройки. Все это выпускается под лицензией Apache 2.0.
Микросервисы автономны, поэтому приложение, основанное на такой архитектуре, легко обновлять и добавлять в него новые функции. Поэтому микросервис по поиску водителя для заказов Такси можно использовать для аналогичной задачи, например, найти курьера для выполнения заказов Яндекс Доставки. То же самое можно сделать с расчетом времени прибытия водителя или курьера и многими другими задачами.
Фреймворк изначально создавался с упором на надежность и удобство, а внутри предоставляет все необходимое для разработки, диагностики, мониторинга, отладки и экспериментов. Например, userver подсказывает, как исправить ошибки на этапе сборки, умеет работать с разными базами данных, менять параметры на лету и т. д.
Относительно состава упоминается, что включены драйверы для асинхронной работы с СУБД (MongoDB, PostgreSQL, Redis, ClickHouse, MySQL), клиенты и серверы, работающие асинхронно для различных протоколов (HTTP, HTTPS, GRPC, TCP, UDP, TLS), низкоуровневые примитивы для управления синхронизацией и доступом к возможностям системы, а также высокоуровневые компоненты для работы с кэшированием, задачами, распределенными блокировками, трассировкой, метриками, статистикой и данными в форматах JSON/YAML/BSON, плюс поддерживает изменение конфигурации сервиса на лету, без его остановки.
Что касается недостатков монолитной архитектуры упоминаются следующие:
- Консолидация всего кода в монолите. С большой кодовой базой сборка и тестирование могут занять несколько часов, а развертывание — целый день.
- Тесное взаимодействие разных частей кода. Вы должны потратить много усилий на проверку кода, чтобы интерфейсы к различным частям монолита не превратились в беспорядок.
- Хрупкость. Изменение в одном модуле может привести к поломке другого модуля.
- Размытые зоны ответственности. В процессе разработки многие части кода обобщаются, начинают использоваться разными командами, и это хорошо. Но в результате непонятно, кто отвечает за получившийся модуль: первые авторы; те, кто внес больше всего правок; или те, кто наиболее активно использует модуль в коде.
Ранее Яндекс передавал другие свои ключевые технологии в виде открытых проектов, например, систему управления распределенной базой данных YDB, способную обрабатывать миллионы запросов в секунду, а также библиотеку машинного обучения CatBoost, которую Яндекс использует в Поиске и других Сервисы.
В конце концов для тех, кто хочет узнать об этом большеОбратите внимание, что Userver в настоящее время поддерживается для систем Ubuntu, Debian, Fedora, Arch, Gentoo, macOS, архитектур x86, x86_64, AArch64, Arm, компиляторов GCC 8+ и Clang 9+, стандартов C++17, C+ +20, C ++23.
Код Userver написан на C++ и Открыто под лицензией Apache 2.0, и с ним можно ознакомиться на веб-сайте по следующей ссылке.