Sprytne projektowanie aplikacji rozproszonych

Transkrypt

Sprytne projektowanie aplikacji rozproszonych
Sprytne projektowanie
aplikacji rozproszonych
@ArturZylinski (azim)
@ArturZylinski
● Tech Leader w Growbots - A.I. for Sales
○ 500 Startups
○ 50+ dockerowych instancji
○ #python #docker #elasticsearch
#ansible #rabbitmq #reactjs
● uwielbiam algorytmikę i ...
● … zwiedzać świat, grać w piłkę
2
O czym opowiem?
1. Projektowanie jakich aplikacji?
2. Czy warto? Trochę teorii
3. Krok po kroku
a. Komunikacja
b. Kompozycja
4. Demo
3
Service-Oriented
Architecture (SOA)
Def.: Aplikacje są NIE - ZA - LEŻ - NE
4
Czy warto?
5
Lowering maintenance costs
KISS principle
Scalability
Parallel Development
Czy warto?
Single
responsibility
principle
More Agile
Easier testing
Loose cou
pling
Enhancing architectural flexibility
6
Krok #0: Jak zacząć?
Tak naprawdę już
(nieświadomie?) zaczęliśmy
7
Blog
Nawet najprostszy blog...
8
Blog
Nawet najprostszy blog będzie wymagał integracji z zewnętrznymi serwisami
9
Krok #1: Komunikacja
HTTP, API Clients, RESTful
10
Listen for HTTP Req.
FRONT
Listen for HTTP Req.
USER MGMT
Listen for HTTP Req.
CORE
Listen for HTTP Req.
DIRECTORY
DB
Krok #1: Komunikacja - HTTP, API Clients, RESTful
11
Krok #1b: Komunikacja
asynchroniczna
Kolejki zadań, Celery (RabbitMQ, Redis),
Apache Kafka***
12
Send task
(AMQP)
HTTP Request
Routing
Handlers
CeleryFactory
@celery.task
APP 1
Business logic
Http Clients
App 2 Client
Task Schedulers
App 3 Client
App 5 Client
App 3 Scheduler
App 5 Scheduler
Krok #1b: Komunikacja asynchroniczna - Kolejki zadań, Celery
13
Send task
(AMQP)
HTTP Request
Routing
Handlers
CeleryFactory
@celery.task
APP 1
Czarna skrzynka
Business logic
Http Clients
App 2
Client
App 3
Client
Task Schedulers
App 5
Client
App 3
Scheduler
Endpoints
App 5
Scheduler
Clients / Schedulers
(wspólne dla wszystkich aplikacji)
Krok #1b: Komunikacja asynchroniczna - Kolejki zadań, Celery
14
Tips & Tricks
Jak współdzielić kod między serwisami?
● paczki Pythona
● osobne repozytorium (shared/common)
● wersjonowanie
● łatwe i szybkie rozwiązanie?
○ dev. - symbolic link
○ stg./prod. - osobna kopia
15
Krok #2: Kompozycja
Kontenerowa rewolucja
16
17
docker-compose.yml
web:
build: .
links:
- db
ports:
- "8000:8000"
db:
image: postgres
blog.docker.com
Krok #2: Kompozycja - Kontenerowa rewolucja
18
DEMO time
https://github.com/azylinski/pywaw48-counter-soa-demo
19
Co widzieliśmy?
API Client
Front
Python 3.4
Tornadoweb
Common
for Base
Task Scheduler
+ RabbitMQ
Back Web
router Handler
Back
Worker
Business
Logic
Python 2.7
Flask
@celery.task
+ Redis
20
Hmm… żadnych
problemów?
Naprawdę???
21
Potencjalne trudności
●
●
●
●
autoryzacja
monitorowanie, system logów
bardziej złożona architektura
...
22
Czy
NAPRAWDĘ
warto?
23
Nie wierzcie na słowo
24
Nie wierzcie na słowo
Adrian Cockcroft
@adrianco
Fred George
@fgeorge52
Solomon Hykes
@solomonstre
Martin Fowler
@martinfowler
“Mówią jak jest”
25
Nie wierzcie na słowo
●
●
●
●
The State of the Art in Microservices by Adrian Cockcroft
Implementing Service Oriented Architecture by Amazon Web Services
Micro-Service Architecture by Fred George
Keynote: Microservices by Martin Fowler
●
●
Docker Channel
Docker London Meetup, January 2015:
Andrew Martin – Building and Testing Docker Containers
DockerCon EU: Keynote on Orchestration
(Docker Machine, Swarm, Compose)
●
26
Co dalej?
●
●
●
●
●
●
Micro-services
OS: CoreOS
Service discovery: etcd
Messaging system: Apache Kafka
Docker - Machine, Swarm and Compose
I dużo, dużo więcej ...
27
Pięknie dziękuję
Pytania?
@ArturZylinski
[email protected]
www.growbots.com
28

Podobne dokumenty