Slide 1

Slide 1 text

Wild Microservices And Imaginary DevOps

Slide 2

Slide 2 text

Толкачёв Кирилл @tolkv @lavcraft

Slide 3

Slide 3 text

DISCLAIMER No warranty guarantee 3

Slide 4

Slide 4 text

1. Как начинается DevOps 2. Немного мифов и предрассудков 3. Как дальше жить? 4. Примеры — что делаем мы 5. “Выводы” 4 Agenda теория практика

Slide 5

Slide 5 text

5 С чего начинается DevOps?

Slide 6

Slide 6 text

Хм, ничего нового Важный начальник Кто то смелый и решительный Ммм... Им нужно что то новенькое?

Slide 7

Slide 7 text

Котел с Хренью Домыслы Враки Сейчас я им приготовлю...

Slide 8

Slide 8 text

Котел с Хренью Домыслы Враки Проверенное старое Сейчас я им приготовлю...

Slide 9

Slide 9 text

Котел с Хренью Домыслы Враки Проверенное старое Не пригодилось Сейчас я им приготовлю...

Slide 10

Slide 10 text

Компания вызрела и

Slide 11

Slide 11 text

Давай займемся ДевОпсом

Slide 12

Slide 12 text

Говорили они Давай займемся ДевОпсом

Slide 13

Slide 13 text

Шары ДевОпса

Slide 14

Slide 14 text

Re: Re: Re: Re: Re: Re: …. Привет Y, Мне сказали ты можешь сделать нам X, сделай! У нас в проекте DevOps! С уважением Работник Большой Компании <Лого Компании>

Slide 15

Slide 15 text

Re: Re: Re: Re: Re: Re: …. Привет Дружище, мне сказали ты можешь помочь сделать нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps! С уважением Работник Большой Компании <Лого Компании>

Slide 16

Slide 16 text

Re: Re: Re: Re: Re: Re: …. Привет Дружище, мне сказали ты можешь помочь сделать нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps! С уважением Работник Большой Компании <Лого Компании>

Slide 17

Slide 17 text

Re: Re: Re: Re: Re: Re: …. Привет Дружище, мне сказали ты можешь помочь сделать нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps! С уважением Работник Большой Компании <Лого Компании>

Slide 18

Slide 18 text

Кто же этот человек?

Slide 19

Slide 19 text

Я автоматизирую — я DevOps? Эй, сделай нам скрипт генерации Excel документа!

Slide 20

Slide 20 text

Я администрирую — я DevOps? Эй, разверни нам Jenkins!

Slide 21

Slide 21 text

Я админ и я программирую — я DevOps? Эй, сделай нам бота, мы хотим NPS опрос делать!

Slide 22

Slide 22 text

Зато у меня pipeline длиннее! Я деплою — я DevOps?

Slide 23

Slide 23 text

Зато у меня pipeline длиннее! Я деплою — я DevOps?

Slide 24

Slide 24 text

Миф “Человек и Пароход”

Slide 25

Slide 25 text

Наймём DevOps`а

Slide 26

Slide 26 text

А потом еще одного

Slide 27

Slide 27 text

А потом сделаем DevOps отдел

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Закон впихуемости

Slide 30

Slide 30 text

Закон впихуемости Впихивать пока впихивается

Slide 31

Slide 31 text

Кого нанимать то? И как нанимать в условиях отсутствия таковых

Slide 32

Slide 32 text

Почему бы нам не нанять DevOps`a?

Slide 33

Slide 33 text

А следом и — 2х Аджайлов — 1го Вотерфола?

Slide 34

Slide 34 text

А следом и — 2х Аджайлов — 1го Вотерфола? — и наверно стоит нанять ТДД!

Slide 35

Slide 35 text

И у нас будут инженерные практики!

Slide 36

Slide 36 text

© @abashev DevOps как слава КПСС → Вообще не человек

Slide 37

Slide 37 text

Кто если не человек?

Slide 38

Slide 38 text

Миф о “Половозрелости”

Slide 39

Slide 39 text

Таблицы половозрелости Используется Jenkins да Уровень 1 Пишутся тесты да Уровень 1 Автоматизирована доставка да Уровень 2 Еще что то нет Уровень 2 Еще что то сложное нет Уровень 3 ... нет ... ... нет Уровень 90

Slide 40

Slide 40 text

да Уровень 1 да Уровень 1 да Уровень 2 нет Уровень 2 нет Уровень 3 нет ... нет Уровень 90

Slide 41

Slide 41 text

Работает ли производство как часы? _

Slide 42

Slide 42 text

У нас есть трактор Но есть нюансы

Slide 43

Slide 43 text

Или вы просто научились Быстро катить в “прод”?

Slide 44

Slide 44 text

Или вы просто научились Быстро катить в “прод”? Один знакомый всем жук

Slide 45

Slide 45 text

Чтобы не делать говно, сначала нужно всё продумать

Slide 46

Slide 46 text

Продумать архитектуру

Slide 47

Slide 47 text

Миф “DevOps и Архитектура”

Slide 48

Slide 48 text

А что такое архитектура?

Slide 49

Slide 49 text

49 Закон “Почему”

Slide 50

Slide 50 text

50 Закон 3х “Почему” ?

Slide 51

Slide 51 text

51 Закон 5и “Почему” ?

Slide 52

Slide 52 text

Почему "Архитектура Г**НО?" Порой достаточно одного меткого "почему"

Slide 53

Slide 53 text

Нормально делай

Slide 54

Slide 54 text

Нормально делай Нормально будет

Slide 55

Slide 55 text

Реальность – это колодцы DBA`s Developers Operations

Slide 56

Slide 56 text

Реальность – это колодцы DBA`s Developers Operations

Slide 57

Slide 57 text

Реальность – это колодцы DBA`s Developers Operations

Slide 58

Slide 58 text

Реальность – это колодцы DBA`s Developers Operations

Slide 59

Slide 59 text

Реальность – это колодцы DBA`s Developers Operations Если конечно вы не Netflix

Slide 60

Slide 60 text

Реальность – это колодцы DBA`s Developers Operations Но вы не Netflix

Slide 61

Slide 61 text

61 Закон Конвея

Slide 62

Slide 62 text

62 Закон Конвея

Slide 63

Slide 63 text

цепь прочна настолько, насколько прочно её самое слабое звено

Slide 64

Slide 64 text

К чему приводят колодцы

Slide 65

Slide 65 text

Взаимоотношения и Квалификация Soft Skills + Hard Skills

Slide 66

Slide 66 text

DevOps – это про взаимоотношения → Никто не делает продукт для одного клиента → Никто не должен строить процесс вокруг {dev,ops,dba,etc} → Работать вместе над всем циклом создания продукта → Обучать не только "своих" → Не строить стен и колодцев

Slide 67

Slide 67 text

Но без Hard Skills...

Slide 68

Slide 68 text

И все же

Slide 69

Slide 69 text

Почему "Архитектура Г**НО?"

Slide 70

Slide 70 text

Кто делает "Архитектуру?"

Slide 71

Slide 71 text

Технологии идеальны Люди — М*****и

Slide 72

Slide 72 text

А что эти люди пишут? 72

Slide 73

Slide 73 text

Микросервисы!

Slide 74

Slide 74 text

Ммм...

Slide 75

Slide 75 text

Ммм… Напишу свой accounts-api

Slide 76

Slide 76 text

Ммм… Напишу свой accounts-api accounts-api какого то другого человека упыря

Slide 77

Slide 77 text

Ммм… Напишу свой accounts-api Но он он же :”№%$# accounts-api какого то другого человека

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

79

Slide 80

Slide 80 text

80

Slide 81

Slide 81 text

Немного LSD для вас → три языка программирования → два в среднем фреймворка на язык → семь типов источников данных ⇢ legacy WS, mongo db ⇢ OLTP, OLAP ⇢ elasticsearch, neo4j ⇢ Мишкина база %) complexity = 3 * 2 * 7 = 42 (!) 81

Slide 82

Slide 82 text

Чем нельзя пожертвовать? min (L * S * D) → ? 82

Slide 83

Slide 83 text

min (L * S * D) → max (D) 83

Slide 84

Slide 84 text

84

Slide 85

Slide 85 text

85 t 0

Slide 86

Slide 86 text

Где мой DevOps ?

Slide 87

Slide 87 text

Дружище Где мой DevOps ?

Slide 88

Slide 88 text

Взглянем на Dev и Ops по отдельности

Slide 89

Slide 89 text

Как делать DevOps Как подружить хотя бы две роли, ведь должно быть хоть что то общее

Slide 90

Slide 90 text

Разработчик Что он делает и где результат его работы

Slide 91

Slide 91 text

git clone 91

Slide 92

Slide 92 text

git clone 92

Slide 93

Slide 93 text

93 Нужно переименовать классы Нужно кастомизировать руками Время актуализация

Slide 94

Slide 94 text

lazybones / start.spring.io / yeoman 94 Результаты общей работы (DevOps?)

Slide 95

Slide 95 text

lazybones create api 1.0.1 service_name 95

Slide 96

Slide 96 text

~home > lazybones create api 0.0.1 rent-service 96

Slide 97

Slide 97 text

~home > lazybones create api 0.0.1 rent-service Creating project from template api 0.0.1 in 'rent-service' Define value for 'group' [ru.alfalab.rent.api]: 97

Slide 98

Slide 98 text

~home > lazybones create api 0.0.1 rent-service Creating project from template api 0.0.1 in 'rent-service' Define value for 'group' [ru.alfalab.rent.api]: Define value for 'version' [0.0.1]: 98

Slide 99

Slide 99 text

~home > lazybones create api 0.0.1 rent-service Creating project from template api 0.0.1 in 'rent-service' Define value for 'group' [ru.alfalab.rent.api]: Define value for 'version' [0.0.1]: apache-cxf ├──cxf-trace-interceptors └──cxf-spring-boot-starter logging sleuth Define value for 'dependencies' [logging,sleuth]: 99

Slide 100

Slide 100 text

~home > lazybones create api 0.0.1 rent-service Creating project from template api 0.0.1 in 'rent-service' Define value for 'group' [ru.alfalab.rent.api]: Define value for 'version' [0.0.1]: apache-cxf ├──cxf-trace-interceptors └──cxf-spring-boot-starter logging sleuth Define value for 'dependencies' [logging,sleuth]: Project created for rent-service! 100

Slide 101

Slide 101 text

~home > lazybones create api 0.0.1 rent-service Creating project from template api 0.0.1 in 'rent-service' Define value for 'group' [ru.alfalab.rent.api]: Define value for 'version' [0.0.1]: apache-cxf ├──cxf-trace-interceptors └──cxf-spring-boot-starter logging sleuth Define value for 'dependencies' [logging,sleuth]: Project created for rent-service! 101

Slide 102

Slide 102 text

102

Slide 103

Slide 103 text

@Getter // generate getters @Setter // generate setters @Aspect // we are an aspect @ToString // generate toString() @EnableWs // SOAP is so enterprisy, we definitely need it @Endpoint // Seriously, just read above @EnableWebMvc // we want MVC @EnableCaching // and we want to cache stuff @Configuration // this class can configure itself @RestController // we want some REST @XmlRootElement // this component is marshallable @EnableWebSocket // we want web socket, it's so new-generation @RedisHash("cat") // this class is an entity saved in redis @EnableScheduling // we want scheduled tasks @EnableWebSecurity // and some built-in security @NoArgsConstructor // generate no args constructor @ContextConfiguration // we want context configuration for unit testing @SpringBootApplication // this is a Sprint Boot application @Accessors(chain = true) // getters/setters are chained (ala jQuery) @EnableAspectJAutoProxy // we want AspectJ auto proxy @EnableAutoConfiguration // and auto configuration @EnableRedisRepositories // since it is an entity we want to enable spring data repositories for redis @EnableWebSocketMessageBroker // we want a broker for web socket messages 103 Fluent annotations level 1

Slide 104

Slide 104 text

@EnableAllGoodThings 104 Fluent annotations level 2

Slide 105

Slide 105 text

105 Fluent annotations level 3

Slide 106

Slide 106 text

smart libs/shared libs 106

Slide 107

Slide 107 text

documentation → smart documentation 107

Slide 108

Slide 108 text

Not smart = This is main documentation This document describes how to be the most fundamental and important document in the world of documents ... COPY-PASTE documentation from another document ... 108

Slide 109

Slide 109 text

Not so smart = This is main documentation This document describes how to be the most fundamental and important document in the world of documents include::https://raw.github.com/asciidoctor/asciidoctor/master/Gemfile[] include::../other.adoc[] include::/home/tolkv/git/docs-0/superdoc.adoc[] 109

Slide 110

Slide 110 text

Really smart = This is main documentation This document describes how to be the most fundamental and important document in the world of documents include::https://raw.github.com/asciidoctor/asciidoctor/master/Gemfile[] include::gradle://gradle-advanced:service-with-deps:1.0/deps.adoc[] include::gradle://:service/doc.adoc[] 110

Slide 111

Slide 111 text

Payment Service[jar,doc] Insurance Service [jar,doc] One Point of View [UberDoc.zip] Rent Service[jar,doc] Other Service [jar,doc] Агрегация информации 111

Slide 112

Slide 112 text

Парадокс централизации Чтобы эффективно разрабатывать распределённые приложения, нам нужны очень хорошие централизованные библиотеки и инструменты Например: логирование, health-checking, метрики, обработка типовых ошибок, автодокументирование 112

Slide 113

Slide 113 text

Общие инструмнеты

Slide 114

Slide 114 text

Общие инструмнеты Документация! Становится полезно другим ролям

Slide 115

Slide 115 text

Общие инструмнеты Документация! Становится полезно другим ролям Инструмент синхронизации

Slide 116

Slide 116 text

Доставка 116 И причем тут Operations

Slide 117

Slide 117 text

war/ear 117 Зависимость от сервера приложений

Slide 118

Slide 118 text

executable fatJar 118 Зависимость от системных библиотек

Slide 119

Slide 119 text

119 not war < make Jar

Slide 120

Slide 120 text

executable fatJar/npm-пакет 120 Разный менеджмент для разных форматов дистрибуции

Slide 121

Slide 121 text

docker/rkt/packer 121

Slide 122

Slide 122 text

122 not jar < make docker

Slide 123

Slide 123 text

scp fat.jar root@prod101:/home/app/ 123

Slide 124

Slide 124 text

scp fat.jar root@prod101:/home/app/ Что делать с консистентостью? Как быть с доступностью? 124

Slide 125

Slide 125 text

./gradlew deployToArtifactory ansible -i [stage,dev,test] -t deploy 125

Slide 126

Slide 126 text

126

Slide 127

Slide 127 text

./gradlew deployToArtifactory ansible -i [stage,dev,test] -t deploy “Прибитая молотком” конфигурация” 127

Slide 128

Slide 128 text

128 Как быстро масштабироваться?

Slide 129

Slide 129 text

Operations Что они делают и где их результат работы

Slide 130

Slide 130 text

130 Оркестрация

Slide 131

Slide 131 text

131 Может систематизировать свою работу

Slide 132

Slide 132 text

mesos / kubernetes / ∞ 132

Slide 133

Slide 133 text

Как использовать ресурсы 133

Slide 134

Slide 134 text

134 t Bare Metal

Slide 135

Slide 135 text

135 t Bare Metal Virtual Machines

Slide 136

Slide 136 text

136 t Bare Metal Virtual Machines Lightweight Containers

Slide 137

Slide 137 text

137 t Bare Metal Virtual Machines Lightweight Containers

Slide 138

Slide 138 text

138 Управление задачами в кластере

Slide 139

Slide 139 text

Использование группы машин как одной WEB WASTED CACHE WASTED WASTED HADOOP 139

Slide 140

Slide 140 text

Представьте, что кластер это просто одна большая машина WEB WASTED CACHE WASTED WASTED HADOOP WASTED WEB CACHE HADOOP FREE FREE 140

Slide 141

Slide 141 text

Как заставить общаться?

Slide 142

Slide 142 text

Как заставить общаться? Наши инструменты для инженерно— технического разрешения конфликтов

Slide 143

Slide 143 text

И это только начало

Slide 144

Slide 144 text

И это только начало Нет серебрянной пули, это тяжёлая работа

Slide 145

Slide 145 text

Следи за своим ПО 145

Slide 146

Slide 146 text

146 Rent Service Payment Service Security Service Blockchain Service TraceId = X SpanId = A No TraceId No SpanId TraceId = X SpanId = A TraceId = X SpanId = A TraceId = X SpanId = B TraceId = X SpanId = B TraceId = X SpanId = C TraceId = X SpanId = C TraceId = X SpanId = D TraceId = X SpanId = D TraceId = X SpanId = E TraceId = X SpanId = E TraceId = X SpanId = F TraceId = X SpanId = G

Slide 147

Slide 147 text

147

Slide 148

Slide 148 text

148

Slide 149

Slide 149 text

Соединим все

Slide 150

Slide 150 text

yoman Yo start.spring.io Ss python Py lazybones Lz java Ja spring boot Sb gradle Gr asciidoctor Ad thrift Th docker Dr mesos Ms marathon Ma chronos Ch aurora Au Artifactory Ar Kubernetes Kb eureka Eu consul Cl etcd Ed zookeeper Zk hystrix Hx sleuth Sl zipkin Zn groovy Gy 150 Data Isolation Di Centralization paradox Cp LSD principle Ls DDD Dd Smart Docs Sd Dynamic Sharing Ds Smart Libs Sl SOA So ansible An Conway’s Law Co

Slide 151

Slide 151 text

yoman Yo start.spring.io Ss python Py lazybones Lz java Ja spring boot Sb gradle Gr asciidoctor Ad thrift Th docker Dr mesos Ms marathon Ma chronos Ch aurora Au Artifactory Ar Kubernetes Kb eureka Eu consul Cl etcd Ed zookeeper Zk hystrix Hx sleuth Sl zipkin Zn groovy Gy 151 Data Isolation Di Centralization paradox Cp LSD principle Ls DDD Dd Smart Docs Sd Dynamic Sharing Ds Smart Libs Sl SOA So ansible An Conway’s Law Co ?

Slide 152

Slide 152 text

Ретроспектива → Разработчик ⇢ LSD ⇢ Шаблоны (lazybones) ⇢ Точки расширения (spring-starters) ⇢ Декларация ресурсов → Поддержка ⇢ Документирования разнородной инфраструктуры ⇢ Сквозной мониторинг → Администратор ⇢ Управление ресурсами ⇢ ITSM процессы ⇢ Возможность влиять на рабочий процесс

Slide 153

Slide 153 text

Подходы большой компании → Стандартизовать → Переиспользовать → Сделать все универсальным Результат → Быстрое устаревание → Сложность изменений

Slide 154

Slide 154 text

Люди не любят общаться

Slide 155

Slide 155 text

Общие части Technologies

Slide 156

Slide 156 text

Общие части Technologies git/gradle/cucumber git/asciidoc/ allure git/ansible/mesos/ artifactory

Slide 157

Slide 157 text

Как внедрить продать?

Slide 158

Slide 158 text

No content

Slide 159

Slide 159 text

Мы инженеры или кто? Частота коммитов коммитов в прод Частотность успешных билдов Привязано задач к коммитам Количество и статус тестов SLA Время от идеи до клиента С 0 до Prod С Dev → Prod Количество ошибок ... LTV LCV Cash Flow Инженерные метрики Бизнес метрики Клиентские метрики NPS Happiness Safety

Slide 160

Slide 160 text

Что будет если Собрать все практики в одном решении?

Slide 161

Slide 161 text

Пример инструмента Меняем состояние кластера — уровень приложений

Slide 162

Slide 162 text

Метрики + Pipeline и все все все Bootstrap Page Generate Code

Slide 163

Slide 163 text

Метрики + Pipeline и все все все Bootstrap Page Jenkins Job Generate Code

Slide 164

Slide 164 text

Метрики + Pipeline и все все все Bootstrap Page Metrics Indices Jenkins Job Generate Code

Slide 165

Slide 165 text

Метрики + Pipeline и все все все Bootstrap Page Metrics Indices Jenkins Job Generate Code Code Template Git Repository with access rights And WebHooks to J Create Indices with mapping for service Configure Jira Project (Issue Types/Permissions)

Slide 166

Slide 166 text

Метрики + Pipeline и все все все commit Выпекание

Slide 167

Slide 167 text

Метрики + Pipeline и все все все commit sha Выпекание

Slide 168

Slide 168 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание

Slide 169

Slide 169 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание Service Dashboard metadata Доставка

Slide 170

Slide 170 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание Service Dashboard Mesos Dev Cluster Deploy metadata App1 Доставка

Slide 171

Slide 171 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание Service Dashboard Mesos Dev Cluster Deploy metadata App1 Ops Verify Create Ticket Доставка

Slide 172

Slide 172 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание Service Dashboard Mesos Dev Cluster Deploy metadata App1 Ops Verify Result Status Create Ticket Mesos Prod Cluster App1 Доставка

Slide 173

Slide 173 text

Метрики + Pipeline и все все все commit sha bin artifacts Выпекание Service Dashboard Mesos Dev Cluster Deploy metadata App1 Ops Verify Result Status Create Ticket Mesos Prod Cluster App1 docs reports tests Доставка

Slide 174

Slide 174 text

Что деплоим?

Slide 175

Slide 175 text

Социальная сеть для сервисов ...

Slide 176

Slide 176 text

Пример инструментов Меняем состояние кластера — уровень инфраструктуры

Slide 177

Slide 177 text

Кросс Ревью Dev & Ops PR

Slide 178

Slide 178 text

Кросс Ревью Dev & Ops PR Developer Operation $ ansible ... Node X

Slide 179

Slide 179 text

DevOps — образ мышления команды, при котором все осознают что нужно для предоставления сервиса https://twitter.com/bsideup/status/906154114991652864

Slide 180

Slide 180 text

QA 180 @tolkv

Slide 181

Slide 181 text

QA 181 Не пишите в резюме DevOps Инженер @tolkv

Slide 182

Slide 182 text

Links Лекция Жени Кривошеева про архитектуру: https://www.youtube.com/watch?v=_Kex5hwGE-w Пример Smart-библиотеки: https://github.com/lavcraft/grpc-spring-boot-starter Пример реализации “умной документации”: https://github.com/aatarasoff/documentation-plugin-demo 182

Slide 183

Slide 183 text

https://alfalab.design/vacancies/java-razrabotchik https://alfalab.design/vacancies/ Минутка маркетинга

Slide 184

Slide 184 text

Типичная микросервисная архитектура 184