В своём проекте мы решали следующие задачи:
+ Скорость разработки задачи;
+ Стоимость поддержки задачи;
+ Возможность распараллеливать вычисления и задачи;
+ Возможность максимально просто масштабировать приложение;
+ CI/CD с минимальными усилиями.
Я расскажу о том, как мы решали эти задачи, на какие грабли мы наступали, что из этого всего получилось, и что делать дальше.
Что получили в итоге:
+ Мощь JVM под капотом Scala;
+ 15 минут от нажатия на кнопку "Merge request" до продакшена в 3 датацентра и 6 серверов с прохождением тестов (юнит + функциональные + интеграционные + нагрузочные);
+ 6 нод с приложениями вместо 18 (по 2 в каждом датацентре для отказоустойчивости) с запасом прочности в 60%;
+ Независимые пофичные релизы без даунтайма всех компонентов приложения;
+ Масштабирование только того функционала и в том количестве, которое необходимо данному сервису.
Report
Share
Report
Share
1 of 124
Download to read offline
More Related Content
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
16. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
16
17. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
17
18. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
• Много команд разработчиков, сервисов, интеграций
18
19. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
• Много команд разработчиков, сервисов, интеграций
• Много тестов, которые долго работают
19
24. Севисная архитектура (SOA)
— модульный подход к разработке программного обеспечения,
основанный на использовании распределённых, слабо связанных
заменяемых компонентов, оснащённых стандартизированными
интерфейсами для взаимодействия по стандартизированным
протоколам
24
70. Как распилить?
• Выделить каждую группу методов в отдельный сервис
• Начать с самого мелкого и несвязного сервиса
• Постепенно выделять сервисы, переходя к более крупным
70
81. Scala vs Java
• Те же библиотеки + свои
• Меньше кода, чем на Java
• Много success-story в микросервисах
• Асинхронность и многопоточность намного проще из коробки +
сторонние библиотеки
81
82. Scala vs Java
• Те же библиотеки + свои
• Меньше кода, чем на Java
• Много success-story в микросервисах
• Асинхронность и многопоточность намного проще из коробки +
сторонние библиотеки
• В компании есть несколько команд, использующих Scala на
продакшене
82
105. Тестирование
• Функциональные и интеграционные тесты на ваш продукт, которые у
вас должны быть
• Для нагрузки - yandex tank, gatling
• Для реверс-инжиниринга - gor
• Простой скрипт, кидающий запрос на 2 хоста и делающий diff
105
123. Итоги
• Поменьше велосипедов
• Ставьте себе четкие, достижимые цели в короткий срок
• Делайте задачи итеративно
• Решайте проблемы по мере из возникновения
• Преждевременная оптимизация - зло
123