Download - Микросервисы: первая кровь
1
Микросервисып е р в а я к р о в ь
Сячин Максим
2
https://twitter.com/FinneTrolle
https://github.com/finnetrolle
3
4
5
6
7
8
9
10
Договоренности• Все что я рассказываю - мой личный
опыт
• Для вопросов будет секция QA в конце выступления
• Для больших вопросов - дискуссионная зона после выступления
11
12
А мне что с того?
Где набираетесь опыта?
• Собственные проекты
• Работа или фриланс
• Open source проекты
• Дипломные и научные работы
13
14
15
?
16
?
17
?
18
С монолитом - сложно
Но микросервисы - не монолит!
Проект с микросервисами - лучший вариант
работы для студента
19
20
21
Что мы делаем?
• Сопровождаем процесс подписки• Печатаем документы для сторон• Строим разные графики и отчеты
22
23
24
Что такое микросервисы?
25
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
-- James Lewis and Martin Fowler
26
Чем выше продуктивность - тем быстрее внедряется новая
функциональность
Чем дольше разрабатываем - тем больше функциональности
и тем выше сложность
http://martinfowler.com/microservices/
27
28
29
Грааль найден!
30
31
Monolith First32
33
34
Обязательные требования
• Реализуем интерфейсы для разбиения
• Не допускаем высокую связность• Поддерживаем высокую
дисциплину• Закладываем время на разбиение
35
36
37
Пер
вый
рели
з
Как Monolith First помог нашему проекту?
• Ускорен выпуск релиза (мы успели!)
• Определились границы между модулями
38
39
40
41
42
43
44
45
46
Недостатки большого количества сервисов
• Большая операционная сложность
• Труднее воспроизвести окружение для тестирования
• Отказы - это данность
47
Преимущества большого количества
сервисов• Горизонтальное масштабирование из
коробки
• Низкая связность между сервисами...
• ... и между командами!
• Каждая часть системы достаточно мала чтобы...
48
49
Найти небольшую задачу =>
Быстро разобраться =>
Быстро выполнить =>
Раньше начать приносить пользу =>
Хороший первый день на новой работе!
50
51
52
А как там у Netflix?
• Более 600 сервисов• Десятки тысяч нод EC2 в Amazon• Миллиарды запросов ежедневно
Команды ответственны за жизненный цикл
разработанных приложений
53
• Разработка• Релиз / деплой• Обслуживание сервисов в проде
54
Мояпрелесть!
55
56
Не все вокруг гвозди
57
58
Что лучше?
59
60
Зависит от задачи
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Eventual consistency
79
Минусы зоопарка технологий
• Не всегда существуют лучшие практики
• Высокая общая сложность системы
• Больше сервисов для обслуживания
• Сложнее управлять разработкой
• Высокий риск появления SHOK
80
81
SingleHeadOfKnowledge
Дорога в ад для любого проекта
Плюсы свободы выбора инструментов
• Каждой задаче - лучший инструмент
• Новое взамен устаревшего
• Расширяет кругозор
82
83+ 10 скиллов в резюме
84
Наш скромный стек
85
86
87
Композитный ответ
Особо жирный JSON
Какая цена для издания 1234 в регионе с кодом 44?
89
90
91
subscription.getRegionalOptions().stream() .filter(o -> o.getTcfpsCode().equals("44")) .findFirst() .get().getPriceGroup();
92
subscription.getPriceGroups().stream() .filter(g -> g.getId().equals( subscription.getRegionalOptions().stream() .filter(o -> o.getTcfpsCode().equals("44")) .findFirst() .get().getPriceGroup())) .findFirst() .get().getPrice();
93
http://catalogue/api/subscription/1234/prices
94
http://catalogue/api/subscription/1234/region/908/priceMin
95
Richardson maturity model
96
Дольше делать API
97
• Результат качественнее
• Экономия трафика
• Экономия ресурсов
Вы приблизитесь к искусству создания
красивого и функционального
API
98
Эволюция API
99
100
101
Серьезно?!
Что хотелось бы?
• Вовремя узнавать об изменениях API внешних сервисов
• Иметь возможность поддерживать изменения в течение времени, не сразу
• И знать как мигрировать
102
103
Expand and Contract
104
Expand and Contract
105
Expand and Contract
106
Expand and Contract
107
API v1 -> v2 migration timeline
• 28 июня 2016 - API v1 становится deprecated
• 28 сентября 2016 - ваши новые пользователи получат уведомление
• 28 марта 2017 - все ваши пользователи получат уведомление по email
• 28 июня 2017 - API v1 будет выключен
108
109
API v1 -> v2 migration guide
110
Отмечено, что• Быстрее "въезжаешь" в проект
• Понимание оркестрации приходят постепенно
• Знакомишься с новыми технологиями
• Определяешься с любимой специализацией
111
112
Свой любимый микросервис
Проект с микросервисами - лучший вариант
работы для студента
113
114
Говорят, вы перешли на микросервисы
И как они вам?
115
116
Использовали Monolith First
правильно
117
Следилиза вашим
зоопаркомсервисов
118
Каждой задачесвой инструмент
119
Тщательно продумывалиAPI вашихприложений
120
Изменяли APIпо паттерну
Expand and
Contract
121
122