Top Banner
1 Эволюционный дизайн От любви до ненависти один шаг
189

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

Apr 15, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Эволюционный дизайн. Joker Students Day 2016

1

Эволюционный дизайнОт любви до ненависти один шаг

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

@tolkv

2

@lavcraft

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

3

@aatarasoff

@aatarasoff

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

DISCLAIMER

No warranty guarantee

4

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

5

Эволюционный дизайнОт любви до ненависти один шаг

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

6

● делается с первого раза

● не меняется годами

● не зависит от людей

● не зависит от процессов

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

7

У нас конечно же так

Потому что

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

8

У нас конечно же так

Потому что● мы работаем в лучшем банке

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

9

У нас конечно же так

Потому что● мы работаем в лучшем банке● и все остальные банки завидуют нам

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

10

У нас конечно же так

Потому что● мы работаем в лучшем банке● и все остальные банки завидуют нам● …● Стойте, кажется это про другое

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

11

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

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

12

“Почему JQuery?”

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

13

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

14

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

15

Точка зрения: архитектор

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

16

Работа идеального архитектора

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

17

Работа идеального архитектора

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

18

Работа идеального архитектора

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

19

Точка зрения: разработчик

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

Немного деталей не помешает

20

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

Немного деталей не помешает

21

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

Архитектура

22

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

АрхитектураЧто это?

23

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

Что же такое архитектура?

24

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

Что же такое архитектура?

25

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

Что же такое архитектура?

26

https://www.youtube.com/watch?v=_Kex5hwGE-w

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

27

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

28

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdConway’s Law

CoSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

29

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdConway’s Law

CoSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

30

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdConway’s Law

CoSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

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

31

Закон Конвея

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

Big Ball of Mud

32

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

Big Ball of Mud

33

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

34

Проблемы архитектуры

● Сильная связанность между модулями

● Слабое тестовое прикрытие

● Регрессионная спираль смерти○ частично решалась Selenium-тестами

○ но это дорого

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

SOLID

Counter-Strike Cats

35

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

GOF

SOLID

TDD

Counter-Strike Cats

36

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

37

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

38

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

39

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

40

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

12 April 1996Первое упоминание SOA

https://www.gartner.com/doc/302868/service-oriented-architectures- 41

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

Принципы SOA1. Standardized service contract

2. Loose coupling

3. Encapsulation

4. Reusability

5. Autonomy

6. Statelessness

7. Discoverability42

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

Принципы SOA1. Standardized service contract

2. Loose coupling

3. Encapsulation

4. Reusability

5. Autonomy

6. Statelessness

7. Discoverability43

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

Domain-Driven Design

44

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

5 January 2009SOA is Dead

http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html 45

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

SOA != SOAP (WS-*)

46

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

47

DDD

DdSOA

SoConway’s Law

Co

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

48

Проблема эволюции

● Начинали с одного проекта○ одна команда○ ui + три сервиса

● Более 10-ти однотипных проектов○ несколько команд○ десятки сервисов○ технологически одинаковые

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

49

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

50

Java

Python

JS

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

51

● Spring Boot/Spring Cloud

● Ratpack

● Dropwizard

● Vert.x

● Restlet

● Spark

● KumuluzEE

?

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

52

● Spring Boot/Spring Cloud

● Ratpack

● Dropwizard

● Vert.x

● Restlet

● Spark

● KumuluzEE

Выбирайте то, что больше нравится

/ в чем есть экспертиза

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

53

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

54

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

Принцип LSD

- L языков программирования- S среднее число фреймворков на язык- D типов источников данных

complexity = L * S * D

55

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

Немного LSD для вас

- три языка программирования- два в среднем фреймворка на язык- семь типов источников данных

- legacy WS, mongo db- OLTP, OLAP- elasticsearch, neo4j- Мишкина база %)

complexity = 3 * 2 * 7 = 42 (!)56

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

Чем нельзя пожертвовать?

min (L * S * D) → ?

57

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

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

58

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

L = Java 18+S = Spring BootD = ∞

59

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

L = Java

L += PythonL += JavaScript

60

Мы сами нарушаем правила

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

java

Ja

spring boot

Sb

61

DDD

DdSOA

SoLSD principle

LsConway’s Law

Co

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

62

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

63

t0

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

git clone <golden_service_repo>

64

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

65

Код устарел

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

66

Код устарелНужно переименовать классы

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

67

Код устарелНужно переименовать классыНужно удалить неиспользуемое

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

68

Код устарелНужно переименовать классыНужно удалить неиспользуемоеПрочая магия

Время, ошибки, фрагментация

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

git clone <template_repo>

69

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

70

Нужно переименовать классыНужно кастомизировать руками

Время

актуализация

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

lazybones / start.spring.io / yeoman

71

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

lazybones create api 1.0.1 service_name

72

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

~home > lazybones create api 0.0.1 rent-service

73

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

~home > lazybones create api 0.0.1 rent-serviceCreating project from template api 0.0.1 in 'rent-service'Define value for 'group' [ru.joker]:

74

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

~home > lazybones create api 0.0.1 rent-serviceCreating project from template api 0.0.1 in 'rent-service'Define value for 'group' [ru.joker]:Define value for 'version' [0.0.1]:

75

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

~home > lazybones create api 0.0.1 rent-serviceCreating 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

loggingsleuth

Define value for 'dependencies' [logging,sleuth]:

76

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

~home > lazybones create api 0.0.1 rent-serviceCreating 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

loggingsleuth

Define value for 'dependencies' [logging,sleuth]:

Project created for rent-service!

77

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

78

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

lazybones

Lz

yeoman

Yo

start.spring.io

Ssjava

Ja

spring boot

Sbgroovy

Gy

79

LSD principle

LsDDD

DdSOA

SoConway’s Law

Co

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

DRY off

80

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

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

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

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

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

@ThriftControllerpublic class InsuranceController implements TInsuranceService.Iface { @Override public void someMethod(TInsurance insurance){ //business value here }}

83

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

@ThriftClient(serviceId = "insurance-service")TInsuranceService.Client client;

...perform(client); //business value here...

84

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

smart libsstarters

launchers

shared libsutils

helpers

85

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

86

Старт приложения

Рабочее приложение

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

@ThriftClient(serviceId = "insurance-service")TInsuranceService.Client client;

TInsuranceService.Client client = Creator.create(TInsuranceService.Client.class,

"insurance-service");

...perform(client); //business value here...

87

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

@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

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

smart libs/shared libs

89

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

documentation → smart documentation

90

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

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

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

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

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

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

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

Payment Service[jar,doc] Insurance Service [jar,doc]

One Point of View [UberDoc.zip]

Rent Service[jar,doc] Other Service [jar,doc]

Агрегация информации

94

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

Парадокс централизацииЧтобы эффективно разрабатывать распределённые

приложения, нам нужны очень хорошие централизованные библиотеки и инструменты

Например: логирование, health-checking, метрики, обработка типовых ошибок, автодокументирование

95

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

Парадокс централизацииЧтобы эффективно разрабатывать распределённые

приложения, нам нужны очень хорошие централизованные библиотеки и инструменты

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

96

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

lazybones

Lz

yoman

Yo

start.spring.io

Ssjava

Ja

thrift

Th

spring boot

Sb

gradle

Grasciidoctor

Ad

groovy

Gy

97

Centralization paradox

CpLSD principle

LsDDD

DdSmart Docs

SdSmart Libs

SlSOA

SoConway’s Law

Co

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

Изоляция данных

98

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

99

Одно приложение - одна БД

Всё просто

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

N сервисов → 1 БД

Изоляция на уровне таблиц или схем100

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

N сервисов → 1 БД

Изоляция через хранимые процедуры

101

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

102

Transport Layer

API API API API API

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

103

Transport Layer

API API API API API

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

N сервисов → 1 БД

Распределённый монолит104

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

N сервисов → N БД

105

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

N сервисов → N БД

Распределённые транзакции – это больно

106

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

107

Transport Layer

API API API API API

Очень много кода

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

N сервисов → N БД

Ваше legacy тянет вас на дно108

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

109

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

M сервисов → 1 БД L сервисов → L БД

M + L = N, M << L110

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

111

Transport Layer

APIAPI API API API

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

M сервисов → 1 БД L сервисов → L БД

M + L = N, M << L112

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

lazybones

Lz

yoman

Yo

start.spring.io

Ssjava

Ja

thrift

Th

spring boot

Sb

gradle

Grasciidoctor

Ad

groovy

Gy

113

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdConway`s law

CoSmart Docs

SdSmart Libs

SlSOA

So

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

Доставка

114

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

war/ear

115

Зависимость от сервера приложений

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

executable fatJar

116

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

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

executable fatJar/npm-пакет

117

Разный менеджмент для разных форматов дистрибуции

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

docker/rkt/packer

118

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

119

war < fatJar < docker

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

scp fat.jar root@prod101:/home/app/

120

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

scp fat.jar root@prod101:/home/app/

Что делать с консистентостью?Как быть с доступностью?

121

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

./gradlew deployToArtifactoryansible -i [stage,dev,test] -t deploy

“Прибитая молотком” конфигурация122

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

123

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

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

Нужна оркестрация

124

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

125

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

mesos / kubernetes / ∞

126

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

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

127

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

128

t

Bare Metal

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

129

t

Bare Metal

Virtual Machines

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

130

t

Bare Metal

Virtual Machines

LightweightContainers

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

131

t

Bare Metal

Virtual Machines

LightweightContainers

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

132

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

Использование группы машин как одной

WEB

WASTED

CACHE

WASTED WASTED

HADOOP

133

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

Представьте, что кластер это просто одна большая машина

WEB

WASTED

CACHE

WASTED WASTED

HADOOP

WASTED

WEBCACHE

HADOOP FREE FREE

134

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

lazybones

Lz

yoman

Yo

start.spring.io

Ss

python

Py

java

Ja

spring boot

Sb

gradle

Grasciidoctor

Addocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

Au

Kubernetes

Kbgroovy

Gy

135

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSAGAS

SaSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

Anthrift

ThArtifactory

Ar

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

Найти нужный экземпляр

136

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

insert into settings_table values (key, endpoint)

137

“Прибитая молотком” конфигурация

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

update template → services.locationkill -s HUP nginx

138

Остаётся статическая привязка ресурсов

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

eureka/consul/etcd/zookeper

139

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

140

Service ClientRegistry-aware

HTTP Client

Service Registry

Service Instance 1

Service Instance N

Service Instance ...

Load balance request

Client side discovery

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

141

Service Client

Service Registry

Service Instance 1

Service Instance N

Service Instance ...

Load balance requestRouter/Proxy

Server side discovery

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkgroovy

Gy

142

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSAGAS

SaSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

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

Защити себя сам

143

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

144

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

145

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

5мс

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

146

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мс

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

147

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мс

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

148

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мс

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

149

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мс

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

150

Circuit Breaker

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

151

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мс

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

152

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мсOpen

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

153

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

300мсHalf-Open

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

154

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

5мсHalf-Open

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

155

Хочу бегемота!

Rent Service

Payment Service

Security Service Blockchain Service

Insurance Service

5мс

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

hystrix/apache camel/akka

156

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

157

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hxgroovy

Gy

158

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

Conway’s Law

Co

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

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

159

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

Нет трассировки - нет проблем? :)

160

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

X-Request-Id = X-Request-Id ?: new ID

Простой вариант с ServletFilter161

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

spring-cloud-sleuth/open zipkin

162

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

163

Rent

Ser

vice

No TraceIdNo SpanId

TraceId = XSpanId = A

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

164

Rent

Ser

vice

Paym

ent

Serv

ice

No TraceIdNo SpanId

TraceId = XSpanId = A

TraceId = XSpanId = B

TraceId = XSpanId = C

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

165

Rent

Ser

vice

Paym

ent

Serv

ice

Bloc

kcha

in S

ervi

ce

No TraceIdNo SpanId

TraceId = XSpanId = A

TraceId = XSpanId = B

TraceId = XSpanId = C

TraceId = XSpanId = D

TraceId = XSpanId = D

TraceId = XSpanId = F

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

166

Rent

Ser

vice

Paym

ent

Serv

ice

Secu

rity

Ser

vice

Bloc

kcha

in S

ervi

ce

No TraceIdNo SpanId

TraceId = XSpanId = A

TraceId = XSpanId = B

TraceId = XSpanId = C

TraceId = XSpanId = D

TraceId = XSpanId = D

TraceId = XSpanId = E

TraceId = XSpanId = E

TraceId = XSpanId = F

TraceId = XSpanId = G

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

167

Rent

Ser

vice

Paym

ent

Serv

ice

Secu

rity

Ser

vice

Bloc

kcha

in S

ervi

ce

No TraceIdNo SpanId

TraceId = XSpanId = A

TraceId = XSpanId = B

TraceId = XSpanId = B

TraceId = XSpanId = C

TraceId = XSpanId = C

TraceId = XSpanId = D

TraceId = XSpanId = D

TraceId = XSpanId = E

TraceId = XSpanId = E

TraceId = XSpanId = F

TraceId = XSpanId = G

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

168

Rent

Ser

vice

Paym

ent

Serv

ice

Secu

rity

Ser

vice

Bloc

kcha

in S

ervi

ce

TraceId = XSpanId = A

No TraceIdNo SpanId

TraceId = XSpanId = A

TraceId = XSpanId = A

TraceId = XSpanId = B

TraceId = XSpanId = B

TraceId = XSpanId = C

TraceId = XSpanId = C

TraceId = XSpanId = D

TraceId = XSpanId = D

TraceId = XSpanId = E

TraceId = XSpanId = E

TraceId = XSpanId = F

TraceId = XSpanId = G

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

169

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

170

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

171

Rent

Ser

vice

Paym

ent

Serv

ice

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

172

Rent

Ser

vice

Paym

ent

Serv

ice

SpanId = BClient Send

TraceId = XSpanId = A

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

173

Rent

Ser

vice

Paym

ent

Serv

ice

SpanId = BClient Send

SpanId = BServer Received

TraceId = XSpanId = A

TraceId = XSpanId = C

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

174

Rent

Ser

vice

Paym

ent

Serv

ice

SpanId = BClient Send

SpanId = BServer Received

SpanId = BServer Send

TraceId = XSpanId = A

TraceId = XSpanId = C

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

175

Rent

Ser

vice

Paym

ent

Serv

ice

SpanId = BClient Send

SpanId = BServer Received

SpanId = BClient Received

SpanId = BServer Send

TraceId = XSpanId = A

TraceId = XSpanId = C

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

176

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

Conway’s Law

Co

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

177

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

Conway’s Law

Co

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

yoman

Yo

start.spring.io

Ss

python

Py

lazybones

Lzjava

Ja

spring boot

Sb

gradle

Grasciidoctor

Adthrift

Thdocker

Dr

mesos

Ms

marathon

Machronos

Chaurora

AuArtifactory

Ar

Kubernetes

Kb

eureka

Eu

consul

Cl

etcd

Ed

zookeeper

Zkhystrix

Hx

sleuth

Sl

zipkin

Zn

groovy

Gy

178

Data Isolation

DiCentralization paradox

CpLSD principle

LsDDD

DdSmart Docs

SdDynamic Sharing

DsSmart Libs

SlSOA

So

ansible

An

Conway’s Law

Co

?

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

Простить, потому что

179

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

1. Архитектура – функция от множества переменных

Простить, потому что

180

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

1. Архитектура – функция от множества переменных

2. Архитектура – результат эволюции на протяжении времени

Простить, потому что

181

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

1. Архитектура – функция от множества переменных

2. Архитектура – результат эволюции на протяжении времени

3. Принципы должны быть “вечны”, а инструменты актуальны и эффективны

Простить, потому что

182

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

1. SOA принципы живы

Придерживайтесь принципов

183

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

1. SOA принципы живы2. Принцип LSD

Придерживайтесь принципов

184

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

1. SOA принципы живы2. Принцип LSD3. Изоляция данных делает жизнь приятнее

Придерживайтесь принципов

185

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

1. SOA принципы живы2. Принцип LSD3. Изоляция данных делает жизнь приятнее4. Парадокс централизации

Придерживайтесь принципов

186

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

1. SOA принципы живы2. Принцип LSD3. Изоляция данных делает жизнь приятнее4. Парадокс централизации5. Планируй ресурсы динамически

Придерживайтесь принципов

187

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

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

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

Спасибо! Готовы ответить на ваши вопросы

@tolkv

@aatarasoff

189

@lavcraft

@aatarasoff