aplikacji rozproszonych sprytne projektowanie -...

28
Sprytne projektowanie aplikacji rozproszonych @ArturZylinski (azim)

Upload: phungthuan

Post on 01-Mar-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Sprytne projektowanieaplikacji 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ę teorii3. Krok po kroku

a. Komunikacjab. Kompozycja

4. Demo

3

Service-OrientedArchitecture (SOA)

Def.: Aplikacje są NIE - ZA - LEŻ - NE

4

Czy warto?

5

Czy warto?

KISS principle

Single responsibility principle

More Agile

Lowering maintenance costs

Enhancing architectural flexibility

Easier testingParallel Development

Loose coupling

Scalability

6

Tak naprawdę już(nieświadomie?) zaczęliśmy

Krok #0: Jak zacząć?

7

Nawet najprostszy blog...

Blog

8

Nawet najprostszy blog będzie wymagał integracji z zewnętrznymi serwisami9

Blog

Krok #1: Komunikacja HTTP, API Clients, RESTful

10

Krok #1: Komunikacja - HTTP, API Clients, RESTful11

FRONT

Listen for HTTP Req.

CORE

Listen for HTTP Req.

DIRECTORY

Listen for HTTP Req.

USER MGMT

Listen for HTTP Req.

DB

Krok #1b: Komunikacja asynchroniczna

Kolejki zadań, Celery (RabbitMQ, Redis), Apache Kafka***

12

Krok #1b: Komunikacja asynchroniczna - Kolejki zadań, Celery

RoutingHandlers

[email protected]

APP 1Business logic

Http Clients Task Schedulers

App 2 Client App 3 Client App 5 Client App 3 Scheduler App 5 Scheduler

HTTP Request Send task(AMQP)

13

Krok #1b: Komunikacja asynchroniczna - Kolejki zadań, Celery

RoutingHandlers

[email protected]

APP 1Business logic

Http Clients Task Schedulers

App 2 Client

App 3 Client

App 5 Client

App 3 Scheduler

App 5 Scheduler

HTTP Request Send task (AMQP)

Endpoints

Czarna skrzynka

Clients / Schedulers(wspólne dla wszystkich aplikacji)

14

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

Tips & Tricks

15

Krok #2: KompozycjaKontenerowa rewolucja

16

17

docker-compose.yml

web:

build: .

links:

- db

ports:

- "8000:8000"

db:

image: postgres

18Krok #2: Kompozycja - Kontenerowa rewolucja

blog.docker.com

DEMO time

19

https://github.com/azylinski/pywaw48-counter-soa-demo

FrontPython 3.4

Tornadoweb

API Client

Common for Base

Task Scheduler

Back Webrouter - Handler

Back Worker

@celery.task

BusinessLogic

Python 2.7Flask

+ RabbitMQ + Redis

20

Co widzieliśmy?

Hmm… żadnych problemów? Naprawdę???

21

Potencjalne trudności

● autoryzacja● monitorowanie, system logów● bardziej złożona architektura● ...

22

CzyNAPRAWDĘ

warto?

23

Nie wierzcie na słowo

24

Nie wierzcie na słowo

Adrian Cockcroft@adrianco

“Mówią jak jest”

Fred George@fgeorge52

Solomon Hykes@solomonstre

Martin Fowler@martinfowler

25

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