Microservices, Docker & Service Discovery avec Smartstack
-
Upload
pierre-vincent -
Category
Technology
-
view
269 -
download
3
Transcript of Microservices, Docker & Service Discovery avec Smartstack
![Page 1: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/2.jpg)
![Page 3: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/3.jpg)
DéploiementMicroservices
Environnement de Build
Tests d’intégration
Environnement de Dev.
![Page 4: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/4.jpg)
Microservices are small, autonomous services that work together.
Sam Newman
![Page 5: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/7.jpg)
+
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/8.jpg)
Test / Validation
Systèmes distribués
ContinuousDelivery
MonitoringInterfaces entre
services
![Page 9: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/9.jpg)
Tout sur les microservices
Délimiter les microservices
Un peu de lecture !
![Page 10: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/10.jpg)
Service DiscoveryOrganisation dynamique entre microservices
![Page 11: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/12.jpg)
❏ 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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/13.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/14.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/15.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/17.jpg)
[ 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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/18.jpg)
[ 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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/19.jpg)
SmartstackDiscovery framework et intégration avec Docker
![Page 20: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/20.jpg)
github.com/airbnb/nerve
github.com/airbnb/synapse
![Page 21: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/21.jpg)
Zookeeper(Quorum)
Application
Viewing History Service
API Application
Recommendations Service
SynapseHAProxyNerve
Publication
Discovery
SmartstackVue d’ensemble
![Page 22: Microservices, Docker & Service Discovery avec Smartstack](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/22.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/23.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/24.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/25.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/26.jpg)
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](https://reader036.fdocuments.in/reader036/viewer/2022062515/55c70047bb61ebdb718b482f/html5/thumbnails/27.jpg)
techblog.newsweaver.com
Questions ?
@PierreVincent