SlideShare a Scribd company logo
Путь от монолита на PHP к
микросервисам на Scala
Иванов Денис
2gis.ru
2GIS WebAPI
Данные
•  8 стран
•  300 городов
•  50 тыс населенных пунктов
•  5 млн организаций
•  50 млн гео-объектов
И еще много всего
3
Нагрузка
•  30 млн. пользователей в месяц
•  2000 RPS
•  3 датацентра
4
Одна нода
•  16 CPU
•  16 GB RAM
•  Минимальная нагрузка - 50%
5
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Проблемы
•  Долго работают скрипты (95% - 500ms)
•  Невозможно параллельно, многопоточно выполнять какие-то задачи
•  Приложение - один большой кусок, который нужно выкатывать очень
часто и целиком
•  Кеширование не спасает
•  Много команд разработчиков, сервисов, интеграций
•  Много тестов, которые долго работают
7
Решения
•  Поддерживать существующее и жить дальше
•  Переписать всё нафиг
•  Подумать и распилить приложение на независимые куски
8
Севисная архитектура (SOA)
— модульный подход к разработке программного обеспечения,
основанный на использовании распределённых, слабо связанных
заменяемых компонентов, оснащённых стандартизированными
интерфейсами для взаимодействия по стандартизированным
протоколам
9
Микросервисная архитектура
•   Малый размер
•   Тонкое масштабирование
•   Быстрый деплой
•   Лёгкость тестирования (Мок)
•   Любой язык
10
Микросервисная архитектура
•   Десятки приложений вместо одного
•   Сложность интеграционного тестирования
11
Поехали!
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Shipyard
•  https://shipyard-project.com/
23
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Consul
•  https://www.consul.io/
29
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Consul-template
•  https://github.com/hashicorp/consul-template
31
Consul-template
{{range tree "service/redis@east-aws"}}
{{.Key}} {{.Value}}{{end}}
32
Cadvisor
•  https://github.com/google/cadvisor
33
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Router
{
"route": "/api/1.0/some/method",
"chain": [
...
]
}
42
Router chain
{ "key": "ms4",
"method": "/api/0.0.1/ms4",
"data": {},
"timeout": 2000,
"maxRetries": 0,
"isVital": true,
"waitFor": ["ms1", "ms2"] }
43
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Базовый образ для контейнера
•  Ubuntu ~500мб, deb-пакеты
•  BusyBox ~50мб, нет пакетов
48
Java SDK
•  Gradle
•  Jetty
•  BoneCP
•  JDBC
49
STOP!
Как распилить?
•  Выделить каждую группу методов в отдельный сервис
•  Начать с самого мелкого и несвязного сервиса
•  Постепенно выделять сервисы, переходя к более крупным
51
Прототип
•  Тяжелый метод - поисковый запрос, запросы в БД, формирование
2000 маркеров с хешами, куча json-а
•  PHP, PHP7, Java, Scala
•  SLA - 95% за 300ms
52
Бенчмарк
Реализация SLA Смерть
php 30 rps 40 rps
php7 70 rps 80 rps
java 160 rps 180 rps
scala 180 rps 200 rps
53
Scala vs Java
•  Те же библиотеки + свои
•  Меньше кода, чем на Java
•  Много success-story в микросервисах
•  Асинхронность и многопоточность намного проще из коробки +
сторонние библиотеки
•  В компании есть несколько команд, использующих Scala на
продакшене
54
Интеграция
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Библиотечки
•  Spray
•  Spray json
•  Typesafe config
•  Akka
•  HikariCP
•  JDBC
59
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.
60
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.
61
Typesafe config
databases {
catalog {
host = "127.0.0.1"
port = 5432
timeout = 5s
}
}
01.
02.
03.
04.
05.
06.
07.
62
Инвентарь
•  Scala - основной язык для микросервисов
•  TeamCity - сборка и деплой
•  Ansible - деплой
63
Тестирование
•  Функциональные и интеграционные тесты на ваш продукт, которые у
вас должны быть
•  Для нагрузки - yandex tank, gatling
•  Для реверс-инжиниринга - gor
•  Простой скрипт, кидающий запрос на 2 хоста и делающий diff
64
Стало
•  Сборка - 2 минуты
•  Тесты (с нагрузкой) - 5-10 минут
•  Деплой - 5 минут
•  Серверов - 6 вместо 18 (по 2 в каждом ДЦ)
65
Грабли
•  CORS
•  gzip
66
Что дальше?
•  Продолжать распиливать сервисы
•  Двигаться к поставленной цели (к "идеалу")
67
Итоги
•  Поменьше велосипедов
•  Ставьте себе четкие, достижимые цели в короткий срок
•  Делайте задачи итеративно
•  Решайте проблемы по мере из возникновения
•  Преждевременная оптимизация - зло
68
Вопросы?
Иванов Денис
dv.ivanov@2gis.ru
69
Ad

Recommended

«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
«Система развёртывания многокомпонентного сервиса» — Алексей Салов, YaC 2013
2ГИС Технологии
 
Cергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИС
Ontico
 
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
«Дорожная сеть в графовой базе данных Neo4j» — Вадим Шашенко, 2ГИС
2ГИС Технологии
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Денис Иванов
Денис Иванов
CodeFest
 
Загрузка больших объемов данных для бизнес-аналитики
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Антон Галицын
Антон Галицын
CodeFest
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Ontico
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Ontico
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Dev2Dev
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Ontico
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
 

More Related Content

What's hot (20)

Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Антон Галицын
Антон Галицын
CodeFest
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Ontico
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Ontico
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Dev2Dev
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Ontico
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
Антон Галицын
Антон Галицын
CodeFest
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
Badoo Development
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Ontico
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Ontico
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Dev2Dev
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Ontico
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Ontico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 

Viewers also liked (20)

Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
 
Article25
Article25
Harry Wood
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
2ГИС Технологии
 
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
it-people
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
2ГИС Технологии
 
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
2ГИС Технологии
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
 
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
2ГИС Технологии
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
2ГИС Технологии
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
2ГИС Технологии
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
2ГИС Технологии
 
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
DUMP-2013 Serverside - Разработка развесистого API - Коржнев Сергей
it-people
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
2ГИС Технологии
 
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
«Девиации и патологии в отношениях с руководителями и подчинёнными» — Степан ...
2ГИС Технологии
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
«Реактивные грабли» — Дмитрий Кулижников, 2ГИС
2ГИС Технологии
 
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
«Badger — инструмент для мониторинга качества продуктов» – Ирина Шрейдер, 2ГИС
2ГИС Технологии
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
 
Ad

Similar to «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС (20)

Денис Иванов
Денис Иванов
CodeFest
 
Sivko
Sivko
kuchinskaya
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
Yury Bushmelev
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Ontico
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
CodeCamp
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
e-Legion
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended version
Ivan Krylov
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays
 
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Dmitry Lazarenko
 
Павел Брылов, Skype
Павел Брылов, Skype
Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Дорога к микросервисной архитектуре
Дорога к микросервисной архитектуре
CodeFest
 
Корпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
Фронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Денис Иванов
Денис Иванов
CodeFest
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
Yury Bushmelev
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Ontico
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
CodeCamp
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
e-Legion
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended version
Ivan Krylov
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays
 
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Dmitry Lazarenko
 
Павел Брылов, Skype
Павел Брылов, Skype
Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Дорога к микросервисной архитектуре
Дорога к микросервисной архитектуре
CodeFest
 
Корпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
Фронтенд в Яндексе
Фронтенд в Яндексе
Yandex
 
Ad

«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС