SlideShare a Scribd company logo
Однажды одна выдуманная команда разработчиков
собралась вместе и решила попробовать микросервисы.
Эта выдуманная история расскажет о трудностях,
которые встретились у смелых разработчиков на пути и
об отваге, с которой эти трудности преодолевались.
Все совпадения случайны, мнение автора может не
совпадать с мнением других выдуманных участников
истории.
Автор не несет ответственности за возможный сдвиг
парадигмы у слушателей и вообще считает его очень
полезным для развития.
Сячин Максим
Место работы: Luxoft SPB
Заказчик: Почта России
Опыт разработки: 11 лет
Java, C++, Kotlin, Scala
twitter: @finnetrolle
github: finnetrolle
maxsyachin@gmail.com
Микросервисы
Первая кровь
70100
19900
План нашей встречи
• Проблемы на старте разработки
• Проблемы во время разработки
• Проблемы при тестировании
• А что взамен?
Микросервисы могут быть
настолько же эффективны,
насколько они обязательно
окажутся сложны.
Начало проекта
когда одно решение определяет дальнейшую историю
Монолит Микросервисы
Simplicity Partial deployment
Consistency Availability
Inter-module refactoring Preserve modularity
Multiple platforms
Monolith vs Microservices
С чего лучше начинать?
Monolith vs Microservices
С чего лучше начинать?
Monolith vs Microservices
С чего лучше начинать?
Monolith vs Microservices
С чего лучше начинать?
Monolith First
неоднозначное решение
• Нет влияния на
функциональные требования,
в следствие чего не
выделяются ресурсы на
рефакторинг
• Монолит провоцирует
высокую связанность,
отделять микросервисы тем
сложнее, чем старше
монолит
Деление на микросервисы
несколько сложнее, чем разрезание пиццы
N-layer архитектура
Presentation Layer
Business Layer
Data Access Layer
Web application
Business logic
microservice
Data microservice
Однородные команды
разработки
UI разработчики
Backend разработчики
DBA
– M. Conway
« Организация которая разрабатывает
систему ... вынуждена делать систему по
структуре повторяющую структуру
коммуникаций внутри организации»
Гетерогенные команды
разработки
Управление финансами
Склад
CRM
Don't repeat yourself
или как избавиться от преимуществ микросервисов
Библиотека common
Ваше первое и
основное
приложение
Модуль A
Модуль B
Модуль C
Utils
Utils
Utils
Common
Библиотека common
Приложение А
common
Приложение B Приложение C
A + B B + C
A + C A+B+C
Приложение А
новая версия
Приложение B
новая версия
Приложение C
новая версия
common
Библиотека common, DTO
и клиенты
App 5 DTOApp 4DTO
App 2 DTO App 3 DTOApp 1DTO
Один большой и
очень умный
common
клиент для App 1
клиент для App 2
клиент для App 3
клиент для App 4
клиент для App 5
DTO
клиент для App 5
Общая библиотека
common стала
умнее
App 5
App 3App 2App 1
App 4
Библиотека с общим API
Клиентские
приложения
Умный
балансировщик
Оплата через
Капут-банк
Оплата через Банк
"Гибкость"
Капут-банк Банк "Гибкость"
REST
REST REST
Оплата common
Библиотека с общим API
DTO оплаты
Общий API
Умный
Балансировщик
Оплата через
Капут-банк
Оплата через Банк
"Гибкость"
Стандартный
протокол оплаты Особенность оплаты
через "Гибкость"
DTO оплаты
Общий API
Умный
Балансировщик
Оплата через Банк
"Гибкость"
Оплата через
Капут-банк
Собственный фасад для
REST клиента
Jersey client
Собственный
REST клиент
client.post(PATH)
.withParam("id", id)
.withBody(body)
.forEntityOf(Resp.class)
.orElseThrow(RestError::new)
Клиент к
приложению А
Приложение B Приложение C Приложение D
Собственный
REST клиент
DTO для
приложения А
Собственный
REST клиент
client.post(PATH)
.withParam("id", id)
.withBody(body)
.forResponse(Resp.class)
.orElseThrow(RestError::new)
Клиент к
приложению А
Приложение B Приложение C Приложение D
Собственный фасад для
REST клиента
Jersey client
Собственный
REST клиент
Клиент к
приложению А
Приложение B Приложение C Приложение D
Собственный
REST клиент
DTO для
приложения А
client.post(PATH)
.withParam("id", id)
.withBody(body)
.forResponse(Resp.class)
.orElseThrow(RestError::new)
Собственный
REST клиент
Клиент к
приложению А
Приложение B
Client v. 1.0.1 Client v. 1.0.0 Client v. 1.0.0
Собственный фасад для
REST клиента
Приложение А
Приложение B
Приложение C
Приложение D
Приложение E
Client A v 1.0.1
Client A v 1.0.23
Client A v 1.2.10
Советы по DRY
• Старайтесь обойтись в библиотеках без
доменных объектов
• Сильное сцепление и низкая связанность
уменьшат потребность в разделяемых
библиотеках
• Используйте стабильные библиотеки
Интеграция
Кошмар поддержки чужих изменений
DTO Hell
Приложение
"Каталог двигателей"
engines-dto
Приложение
"Страховка"
Приложение
"Ремонт авто"
Приложение
"Автоподбор для
клиента"
Приложение
"Оценка авто"
Приложение
"Конструктор"
DTO Hell
Приложение
"Каталог двигателей"
engines-dto
Приложение
"Страховка"
Приложение
"Ремонт авто"
С++ QT
Приложение
"Автоподбор для
клиента"
Приложение
"Оценка авто"
Приложение
"Конструктор"
Композитный response
{
"id":18,

"model":"Rav4",

"engines":[

{"name":"4m40", "power":200, "id":101},

{"name":"100kz", "power":250, "id":287}

],

"exteriors":[

{"color":"BLACK", "type":"BASIC", "id":334},

{"color":"WHITE", "type":"BASIC", "id":422},

{"color":"WHITE", "type":"DULL", "id":451}

],

"transmissions":[

{"type":"AUTO", "gears":5, "id":334},

{"type":"AUTO", "gears":6, "id":335},

{"type":"MANUAL","gears":5, "id":354}

]
}
Композитный response
{
"id":18,

"model":"Rav4",

"engines":[

{"name":"4m40", "power":200, "id":101},

{"name":"100kz", "power":250, "id":287}

],

"exteriors":[

{"color":"BLACK", "type":"BASIC", "id":334},

{"color":"WHITE", "type":"BASIC", "id":422},

{"color":"WHITE", "type":"DULL", "id":451}

],

"transmissions":[

{"type":"AUTO", "gears":5, "id":334},

{"type":"AUTO", "gears":6, "id":335},

{"type":"MANUAL","gears":5, "id":354}

]
}
Какие автоматические коробоки передач
поставляются с Toyota Rav4?
http://someurl.com/api/vehicle/18
Композитный response
[

{"type":"AUTO", "gears":5, "id":334},

{"type":"AUTO", "gears":6, "id":335}

]
Какие автоматические коробоки передач
поставляются с Toyota Rav4?
http://someurl.com/api/vehicle/18/transmissions?type=AUTO
Советы по интеграции
• Паттерн Expand and Contract
• Семантика версий [major.minor.patch]
• Protobuf, Thrift
– Джон Постел
«Будь либерален к тому, что принимаешь, и
требователен к тому, что отсылаешь».
Сложности тестирования
что работает само по себе не обязательно заработает
в связке с соседями
Воссоздание окружения
для тестирования
Приложение, которое
надо протестировать
Какой-нибудь
HTTP клиент
(PAW, SoapUI)
Локальная СУБД
Это приложение
поставляет нам
данные
Кстати, ему тоже
нужна СУБД
И еще одно
приложение, тоже
со своей СУБД
А это приложение
стороннего
разработчика и висит в
интернете
Проблема асинхронных
сервисов
Приложение, которое
надо протестировать
Какой-нибудь
HTTP клиент
(PAW, SoapUI)
Стороннее
приложение, висящее
в интернете и
работающее в
асинхронном режиме
Как воссоздаем?
• Dummy внутри микросервиса (активируется
настройкой)
• Запуск сервисов с данными
• Отладочные прокси (Fiddler)
• Dummy микросервисы
Собираем логи
Разбираемся с логами
• Elasticsearch + Logstash + Kibana
• Elasticsearch + FluentD + Kibana
• Сторонние сервисы (Loggly, Papertrail)
• Logging to stdout + docker logs
История успеха
Позитивные моменты разработки
Проверка и внедрение
новых технологий
High maintainability
• Быстро входишь в контекст небольшого сервиса
даже после длительного перерыва
• Меньше путаного кода
• Изменения в одном сервисе редко задевают
другие
• Задачи, затрагивающие несколько сервисов,
легко делятся на подзадачи
Высокая надежность
• Stateless сервисы легко масштабируются
горизонтально
• Healthcheck + мониторинг + быстрый запуск
позволяют не бояться падения приложения
• Пока идет знакомство с микросервисами,
разработка сложна, а последствия неверных
решений раздражают
• По мере взросления технологии, все больше
внимания уделяется задаче, а не бойлерплейту
• Однажды наступает момент, когда в ответ на
список новых требований вы просто запускаете
новый микросервис
Спасибо за внимание!
Настало время вопросов

More Related Content

Viewers also liked

Literatura moderna
Literatura modernaLiteratura moderna
Literatura moderna
MIRNUS
 
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
Antonio Jose Beleza
 
DEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого стартаDEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого старта
Sasha Soleev
 
Test labs 2016. QA в тотальном аутсорсе
Test labs 2016. QA в тотальном аутсорсеTest labs 2016. QA в тотальном аутсорсе
Test labs 2016. QA в тотальном аутсорсе
Sasha Soleev
 
Redefining Contract Manufacturing Through the Use of Robotics
Redefining Contract Manufacturing Through the Use of RoboticsRedefining Contract Manufacturing Through the Use of Robotics
Redefining Contract Manufacturing Through the Use of Robotics
Lora Cecere
 
Test labs 2016. Пренебрежение лучшими практиками тестирования
Test labs 2016. Пренебрежение лучшими практиками тестированияTest labs 2016. Пренебрежение лучшими практиками тестирования
Test labs 2016. Пренебрежение лучшими практиками тестирования
Sasha Soleev
 
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez SalazarHemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
SOSTelemedicina UCV
 
Where Are We on the Evolution of Supply Chain Planning?
Where Are We on the Evolution of Supply Chain Planning?Where Are We on the Evolution of Supply Chain Planning?
Where Are We on the Evolution of Supply Chain Planning?
Lora Cecere
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»
DataArt
 

Viewers also liked (9)

Literatura moderna
Literatura modernaLiteratura moderna
Literatura moderna
 
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
Formalization of participation of Mr. Antonio Jos� Beleza (Mozambique) in the...
 
DEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого стартаDEV Labs 2016. Искусство быстрого старта
DEV Labs 2016. Искусство быстрого старта
 
Test labs 2016. QA в тотальном аутсорсе
Test labs 2016. QA в тотальном аутсорсеTest labs 2016. QA в тотальном аутсорсе
Test labs 2016. QA в тотальном аутсорсе
 
Redefining Contract Manufacturing Through the Use of Robotics
Redefining Contract Manufacturing Through the Use of RoboticsRedefining Contract Manufacturing Through the Use of Robotics
Redefining Contract Manufacturing Through the Use of Robotics
 
Test labs 2016. Пренебрежение лучшими практиками тестирования
Test labs 2016. Пренебрежение лучшими практиками тестированияTest labs 2016. Пренебрежение лучшими практиками тестирования
Test labs 2016. Пренебрежение лучшими практиками тестирования
 
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez SalazarHemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
Hemorragia de la segunda mitad del embarazo. Dra. Marina Márquez Salazar
 
Where Are We on the Evolution of Supply Chain Planning?
Where Are We on the Evolution of Supply Chain Planning?Where Are We on the Evolution of Supply Chain Planning?
Where Are We on the Evolution of Supply Chain Planning?
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»
 

Similar to DEV Labs 2016. Микросервисы - первая кровь

Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
CodeFest
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)
Алексей Панфилов
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)
Alexei Lupan
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
Василий Савунов
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
Voximplant
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
GoIT
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsAndrew Mayorov
 
#MBLTdev: Как не стать заложником одной платформы (Parallels)
#MBLTdev: Как не стать заложником одной платформы (Parallels)#MBLTdev: Как не стать заложником одной платформы (Parallels)
#MBLTdev: Как не стать заложником одной платформы (Parallels)
e-Legion
 
Paper 67 (supplementary file) sqadays 2010-burmistrov_fomin_3011
Paper 67 (supplementary file)   sqadays 2010-burmistrov_fomin_3011Paper 67 (supplementary file)   sqadays 2010-burmistrov_fomin_3011
Paper 67 (supplementary file) sqadays 2010-burmistrov_fomin_3011Alexei Lupan
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis
 
Teatro
TeatroTeatro
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Intersog
 

Similar to DEV Labs 2016. Микросервисы - первая кровь (20)

Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)Sqadays 2010 burmistrov_fomin_20101120(2)
Sqadays 2010 burmistrov_fomin_20101120(2)
 
Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)Что вас ждет на пути реализации Soa (Битрикс отступает)
Что вас ждет на пути реализации Soa (Битрикс отступает)
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platforms
 
#MBLTdev: Как не стать заложником одной платформы (Parallels)
#MBLTdev: Как не стать заложником одной платформы (Parallels)#MBLTdev: Как не стать заложником одной платформы (Parallels)
#MBLTdev: Как не стать заложником одной платформы (Parallels)
 
Paper 67 (supplementary file) sqadays 2010-burmistrov_fomin_3011
Paper 67 (supplementary file)   sqadays 2010-burmistrov_fomin_3011Paper 67 (supplementary file)   sqadays 2010-burmistrov_fomin_3011
Paper 67 (supplementary file) sqadays 2010-burmistrov_fomin_3011
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Qt tool evaluation
Qt tool evaluationQt tool evaluation
Qt tool evaluation
 
Appery.io Ukraine_2016
Appery.io Ukraine_2016Appery.io Ukraine_2016
Appery.io Ukraine_2016
 
Teatro
TeatroTeatro
Teatro
 
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
CodeFest 2012. Кузьмин В. — Как выстроить разработку сервиса под несколько мо...
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps DevelopmentMobile Monday Kiev#1 - How to save time in Mobile Apps Development
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
 

DEV Labs 2016. Микросервисы - первая кровь