microservices, docker & service discovery avec smartstack

27
techblog.newsweaver.com github.com/PierreVincent @PierreVincent pierrevincent Microservices, Docker & Service Discovery avec Smartstack Meetup - Docker Rennes ISTIC, 28 Mai 2015 This work is licensed under a Creative Commons Attribution 4.0 International Li cense .

Upload: pierre-vincent

Post on 09-Aug-2015

268 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Microservices, Docker & Service Discovery avec Smartstack

techblog.newsweaver.com

github.com/PierreVincent

@PierreVincent

pierrevincent

Microservices, Docker & Service Discovery

avec Smartstack

Meetup - Docker RennesISTIC, 28 Mai 2015

This work is licensed under a Creative Commons Attribution 4.0 International License.

Page 2: Microservices, Docker & Service Discovery avec Smartstack
Page 3: Microservices, Docker & Service Discovery avec Smartstack

DéploiementMicroservices

Environnement de Build

Tests d’intégration

Environnement de Dev.

Page 4: Microservices, Docker & Service Discovery avec Smartstack

Microservices are small, autonomous services that work together.

Sam Newman

Page 5: Microservices, Docker & Service Discovery avec Smartstack

Application Monolithique

Ancrage Technologique

Code complexe et difficile d’accès

Refactoring difficile

Dette technique croissante

Déploiement disruptif

Problèmes en production difficiles

à isoler

Options de scaling limitées

Page 6: Microservices, Docker & Service Discovery avec Smartstack

Taille réduite=

Cohésion forte

Autonomie et isolation

=Couplage faible

Indépendance technologique

Isolation des fautes=

Résilience

Réduction de l’impact des

déploiements

Scaling spécifique

Page 7: Microservices, Docker & Service Discovery avec Smartstack

+

Microservices

Cohésion1 conteneur = 1 microservice

Indépendance TechnologiqueLangage specifique au conteneur

Livraison- Image docker (peu importe la techno)- Docker registry

Couplage faibleChaque conteneur est independant

Liberté de déploiementSeulement besoin de Docker

Solutions d’orchestration- Déploiements plus complexes- Swarm, Compose, Kubernetes, Mesos...

Page 8: Microservices, Docker & Service Discovery avec Smartstack

Test / Validation

Systèmes distribués

ContinuousDelivery

MonitoringInterfaces entre

services

Page 9: Microservices, Docker & Service Discovery avec Smartstack

Tout sur les microservices

Délimiter les microservices

Un peu de lecture !

Page 10: Microservices, Docker & Service Discovery avec Smartstack

Service DiscoveryOrganisation dynamique entre microservices

Page 11: Microservices, Docker & Service Discovery avec Smartstack

Nombre de services variable Services à courte durée de vie

Comment localiser les services disponibles ?

Comment répartir la charge entre les

instances ?

Comment savoir qu’un service n’est plus disponible ?

Page 12: Microservices, Docker & Service Discovery avec Smartstack

❏ Enregistrement / Découverte

❏ Load Balancing

❏ Abstraction pour les clients

❏ Gestion proactive des erreurs

❏ Résilience aux problèmes exterieurs

❏ Pas de “Single Point of Failure”

Checklist

Page 13: Microservices, Docker & Service Discovery avec Smartstack

Recommendations Service

Viewing HistoryService

C*

.../users/123/recommendations

.../users/123/viewingHistory

{ “watched”: [ “Breaking Bad”, … ]}

{“recommendations”: [ { “watch”: “Better call saul!”, “because”: [“Breaking Bad”] }, ...]}

Page 14: Microservices, Docker & Service Discovery avec Smartstack

Recommendations Service

Viewing HistoryService

http://1.1.1.1/users/123/recommendations

services.properties

viewing_history_url = http://1.1.1.1

1.1.1.1

Solution 1: Dépendances en config.

Possibilité de volume partagé avec liste des services et instances

Pas vraiment dynamique :- service doit prendre en compte les

changements- configuration doit être mise à jour

+

-

Page 15: Microservices, Docker & Service Discovery avec Smartstack

Recommendations Service

Viewing HistoryService

http://viewing-history/users/123/recommendations

/etc/hosts

1.1.1.1 viewing-history

1.1.1.1

Solution 2: Docker links

docker run --named=viewing-history viewing-history-service:latest

docker run --named=recommendations --link viewing-history:viewing-history recommendations-service:latest

Simplicité pour les clients

Dépendances claires

Déploiment possible avec docker-compose

Manque de dynamisme :- ordre prédefini- difficile pour instances multiples

+

-

Page 16: Microservices, Docker & Service Discovery avec Smartstack

viewing-history.service → 1.1.1.1

Recommendations Service

Viewing HistoryService

http://viewing-history.service/users/123/recommendations

1.1.1.1

Solution 3: DNS

DNS

Simplicité pour les clients

DNS avec round-robin :- instances multiples- load balancing

Problèmes de propagation

+

-

Page 17: Microservices, Docker & Service Discovery avec Smartstack

[ viewing-history: 1.1.1.1 ...]

Recommendations Service

Viewing HistoryService

http://1.1.1.1/users/123/recommendations

1.1.1.1

Solution 4: Publisher / Subscriber

Key-valueStore

Dynamique :- chaque instance s’enregistre- les clients découvrent les instances

Mise en place d’un Key-value Store HA

Complexité pour les services- Logique codées dans les services

+

-

Page 18: Microservices, Docker & Service Discovery avec Smartstack

[ viewing-history: 1.1.1.1 ...]

Recommendations Service

Viewing HistoryService

1.1.1.1

Solution 4: Publisher / Subscriber + Ambassadeur

Key-valueStore

http://1.1.1.1/users/123/recommendations

Très dynamique

Transparence pour Clients et Services

Mise en place d’un Key-value Store HA

+

-

Page 19: Microservices, Docker & Service Discovery avec Smartstack

SmartstackDiscovery framework et intégration avec Docker

Page 20: Microservices, Docker & Service Discovery avec Smartstack

github.com/airbnb/nerve

github.com/airbnb/synapse

Page 21: Microservices, Docker & Service Discovery avec Smartstack

Zookeeper(Quorum)

Application

Viewing History Service

API Application

Recommendations Service

SynapseHAProxyNerve

Publication

Discovery

SmartstackVue d’ensemble

Page 22: Microservices, Docker & Service Discovery avec Smartstack

Application

Nerve

ZK

1.1.1.1

nerve.confname = viewing_historyip = 1.1.1.1port = 8080healthCheck = /health

Publicatio

n

SmartstackNerve

API(8080)

/health

Viewing History Service

Page 23: Microservices, Docker & Service Discovery avec Smartstack

Application

Synapse

ZK

1.1.1.2

synapse.confviewing_history → 9000

Discov

ery

SmartstackSynapse

HAProxy

1.1.1.1

haproxy.confviewing_history: frontend: localhost:9000 backends: [1.1.1.1:8080]

GEThttp://localhost:9000/users/123/viewingHistory

8080 Servicesviewing_history: [1.1.1.1:8080]

Recommendations Service

ping

Page 24: Microservices, Docker & Service Discovery avec Smartstack

Distribution de base(ex. Ubuntu)

ruby

synapse (gem)

HA Proxy

nerve (gem)

service.jarsynapse.conf / nerve.conf

startup script

server.js + autres

startup script

Base Smartstack

startSynapse.sh

startNerve.sh

+ Techno

synapse.conf / nerve.conf + Code du service+ Config

Page 25: Microservices, Docker & Service Discovery avec Smartstack

FROM smartstack-java

# DiscoveryADD nerve.conf.json /etc/ADD synapse.conf.json /etc/

# JARADD service.jar /opt/service/

# StartupADD start.sh /opt/start.shENTRYPOINT ["/opt/start.sh"]

Dockerfile

#!/bin/bash

/opt/startSynapse.sh/opt/startNerve.sh

java -jar service.jar

start.sh

$ docker build -t my-service ....$ docker run -d -e ZK_HOSTS=zk1:2181,zk2:2181 my-service

Page 26: Microservices, Docker & Service Discovery avec Smartstack

color-service

color-service

color-serviceGET .../v1/color

color-ui-service

blue

{ "name": "blue", "hex": "0000FF"}

{ "name": "red", "hex": "FF0000"}

{ "name": "green", "hex": "00FF00"}

Démo !

Page 27: Microservices, Docker & Service Discovery avec Smartstack

techblog.newsweaver.com

Questions ?

@PierreVincent