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