SlideShare une entreprise Scribd logo
1  sur  189
Télécharger pour lire hors ligne
1
Эволюционный дизайн
От любви до ненависти один шаг
@tolkv
2
@lavcraft
3
@aatarasoff
@aatarasoff
DISCLAIMER
No warranty guarantee
4
5
Эволюционный дизайн
От любви до ненависти один шаг
6
● делается с первого раза
● не меняется годами
● не зависит от людей
● не зависит от процессов
7
У нас конечно же так
Потому что
8
У нас конечно же так
Потому что
● мы работаем в лучшем банке
9
У нас конечно же так
Потому что
● мы работаем в лучшем банке
● и все остальные банки завидуют нам
10
У нас конечно же так
Потому что
● мы работаем в лучшем банке
● и все остальные банки завидуют нам
● …
● Стойте, кажется это про другое
11
Закон “Почему”
12
“Почему JQuery?”
13
14
15
Точка зрения: архитектор
16
Работа идеального архитектора
17
Работа идеального архитектора
18
Работа идеального архитектора
19
Точка зрения: разработчик
Немного деталей не помешает
20
Немного деталей не помешает
21
Архитектура
22
Архитектура
Что это?
23
Что же такое архитектура?
24
Что же такое архитектура?
25
Что же такое архитектура?
26
https://www.youtube.com/watch?v=_Kex5hwGE-w
27
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
28
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
29
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
30
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
31
Закон Конвея
Big Ball of Mud
32
Big Ball of Mud
33
34
Проблемы архитектуры
● Сильная связанность между модулями
● Слабое тестовое прикрытие
● Регрессионная спираль смерти
○ частично решалась Selenium-тестами
○ но это дорого
SOLID
Counter-Strike Cats
35
GOF
SOLID
TDD
Counter-Strike Cats
36
37
38
39
40
12 April 1996
Первое упоминание SOA
https://www.gartner.com/doc/302868/service-oriented-architectures-
41
Принципы SOA
1. Standardized service contract
2. Loose coupling
3. Encapsulation
4. Reusability
5. Autonomy
6. Statelessness
7. Discoverability
42
Принципы SOA
1. Standardized service contract
2. Loose coupling
3. Encapsulation
4. Reusability
5. Autonomy
6. Statelessness
7. Discoverability
43
Domain-Driven Design
44
5 January 2009
SOA is Dead
http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html
45
SOA != SOAP (WS-*)
46
47
DDD
Dd
SOA
So
Conway’s Law
Co
48
Проблема эволюции
● Начинали с одного проекта
○ одна команда
○ ui + три сервиса
● Более 10-ти однотипных проектов
○ несколько команд
○ десятки сервисов
○ технологически одинаковые
49
50
Java
Python
JS
51
● Spring Boot/Spring Cloud
● Ratpack
● Dropwizard
● Vert.x
● Restlet
● Spark
● KumuluzEE
?
52
● Spring Boot/Spring Cloud
● Ratpack
● Dropwizard
● Vert.x
● Restlet
● Spark
● KumuluzEE
Выбирайте то,
что больше
нравится
/
в чем есть
экспертиза
53
54
Принцип LSD
- L языков программирования
- S среднее число фреймворков на язык
- D типов источников данных
complexity = L * S * D
55
Немного LSD для вас
- три языка программирования
- два в среднем фреймворка на язык
- семь типов источников данных
- legacy WS, mongo db
- OLTP, OLAP
- elasticsearch, neo4j
- Мишкина база %)
complexity = 3 * 2 * 7 = 42 (!)
56
Чем нельзя пожертвовать?
min (L * S * D) → ?
57
min (L * S * D) → max (D)
58
L = Java 18+
S = Spring Boot
D = ∞
59
L = Java
L += Python
L += JavaScript
60
Мы сами нарушаем правила
java
Ja
spring boot
Sb
61
DDD
Dd
SOA
So
LSD principle
Ls
Conway’s Law
Co
62
63
t0
git clone <golden_service_repo>
64
65
Код устарел
66
Код устарел
Нужно переименовать классы
67
Код устарел
Нужно переименовать классы
Нужно удалить неиспользуемое
68
Код устарел
Нужно переименовать классы
Нужно удалить неиспользуемое
Прочая магия
Время, ошибки, фрагментация
git clone <template_repo>
69
70
Нужно переименовать классы
Нужно кастомизировать руками
Время
актуализация
lazybones / start.spring.io / yeoman
71
lazybones create api 1.0.1 service_name
72
~home > lazybones create api 0.0.1 rent-service
73
~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.joker]:
74
~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.joker]:
Define value for 'version' [0.0.1]:
75
~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.joker]:
Define value for 'version' [0.0.1]:
srv1
├──srv2
└──srv3
logging
sleuth
Define value for 'dependencies' [logging,sleuth]:
76
~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.joker]:
Define value for 'version' [0.0.1]:
srv1
├──srv2
└──srv3
logging
sleuth
Define value for 'dependencies' [logging,sleuth]:
Project created for rent-service!
77
78
lazybones
Lz
yeoman
Yo
start.spring.io
Ss
java
Ja
spring boot
Sb
groovy
Gy
79
LSD principle
Ls
DDD
Dd
SOA
So
Conway’s Law
Co
DRY off
80
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();
81
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(); 82
@ThriftController
public class InsuranceController implements
TInsuranceService.Iface {
@Override
public void someMethod(TInsurance insurance){
//business value here
}
}
83
@ThriftClient(serviceId = "insurance-service")
TInsuranceService.Client client;
...
perform(client); //business value here
...
84
smart libs
starters
launchers
shared libs
utils
helpers
85
86
Старт приложения
Рабочее приложение
@ThriftClient(serviceId = "insurance-service")
TInsuranceService.Client client;
TInsuranceService.Client client =
Creator.create(TInsuranceService.Client.class,
"insurance-service");
...
perform(client); //business value here
...
87
@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
88
smart libs/shared libs
89
documentation → smart documentation
90
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
...
91
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[]
92
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[]
93
Payment Service[jar,doc] Insurance Service [jar,doc]
One Point of View
[UberDoc.zip]
Rent Service[jar,doc] Other Service [jar,doc]
Агрегация информации
94
Парадокс централизации
Чтобы эффективно разрабатывать распределённые
приложения, нам нужны очень хорошие
централизованные библиотеки и инструменты
Например: логирование, health-checking, метрики,
обработка типовых ошибок, автодокументирование
95
Парадокс централизации
Чтобы эффективно разрабатывать распределённые
приложения, нам нужны очень хорошие
централизованные библиотеки и инструменты
Но: не выносите бизнес-логику или доменные объекты!
Не размывайте бизнес-контекст вашего API
96
lazybones
Lz
yoman
Yo
start.spring.io
Ss
java
Ja
thrift
Th
spring boot
Sb
gradle
Gr
asciidoctor
Ad
groovy
Gy
97
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Smart Docs
Sd
Smart Libs
Sl
SOA
So
Conway’s Law
Co
Изоляция данных
98
99
Одно приложение - одна БД
Всё просто
N сервисов → 1 БД
Изоляция на уровне таблиц или схем
100
N сервисов → 1 БД
Изоляция через хранимые
процедуры 101
102
Transport Layer
API API API API API
103
Transport Layer
API API API API API
N сервисов → 1 БД
Распределённый монолит
104
N сервисов → N БД
105
N сервисов → N БД
Распределённые транзакции –
это больно 106
107
Transport Layer
API API API API API
Очень
много
кода
N сервисов → N БД
Ваше legacy тянет вас на дно
108
109
M сервисов → 1 БД
L сервисов → L БД
M + L = N, M << L
110
111
Transport Layer
APIAPI API API API
M сервисов → 1 БД
L сервисов → L БД
M + L = N, M << L
112
lazybones
Lz
yoman
Yo
start.spring.io
Ss
java
Ja
thrift
Th
spring boot
Sb
gradle
Gr
asciidoctor
Ad
groovy
Gy
113
Data Isolation
Di
Centralization
paradox
Cp
LSD principle
Ls
DDD
Dd
Conway`s law
Co
Smart Docs
Sd
Smart Libs
Sl
SOA
So
Доставка
114
war/ear
115
Зависимость от сервера приложений
executable fatJar
116
Зависимость от системных
библиотек
executable fatJar/npm-пакет
117
Разный менеджмент для разных
форматов дистрибуции
docker/rkt/packer
118
119
war < fatJar < docker
scp fat.jar root@prod101:/home/app/
120
scp fat.jar root@prod101:/home/app/
Что делать с консистентостью?
Как быть с доступностью?
121
./gradlew deployToArtifactory
ansible -i [stage,dev,test] -t deploy
“Прибитая молотком” конфигурация
122
123
Как быстро масштабироваться?
Нужна оркестрация
124
125
mesos / kubernetes / ∞
126
Как использовать ресурсы
127
128
t
Bare
Metal
129
t
Bare
Metal
Virtual
Machines
130
t
Bare
Metal
Virtual
Machines
Lightweight
Containers
131
t
Bare
Metal
Virtual
Machines
Lightweight
Containers
132
Использование группы машин как
одной
WEB
WASTED
CACHE
WASTED WASTED
HADOOP
133
Представьте, что кластер это
просто одна большая машина
WEB
WASTED
CACHE
WASTED WASTED
HADOOP
WASTED
WEB
CACHE
HADOOP FREE FREE
134
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
135
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
Найти нужный экземпляр
136
insert into settings_table values (key, endpoint)
137
“Прибитая молотком” конфигурация
update template → services.location
kill -s HUP nginx
138
Остаётся статическая привязка
ресурсов
eureka/consul/etcd/zookeper
139
140
Service Client
Registry-aware
HTTP Client
Service Registry
Service Instance 1
Service Instance N
Service Instance ...
Load balance request
Client side discovery
141
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
142
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
Защити себя сам
143
144
145
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
146
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
147
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
148
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
149
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
150
Circuit Breaker
151
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
152
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
Open
153
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
300мс
Half-Open
154
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
Half-Open
155
Хочу бегемота!
Rent Service
Payment Service
Security Service Blockchain Service
Insurance Service
5мс
hystrix/apache camel/akka
156
157
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
158
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
Следи за своим ПО
159
Нет трассировки - нет проблем? :)
160
X-Request-Id = X-Request-Id ?: new ID
Простой вариант с ServletFilter
161
spring-cloud-sleuth/open zipkin
162
163
RentService
No TraceId
No SpanId
TraceId = X
SpanId = A
164
RentService
PaymentService
No TraceId
No SpanId
TraceId = X
SpanId = A
TraceId = X
SpanId = B
TraceId = X
SpanId = C
165
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
166
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
167
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
168
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
169
170
171
RentService
PaymentService
172
RentService
PaymentService
SpanId = B
Client Send
TraceId = X
SpanId = A
173
RentService
PaymentService
SpanId = B
Client Send
SpanId = B
Server Received
TraceId = X
SpanId = A
TraceId = X
SpanId = C
174
RentService
PaymentService
SpanId = B
Client Send
SpanId = B
Server Received
SpanId = B
Server Send
TraceId = X
SpanId = A
TraceId = X
SpanId = C
175
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
176
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
177
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
178
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
?
Простить, потому что
179
1. Архитектура – функция от множества
переменных
Простить, потому что
180
1. Архитектура – функция от множества
переменных
2. Архитектура – результат эволюции на
протяжении времени
Простить, потому что
181
1. Архитектура – функция от множества
переменных
2. Архитектура – результат эволюции на
протяжении времени
3. Принципы должны быть “вечны”, а
инструменты актуальны и эффективны
Простить, потому что
182
1. SOA принципы живы
Придерживайтесь принципов
183
1. SOA принципы живы
2. Принцип LSD
Придерживайтесь принципов
184
1. SOA принципы живы
2. Принцип LSD
3. Изоляция данных делает жизнь приятнее
Придерживайтесь принципов
185
1. SOA принципы живы
2. Принцип LSD
3. Изоляция данных делает жизнь приятнее
4. Парадокс централизации
Придерживайтесь принципов
186
1. SOA принципы живы
2. Принцип LSD
3. Изоляция данных делает жизнь приятнее
4. Парадокс централизации
5. Планируй ресурсы динамически
Придерживайтесь принципов
187
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
188
Спасибо! Готовы ответить на ваши вопросы
@tolkv
@aatarasoff
189
@lavcraft
@aatarasoff

Contenu connexe

Tendances

Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
Platonov Sergey
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Ontico
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
Vladimir Sitnikov
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 

Tendances (20)

Производительность open source решений
Производительность open source решенийПроизводительность open source решений
Производительность open source решений
 
Joker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICESJoker 2015. WILD microSERVICES
Joker 2015. WILD microSERVICES
 
Быстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоковБыстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоков
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данных
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 

Similaire à Эволюционный дизайн. Joker Students Day 2016

Wild microservices and imaginary DevOps
Wild microservices and imaginary DevOpsWild microservices and imaginary DevOps
Wild microservices and imaginary DevOps
Кирилл Толкачёв
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Provectus
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
ScrumTrek
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 

Similaire à Эволюционный дизайн. Joker Students Day 2016 (20)

Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG Екатеринбург
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
Wild microservices and imaginary DevOps
Wild microservices and imaginary DevOpsWild microservices and imaginary DevOps
Wild microservices and imaginary DevOps
 
Tdd php
Tdd phpTdd php
Tdd php
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Изоморфные react-приложения
Изоморфные react-приложенияИзоморфные react-приложения
Изоморфные react-приложения
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
 
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
Юрий Крутилин. Инструментарий для реверс-инжиниринга Android-приложений
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 

Plus de Кирилл Толкачёв

Plus de Кирилл Толкачёв (6)

Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Spring Boot Ripper
Spring Boot RipperSpring Boot Ripper
Spring Boot Ripper
 
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
 
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
 

Эволюционный дизайн. Joker Students Day 2016