SlideShare a Scribd company logo
Wild Microservices
And Imaginary DevOps
@tolkv
@lavcraft
tolk.kv@gmail.com
2
DISCLAIMER
No warranty guarantee
3
4
Agenda
→ Theory
→ Practice
→ QA
5
→ Theory
→ Practice
→ QA
В программе:
1. Дикости 21го века – DevOps и Микросервисы
2. Немного интерактива
3. Проблемы понимания и внедрения этих дикостей
4. Поделюсь своей историей в их осознания
a. Масштабирование на команды
b. Выработанные принципы
c. Используемые инструменты
5. Сделаем быстрые выводы (если успеем)
Agenda
6
Кто так{ой,ая,ое} DevOps
С чего всё начинается
Давай займемся ДевОпсом
Давай займемся ДевОпсом
Говорили они
Шары ДевОпса
Re: Re: Re: Re: Re: Re: ….
Привет Y, Мне сказали ты можешь сделать нам X, сделай! У
нас в проекте DevOps!
С уважением
Работник Большой Компании <Лого Компании>
Re: Re: Re: Re: Re: Re: ….
Привет Дружище, мне сказали ты можешь помочь сделать
нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps!
С уважением
Работник Большой Компании <Лого Компании>
Re: Re: Re: Re: Re: Re: ….
Привет Дружище, мне сказали ты можешь помочь сделать
нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps!
С уважением
Работник Большой Компании <Лого Компании>
Re: Re: Re: Re: Re: Re: ….
Привет Дружище, мне сказали ты можешь помочь сделать
нам X, помоги нам пожалуйста, ведь у нас в проекте DevOps!
С уважением
Работник Большой Компании <Лого Компании>
Наймём DevOps`а
А потом еще одного
А потом сделаем
DevOps отдел
DevOps как слава КПСС
→ Вообще не человек
Кто если не человек?
Часто задаваемые вопросы
Я автоматизирую – я DevOps?
Я администрирую – я DevOps?
Я админ и я программирую – я DevOps?
Я деплою – я DevOps?
Я деплою – я DevOps?
Таблицы половозрелости
Используется Jenkins да Уровень 1
Пишутся тесты да Уровень 1
Автоматизирована доставка да Уровень 2
Еще что то нет Уровень 2
Еще что то сложное нет Уровень 3
DevOps как слава КПСС
→ Вообще не человек
DevOps это про архитектуру?
30
Закон “Почему”
31
Закон 3х “Почему” ?
32
Закон 5и “Почему” ?
Почему "Архитектура
Г**НО?"
Одного "почему", как правило, достаточно
34
Почему JQuery?
35
36
37
Точка зрения: архитектор
38
Работа идеального архитектора
39
Работа идеального архитектора
40
Работа идеального архитектора
41
Точка зрения: разработчик
Немного деталей не помешает
42
Немного деталей не помешает
43
Архитектура
44
Архитектура
Что это?
45
Что же такое архитектура?
46
Что же такое архитектура?
47
Что же такое архитектура?
48
https://www.youtube.com/watch?v=_Kex5hwGE-w
49
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
50
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Conway’s Law
Co
Smart Docs
Sd
Dynamic Sharing
Ds
Smart Libs
Sl
SOA
So
ansible
An
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
51
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Conway’s Law
Co
Smart Docs
Sd
Dynamic Sharing
Ds
Smart Libs
Sl
SOA
So
ansible
An
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
52
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Conway’s Law
Co
Smart Docs
Sd
Dynamic Sharing
Ds
Smart Libs
Sl
SOA
So
ansible
An
Нормально делай
Нормально делай
Нормально будет
Почему "Нормально"
– сложно
Реальность – это колодцы
DBA`s Developers Operations
57
Закон Конвея
58
Закон Конвея
Big Ball of Mud
59
К чему приводят колодцы
Взаимоотношения
Soft Skills
DevOps – это про взаимоотношения
→ Никто не делает продукт для одного клиента
→ Никто не должен строить процесс вокруг {dev,ops,dba,etc}
→ Работать вместе над всем циклом создания продукта
→ Обучать не только "своих"
→ Не строить стен и колодцев
И все же
Почему "Архитектура
Г**НО?"
А что в этих ваших интернетах?
65
Микросервисы!
SOLID
Counter-Strike Cats
67
GOF
SOLID
TDD
Counter-Strike Cats
68
12 April 1996
Первое упоминание SOA
https://www.gartner.com/doc/302868/service-oriented-architectures- 69
Принципы SOA
1. Standardized service contract
2. Loose coupling
3. Encapsulation
4. Reusability
5. Autonomy
6. Statelessness
7. Discoverability 70
Принципы SOA
1. Standardized service contract
2. Loose coupling
3. Encapsulation
4. Reusability
5. Autonomy
6. Statelessness
7. Discoverability 71
5 January 2009
SOA is Dead
http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html 72
SOA != SOAP (WS-*)
73
74
Про тренды
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
Что такое микросервисы?
75
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
Что такое микросервисы?
76
Размер имеет значение?
→ Method/Function = Microservice?
→ 10-300 LOC = Microservice?
→ 1 week = Microservice?
→ 1 developer = Microservice?
77
Размер не имеет значения*
→ Single Responsibility
→ One capability
→ Bounded context
“In your organization, you should be thinking not in terms of
data that is shared, but about the capabilities those contexts
provide the rest of the domain.”
– Sam Newman, Building Microservices
*до разумных пределов конечно78
Domain-Driven Design
79
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
Что такое микросервисы?
80
Process segregation
81
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
Что такое микросервисы?
82
Независимый деплой
build test
83
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
Что такое микросервисы?
84
Language/technology segregation
85
Data segregation
86
Team segregation
87
88
DDD
Dd
SOA
So
Conway’s Law
Co
89
Это Пётр
90
Java
Python
JS
Это Пётр
У него сложный выбор
91
Java
Python
JS
Это Пётр
У него сложный выбор
Любит LSD
Принцип LSD
→ L языков программирования
→ S среднее число фреймворков на язык
→ D типов источников данных
complexity = L * S * D
92
93
?
→ Spring Boot/Spring Cloud
→ Ratpack
→ Dropwizard
→ Vert.x
→ Restlet
→ Spark
→ KumuluzEE
94
Выбирайте то,
что больше
нравится
/
в чем есть
экспертиза
→ Spring Boot/Spring Cloud
→ Ratpack
→ Dropwizard
→ Vert.x
→ Restlet
→ Spark
→ KumuluzEE
95
96
Немного LSD для вас
→ три языка программирования
→ два в среднем фреймворка на язык
→ семь типов источников данных
⇢ legacy WS, mongo db
⇢ OLTP, OLAP
⇢ elasticsearch, neo4j
⇢ Мишкина база %)
97
Чем нельзя пожертвовать?
min (L * S * D) → ?
98
min (L * S * D) → max (D)
99
Нарушать правила можно
100
L = Java
L += Python
L += JavaScript
101
L = Java 18+
S = Spring Boot
D = ∞
java
Ja
spring boot
Sb
102
DDD
Dd
SOA
So
LSD principle
Ls
Conway’s Law
Co
103
104
t0
Где мой DevOps ?
Где мой DevOps ?
Дружище
git clone <golden_service_repo>
107
108
Код устарел
109
Код устарел
Нужно переименовать классы
110
Код устарел
Нужно переименовать классы
Нужно удалить неиспользуемое
111
Код устарел
Нужно переименовать классы
Нужно удалить неиспользуемое
Прочая магия
Время, ошибки, фрагментация
git clone <template_repo>
112
113
Нужно переименовать классы
Нужно кастомизировать руками
Время
актуализация
lazybones / start.spring.io / yeoman
114
Результаты общей работы (DevOps?)
lazybones create api 1.0.1 service_name
115
~home > lazybones create api 0.0.1 rent-service
116
~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.gdg.rostov]:
117
~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.gdg.rostov]:
Define value for 'version' [0.0.1]:
118
~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.gdg.rostov]:
Define value for 'version' [0.0.1]:
srv1
├──srv2
└──srv3
logging
sleuth
Define value for 'dependencies' [logging,sleuth]:
119
~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.gdg.rostov]:
Define value for 'version' [0.0.1]:
srv1
├──srv2
└──srv3
logging
sleuth
Define value for 'dependencies' [logging,sleuth]:
Project created for rent-service!
120
121
lazybones
Lz
yeoman
Yo
start.spring.io
Ss
java
Ja
spring boot
Sb
groovy
Gy
122
LSD principle
Ls
DDD
Dd
SOA
So
Conway’s Law
Co
DRY off
123
TServerTransport serverTransport = new TServerSocket(
new
InetSocketAddress(InetAddress.getLocalHost(), port));
TProcessor processor = new
TInsuranceService.Processor<>(
//business value here
);
server = new TSimpleServer(
new
TServer.Args(serverTransport).processor(processor));
server.serve();
124
TSocket transport = new TSocket(host, port);
transport.open();
TBinaryProtocol tBinaryProtocol = new
TBinaryProtocol(transport);
TInsuranceService.Client client =
new TInsuranceService.Client(tBinaryProtocol);
perform(client); //business value here
transport.close(); 125
@ThriftController
public class InsuranceController implements
TInsuranceService.Iface {
@Override
public void someMethod(TInsurance insurance){
//business value here
}
}
126
@ThriftClient(serviceId = "insurance-service")
TInsuranceService.Client client;
...
perform(client); //business value here
...
127
smart libs
starters
launchers
shared libs
utils
helpers
128
129
Старт приложения
Рабочее приложение
@ThriftClient(serviceId = "insurance-service")
TInsuranceService.Client client;
TInsuranceService.Client client =
Creator.create(TInsuranceService.Client.class,
"insurance-service");
...
perform(client); //business value here
...
130
131
Fluent annotations
@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 132
Fluent annotations
@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 133
Fluent annotations
smart libs/shared libs
134
documentation → smart documentation
135
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
...
136
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[]
137
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[]
138
Payment Service[jar,doc] Insurance Service [jar,doc]
One Point of View
[UberDoc.zip]
Rent Service[jar,doc] Other Service [jar,doc]
Агрегация информации
139
Парадокс централизации
Чтобы эффективно разрабатывать распределённые
приложения, нам нужны очень хорошие централизованные
библиотеки и инструменты
Например: логирование, health-checking, метрики,
обработка типовых ошибок, автодокументирование
140
Парадокс централизации
Чтобы эффективно разрабатывать распределённые
приложения, нам нужны очень хорошие централизованные
библиотеки и инструменты
Но: не выносите бизнес-логику или доменные объекты!
Не размывайте бизнес-контекст вашего API
141
lazybones
Lz
yoman
Yo
start.spring.io
Ss
java
Ja
thrift
Th
spring boot
Sb
gradle
Gr
asciidoctor
Ad
groovy
Gy
142
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Smart Docs
Sd
Smart Libs
Sl
SOA
So
Conway’s Law
Co
Изоляция данных
143
144
Одно приложение - одна БД
Всё просто
N сервисов → 1 БД
Изоляция на уровне таблиц или схем
145
N сервисов → 1 БД
Изоляция через хранимые процедуры
146
147
Transport Layer
API API API API API
148
Transport Layer
API API API API API
N сервисов → 1 БД
Распределённый монолит
149
N сервисов → N БД
150
N сервисов → N БД
Распределённые транзакции –
это больно 151
152
Transport Layer
API API API API API
Очень
много
кода
N сервисов → N БД
Ваше legacy тянет вас на дно
153
154
M сервисов → 1 БД
L сервисов → L БД
M + L = N, M << L
155
156
Transport Layer
APIAPI API API API
M сервисов → 1 БД
L сервисов → L БД
M + L = N, M << L
157
lazybones
Lz
yoman
Yo
start.spring.io
Ss
java
Ja
thrift
Th
spring boot
Sb
gradle
Gr
asciidoctor
Ad
groovy
Gy
158
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Conway`s law
Co
Smart Docs
Sd
Smart Libs
Sl
SOA
So
Доставка
159
war/ear
160
Зависимость от сервера приложений
executable fatJar
161
Зависимость от системных библиотек
162
not war < make Jar
executable fatJar/npm-пакет
163
Разный менеджмент для разных
форматов дистрибуции
docker/rkt/packer
164
165
not jar < make docker
scp fat.jar root@prod101:/home/app/
166
scp fat.jar root@prod101:/home/app/
Что делать с консистентостью?
Как быть с доступностью?
167
./gradlew deployToArtifactory
ansible -i [stage,dev,test] -t deploy
168
169
./gradlew deployToArtifactory
ansible -i [stage,dev,test] -t deploy
“Прибитая молотком” конфигурация”
170
171
Как быстро масштабироваться?
172
Оркестрация
173
mesos / kubernetes / ∞
174
Как использовать ресурсы
175
176
t
Bare
Metal
177
t
Bare
Metal
Virtual
Machines
178
t
Bare
Metal
Virtual
Machines
Lightweight
Containers
179
t
Bare
Metal
Virtual
Machines
Lightweight
Containers
180
Использование группы машин как одной
WEB
WASTED
CACHE
WASTED WASTED
HADOOP
181
Представьте, что кластер это просто
одна большая машина
WEB
WASTED
CACHE
WASTED WASTED
HADOOP
WASTED
WEB
CACHE
HADOOP FREE FREE
182
lazybones
Lz
yoman
Yo
start.spring.io
Ss
python
Py
java
Ja
spring boot
Sb
gradle
Gr
asciidoctor
Ad
docker
Dr
mesos
Ms
marathon
Ma
chronos
Ch
aurora
Au
Kubernetes
Kb
groovy
Gy
183
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
SAGAS
Sa
Smart Docs
Sd
Dynamic Sharing
Ds
Smart Libs
Sl
SOA
So
ansible
An
thrift
Th
Artifactory
Ar
Найти нужный экземпляр
184
insert into settings_table values (key, endpoint)
185
“Прибитая молотком” конфигурация
update template → services.location
kill -s HUP nginx
186
Остаётся статическая привязка
ресурсов
eureka/consul/etcd/zookeper
187
188
Service Client
Registry-aware
HTTP Client
Service Registry
Service Instance 1
Service Instance N
Service Instance ...
Load balance request
Client side discovery
189
Service Client
Service Registry
Service Instance 1
Service Instance N
Service Instance ...
Load balance request
Router/Proxy
Server side discovery
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
groovy
Gy
190
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
SAGAS
Sa
Smart Docs
Sd
Dynamic Sharing
Ds
Smart Libs
Sl
SOA
So
ansible
An
Защити себя сам
191
192
193
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
194
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
195
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
196
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
197
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
198
Circuit Breaker
199
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
200
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
Open
201
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
Half-Open
202
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
Half-Open
203
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
hystrix/apache camel/akka
204
205
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
groovy
Gy
206
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
Следи за своим ПО
207
Нет трассировки - нет проблем? :)
208
X-Request-Id = X-Request-Id ?: new ID
Простой вариант с ServletFilter
209
spring-cloud-sleuth/open zipkin
210
211
RentService
No TraceId
No SpanId
TraceId = X
SpanId = A
212
RentService
PaymentService
No TraceId
No SpanId
TraceId = X
SpanId = A
TraceId = X
SpanId = B
TraceId = X
SpanId = C
213
RentService
PaymentService
BlockchainService
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
214
RentService
PaymentService
SecurityServiceBlockchainService
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
215
RentService
PaymentService
SecurityServiceBlockchainService
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
216
RentService
PaymentService
SecurityServiceBlockchainService
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
217
218
219
RentService
PaymentService
220
RentService
PaymentService
SpanId = B
Client Send
TraceId = X
SpanId = A
221
RentService
PaymentService
SpanId = B
Client Send
SpanId = B
Server Received
TraceId = X
SpanId = A
TraceId = X
SpanId = C
222
RentService
PaymentService
SpanId = B
Client Send
SpanId = B
Server Received
SpanId = B
Server Send
TraceId = X
SpanId = A
TraceId = X
SpanId = C
223
RentService
PaymentService
SpanId = B
Client Send
SpanId = B
Server Received
SpanId = B
Client Received
SpanId = B
Server Send
TraceId = X
SpanId = A
TraceId = X
SpanId = C
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
224
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
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
225
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
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
226
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
?
Выводы
227
Микросервисы – это просто
DevOps – это просто
Выводы
228
Микросервисы – это просто
DevOps – это просто
Микросервисы – это сложно
DevOps – это сложно
1. Не пишите в резюме DevOps Инженер
2. SOA принципы живы
3. Принцип LSD
4. Изоляция данных делает жизнь приятнее
5. Парадокс централизации
6. Планируй ресурсы динамически
7. Любите и поддерживайте друг друга
(и не важно что такое DevOps)
Придерживайтесь принципов
229
DevOps – образ мышления
команды, при котором все
осознают что нужно для
предоставления сервиса
https://twitter.com/bsideup/status/906154114991652864
QA
231
https://alfalab.design/vacancies/java-razrabotchik
https://alfalab.design/vacancies/
Минутка маркетинга
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
233
Типичная микросервисная архитектура
234

More Related Content

Similar to Wild microservices and imaginary DevOps

Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
Кирилл Толкачёв
 
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
ScrumTrek
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
Fwdays
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
automated-testing.info
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python?
Mykhailo Poliarush
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Alina Vilk
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
 
Микросервисы: первая кровь
Микросервисы: первая кровьМикросервисы: первая кровь
Микросервисы: первая кровь
Максим Сячин
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
Fwdays
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
SBTech
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0HighLoad2009
 
DevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуDevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуAndrey Rebrov
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
Aleksandr Tarasov
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0WRider
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
IT-Portfolio
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
Fwdays
 
Middleware
MiddlewareMiddleware
Middleware
megakott
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov
 
Организация процессов разработки – введение в Microsoft alm final
Организация процессов разработки – введение в Microsoft alm finalОрганизация процессов разработки – введение в Microsoft alm final
Организация процессов разработки – введение в Microsoft alm final
Microsoft
 

Similar to Wild microservices and imaginary DevOps (20)

Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python? Как расширять Robot Framework под свои нужны с помощью Python?
Как расширять Robot Framework под свои нужны с помощью Python?
 
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo groupИгорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
Игорь Леонтьев, Lead Architect on all Blockchain projects of Viseo group
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Микросервисы: первая кровь
Микросервисы: первая кровьМикросервисы: первая кровь
Микросервисы: первая кровь
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0
 
DevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почемуDevOps от и до - что, зачем и почему
DevOps от и до - что, зачем и почему
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Middleware
MiddlewareMiddleware
Middleware
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Организация процессов разработки – введение в Microsoft alm final
Организация процессов разработки – введение в Microsoft alm finalОрганизация процессов разработки – введение в Microsoft alm final
Организация процессов разработки – введение в Microsoft alm final
 

More from Кирилл Толкачёв

Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
Кирилл Толкачёв
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
Кирилл Толкачёв
 
Spring Boot Ripper
Spring Boot RipperSpring Boot Ripper
Spring Boot Ripper
Кирилл Толкачёв
 
Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?
Кирилл Толкачёв
 
Curse of spring boot test
Curse of spring boot testCurse of spring boot test
Curse of spring boot test
Кирилл Толкачёв
 
Spring Boot Test horror
Spring Boot Test horrorSpring Boot Test horror
Spring Boot Test horror
Кирилл Толкачёв
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
Кирилл Толкачёв
 
CD with Jenkins. Lessons Learned
CD with Jenkins. Lessons LearnedCD with Jenkins. Lessons Learned
CD with Jenkins. Lessons Learned
Кирилл Толкачёв
 
Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
Кирилл Толкачёв
 
Java Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldJava Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real world
Кирилл Толкачёв
 
Joker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICESJoker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICES
Кирилл Толкачёв
 

More from Кирилл Толкачёв (11)

Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
 
Spring Boot Ripper
Spring Boot RipperSpring Boot Ripper
Spring Boot Ripper
 
Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?
 
Curse of spring boot test
Curse of spring boot testCurse of spring boot test
Curse of spring boot test
 
Spring Boot Test horror
Spring Boot Test horrorSpring Boot Test horror
Spring Boot Test horror
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
CD with Jenkins. Lessons Learned
CD with Jenkins. Lessons LearnedCD with Jenkins. Lessons Learned
CD with Jenkins. Lessons Learned
 
Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
 
Java Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real worldJava Day Minsk 2016 Keynote about Microservices in real world
Java Day Minsk 2016 Keynote about Microservices in real world
 
Joker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICESJoker 2015 Wild microSERVICES
Joker 2015 Wild microSERVICES
 

Wild microservices and imaginary DevOps