Микросервисы: первая кровь

Post on 13-Apr-2017

190 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Микросервисып е р в а я к р о в ь

Сячин Максим

2

maxsyachin@gmail.com

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

Композитный JSON

88

http://catalogue/api/subscription/1234

Какая цена для издания 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

top related