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

  12. 80

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

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

  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]: 97
  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]: 98
  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]: 99
  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! 100
  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! 101
  20. 102

  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 103 Fluent annotations level 1
  22. 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
  23. 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
  24. 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
  25. Payment Service[jar,doc] Insurance Service [jar,doc] One Point of View [UberDoc.zip]

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

    хорошие централизованные библиотеки и инструменты Например: логирование, health-checking, метрики, обработка типовых ошибок, автодокументирование 112
  27. 126

  28. 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
  29. 147

  30. 148

  31. 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
  32. 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 ?
  33. Ретроспектива → Разработчик ⇢ LSD ⇢ Шаблоны (lazybones) ⇢ Точки

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

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

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

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

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

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

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

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