Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
- 16. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
16
- 17. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
17
- 18. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
• Много команд разработчиков, сервисов, интеграций
18
- 19. Проблемы
• Долго работают скрипты (95% - 500ms)
• Невозможно параллельно, многопоточно выполнять какие-то задачи
• Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
• Кеширование не спасает
• Много команд разработчиков, сервисов, интеграций
• Много тестов, которые долго работают
19
- 24. Севисная архитектура (SOA)
— модульный подход к разработке программного обеспечения,
основанный на использовании распределённых, слабо связанных
заменяемых компонентов, оснащённых стандартизированными
интерфейсами для взаимодействия по стандартизированным
протоколам
24
- 73. Прототип
• Тяжелый метод - поисковый запрос, запросы в БД, формирование
2000 маркеров с хешами, куча json-а
• PHP, PHP7, Java, Scala
73
- 74. Прототип
• Тяжелый метод - поисковый запрос, запросы в БД, формирование
2000 маркеров с хешами, куча json-а
• PHP, PHP7, Java, Scala
• SLA - 95% за 300ms
74
- 81. Scala vs Java
• Те же библиотеки + свои
• Меньше кода, чем на Java
• Много success-story в микросервисах
• Асинхронность и многопоточность намного проще из коробки +
сторонние библиотеки
81
- 82. Scala vs Java
• Те же библиотеки + свои
• Меньше кода, чем на Java
• Много success-story в микросервисах
• Асинхронность и многопоточность намного проще из коробки +
сторонние библиотеки
• В компании есть несколько команд, использующих Scala на
продакшене
82
- 94. Spray
path("api" / "1.0" / "some" / "method") {
parameters('id.as[String]) { id =>
val response = DoSomeWork(id)
onSuccess(response) { content =>
complete(content)
}
}
}
01.
02.
03.
04.
05.
06.
07.
08.
94
- 95. Spray json
case class User(name: String, isOk: Boolean)
implicit val UserFormatter = jsonFormat2(User)
val json = """{"name": "Denis", "isOk": true}"""
val user = json.parseJson.convertTo[User]
01.
02.
03.
04.
05.
06.
07.
95
- 105. Тестирование
• Функциональные и интеграционные тесты на ваш продукт, которые у
вас должны быть
• Для нагрузки - yandex tank, gatling
• Для реверс-инжиниринга - gor
• Простой скрипт, кидающий запрос на 2 хоста и делающий diff
105
- 110. Стало
• Сборка - 2 минуты
• Тесты (с нагрузкой) - 5-10 минут
• Деплой - 5 минут
• Серверов - 6 вместо 18 (по 2 в каждом ДЦ)
110