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

February 19, 2018
Tweet

More Decks by Kirill Tolkachev

Other Decks in Technology

Transcript

  1. 1. Как начинается DevOps 2. Немного мифов и предрассудков 3.

    Как дальше жить? 4. Примеры —как живём мы 5. Выводы 4 Agenda теория практика
  2. Re: Re: Re: Re: Re: Re: …. Привет Y, Мне

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

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

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

    сказали ты можешь помочь сделать нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps! С уважением Работник Большой Компании <Лого Компании>
  6. Я админ и я программирую — я DevOps? Эй, сделай

    нам бота, мы хотим NPS опрос делать!
  7. А следом и — 2х Аджайлов — 1го Вотерфола? —

    и наверно стоит нанять ТДД!
  8. Таблицы половозрелости Используется Jenkins да Уровень 1 Пишутся тесты да

    Уровень 1 Автоматизирована доставка да Уровень 2 Еще что то нет Уровень 2 Еще что то сложное нет Уровень 3 ... нет ... ... нет Уровень 90
  9. да Уровень 1 да Уровень 1 да Уровень 2 нет

    Уровень 2 нет Уровень 3 нет ... нет Уровень 90
  10. DevOps – это про взаимоотношения → Никто не делает продукт

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

  12. 76

  13. Немного LSD для вас → три языка программирования → два

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

  15. ~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]: 96
  16. ~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]: 97
  17. ~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]: 98
  18. ~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! 99
  19. ~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
  20. 101

  21. @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 102 Fluent annotations leve 1
  22. ~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! 105
  23. 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
  24. 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
  25. 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
  26. Payment Service[jar,doc] Insurance Service [jar,doc] One Point of View [UberDoc.zip]

    Rent Service[jar,doc] Other Service [jar,doc] Агрегация информации 111
  27. Парадокс централизации Чтобы эффективно разрабатывать распределённые приложения, нам нужны очень

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

    хорошие централизованные библиотеки и инструменты Но: не выносите бизнес-логику или доменные объекты! Не размывайте бизнес-контекст вашего API 113
  29. 124

  30. 143 Rent Service Payment Service No TraceId No SpanId TraceId

    = X SpanId = A TraceId = X SpanId = B TraceId = X SpanId = C
  31. 144 Rent Service Payment Service Blockchain Service No TraceId No

    SpanId TraceId = X SpanId = A TraceId = X SpanId = B TraceId = X SpanId = C TraceId = X SpanId = D TraceId = X SpanId = D TraceId = X SpanId = F
  32. 145 Rent Service Payment Service Security Service Blockchain Service No

    TraceId No SpanId TraceId = X SpanId = A TraceId = X SpanId = B 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
  33. 146 Rent Service Payment Service Security Service Blockchain Service No

    TraceId No SpanId 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
  34. 147 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
  35. 148

  36. 149

  37. 152 Rent Service Payment Service SpanId = B Client Send

    SpanId = B Server Received TraceId = X SpanId = A TraceId = X SpanId = C
  38. 153 Rent Service Payment Service SpanId = B Client Send

    SpanId = B Server Received SpanId = B Server Send TraceId = X SpanId = A TraceId = X SpanId = C
  39. 154 Rent Service Payment Service SpanId = B Client Send

    SpanId = B Server Received SpanId = B Client Received SpanId = B Server Send TraceId = X SpanId = A TraceId = X SpanId = C
  40. 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 156 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
  41. 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 157 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 ?
  42. Ретроспектива → Разработчик ⇢ LSD ⇢ Шаблоны (lazybones) ⇢ Точки

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

    универсальным Результат → Быстрое устаревание → Сложность изменений
  44. Мы инженеры или кто? Частота коммитов коммитов в прод Частотность

    успешных билдов Привязано задач к коммитам Количество и статус тестов SLA Время от идеи до клиента С 0 до Prod С Dev → Prod Количество ошибок ... LTV LCV Cash Flow Инженерные метрики Бизнес метрики Клиентские метрики NPS Happiness Safety
  45. Метрики + 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)
  46. Метрики + Pipeline и все все все commit sha bin

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

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

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

    artifacts Выпекание Service Dashboard Mesos Dev Cluster Deploy metadata App1 Ops Verify Result Status Create Ticket Mesos Prod Cluster App1 Доставка
  50. Метрики + 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 Доставка
  51. DevOps — образ мышления команды, при котором все осознают что

    нужно для предоставления сервиса https://twitter.com/bsideup/status/906154114991652864