Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wild Microservices And Imaginary DevOps

Wild Microservices And Imaginary DevOps

Today, very often you can hear a lot of buzz words, but even among them, DevOps and Microservices excite the minds of people as something special. For a typical engineer, DevOps and Microservices are just a marketing profanity. It's more important to "keep DevOps in your hands" and be able to use it. I want to understand where our and other people's fantasies come to an end, where really useful practices begin, what tools will help us and what fundamental principles will help increase the profit from the used practices and tools. The talk is primarily about the implementation of various technologies, tools and methodologies in a large organization. I will share the problems that we encountered in the implementation of various principles and technologies, I will talk about solutions and developed principles of scaling processes / tools. Today our slogan will be "DevOps in the hands and not in the heads." But what is in the minds is still important, although this is a completely different story.

Kirill Tolkachev

March 22, 2018
Tweet

More Decks by Kirill Tolkachev

Other Decks in Technology

Transcript

  1. Wild Microservices
    And Imaginary DevOps

    View Slide

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

    View Slide

  3. DISCLAIMER
    No warranty guarantee
    3

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Шары ДевОпса

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. Наймём DevOps`а

    View Slide

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

    View Slide

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

    View Slide

  28. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. Но без Hard Skills...

    View Slide

  68. И все же

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  74. Ммм...

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  78. View Slide

  79. 79

    View Slide

  80. 80

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  84. 84

    View Slide

  85. 85
    t
    0

    View Slide

  86. Где мой DevOps ?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  91. git clone
    91

    View Slide

  92. git clone
    92

    View Slide

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

    View Slide

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

    View Slide

  95. lazybones create api 1.0.1 service_name
    95

    View Slide

  96. ~home > lazybones create api 0.0.1 rent-service
    96

    View Slide

  97. ~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

    View Slide

  98. ~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

    View Slide

  99. ~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

    View Slide

  100. ~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

    View Slide

  101. ~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

    View Slide

  102. 102

    View Slide

  103. @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

    View Slide

  104. @EnableAllGoodThings
    104
    Fluent annotations level 2

    View Slide

  105. 105
    Fluent annotations level 3

    View Slide

  106. smart libs/shared libs
    106

    View Slide

  107. documentation → smart documentation
    107

    View Slide

  108. 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

    View Slide

  109. 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

    View Slide

  110. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  119. 119
    not war < make Jar

    View Slide

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

    View Slide

  121. docker/rkt/packer
    121

    View Slide

  122. 122
    not jar < make docker

    View Slide

  123. scp fat.jar [email protected]:/home/app/
    123

    View Slide

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

    View Slide

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

    View Slide

  126. 126

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  132. mesos / kubernetes / ∞
    132

    View Slide

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

    View Slide

  134. 134
    t
    Bare
    Metal

    View Slide

  135. 135
    t
    Bare
    Metal
    Virtual
    Machines

    View Slide

  136. 136
    t
    Bare
    Metal
    Virtual
    Machines
    Lightweight
    Containers

    View Slide

  137. 137
    t
    Bare
    Metal
    Virtual
    Machines
    Lightweight
    Containers

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  146. 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

    View Slide

  147. 147

    View Slide

  148. 148

    View Slide

  149. Соединим все

    View Slide

  150. 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

    View Slide

  151. 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
    ?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  155. Общие части
    Technologies

    View Slide

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

    View Slide

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

    View Slide

  158. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  165. Метрики + 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)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  173. Метрики + 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
    Доставка

    View Slide

  174. Что деплоим?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  180. QA
    180
    @tolkv

    View Slide

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

    View Slide

  182. 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

    View Slide

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

    View Slide

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

    View Slide