![Page 1: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/1.jpg)
CONSTRUIRE DES APPLICATIONS CLOUD
NATIVESou le passage de Lamp à Nvmpsesrrkc
Ori Pekelman, markeuteux en chef chez platform.shMais on me permet de parler ici parce que je fait de l’Erlang.
@oripekelman sur github/twitter/linked-in
![Page 2: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/2.jpg)
CONSTRUIRE DES APPLICATIONS CLOUD
NATIVESPréambule
![Page 3: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/3.jpg)
LE CLOUD EN QUOI ET POURQUOI
• Une application cloud est une application potentiellement capable:
• de tourner sur des multiples infrastructures distantes
• de migrer d’une infrastructure à une autre
• de haute disponibilité
• de montée en échelle horizontale
• d’absorber des pics irréguliers
• de déploiement continu
![Page 4: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/4.jpg)
App-Server
DB
Serveur Web
![Page 5: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/5.jpg)
LAMP
• Linux
• Apache
• MySql
• PHP
![Page 6: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/6.jpg)
LAMP
• Linux
• Apache
• MySql
• PHP
En tout cas on n’utilise plus que Linux ça sert à rien de le dire… et
l’abstraction de l’OS a été remplacé par celle des containers.
Plus la dessous plus tard.
![Page 7: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/7.jpg)
NMP
• Linux
• Nginx Apache
• MySql
• PHP
Pas vu un Apache depuis un bail.
![Page 8: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/8.jpg)
NMP
• Linux
• Nginx Apache
• MariaDB MySql
• PHP
Là au moins ça ne change pas l’acronyme
![Page 9: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/9.jpg)
NMP
• Linux
• Nginx Apache
• MariaDB MySql
• PHP Bon vieux demeure.
![Page 10: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/10.jpg)
App-Server
DB
Serveur Web
![Page 11: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/11.jpg)
MÊME QUAND ON AURA AJOUTÉ PLEIN DES CASES, LA RÉALITÉ SOUS-JACENTE
RESTE LA MÊME
App-Server
DB
Serveur Web
Et un bout de colle qui est l’OS + une machine pour le faire tourner
![Page 12: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/12.jpg)
Pleins de bouts de colle + plein de machines pour le faire
tourner
Serveur(s) Web
App-Server(s)
DB(s)
![Page 13: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/13.jpg)
Pleins de bouts de colle + plein de machines pour le faire
tourner
Serveur(s) Web
App-Server(s)
DB(s)
J’AIME IMAGINER LA CHOSE EN CERCLES CONCENTRIQUES QUI RENDENT LA
PLURALITÉ PLUS FACILE À APPRÉHENDER
![Page 14: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/14.jpg)
Pleins de bouts de colle + plein de machines pour le faire
tourner
Serveur(s) Web
App-Server(s)
DB(s)
NOUS ALLONS PASSER DE L’EXTÉRIEUR VERS L’INTÉRIEUR ET VOIR LE “QUOI” ET LE “POURQUOI” DE CHAQUE COUCHE
![Page 15: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/15.jpg)
CHAPÎTRE PREMIER, LE CDN
![Page 16: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/16.jpg)
• Pas uniquement pour les “assets” mais en frontal des toutes les pages
• Même en mode loggué
CHAPÎTRE PREMIER, LE CDN
![Page 17: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/17.jpg)
LE CDN C’EST JUSTE NOTRE SERVEUR WEB COUPÉ EN DEUX
App-Server
DB
Serveur Web
![Page 18: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/18.jpg)
LE CDN C’EST JUSTE NOTRE SERVEUR WEB COUPÉ EN DEUX
App-Server
DB
Serveur Web
CDN
![Page 19: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/19.jpg)
IL PARTICIPE A TOUTES CES “CAPACITÉS” CLOUD.
App-Server
DB
Serveur Web
CDN
de tourner sur des multiples infrastructures distantes
de migrer d’une infrastructure à une autre
de haute disponibilité
de montée en échelle horizontale
d’absorber des pics irréguliers
de déploiement continu
![Page 20: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/20.jpg)
IL VA NOUS PERMETTRE PLUS FACILEMENT DE PASSER À ÇA:
CDN
Point d’entrée Point d’entrée Point d’entrée
DB
Serveur Web
App
Serveur WebServeur Web
App App
![Page 21: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/21.jpg)
PUIS À ÇACDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE CACHE CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
![Page 22: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/22.jpg)
ET ÇACDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
![Page 23: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/23.jpg)
OU ÇACDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
![Page 24: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/24.jpg)
ET ENCORE, MAIS ON VA RENTRER DANS LE DÉTAIL PLUS TARD.
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 25: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/25.jpg)
Si la performance est orthogonale à la scalabilité … le CDN, pourtant, est la seule manière d’optimiser le TTFB.
CHAPÎTRE PREMIER, LE CDN
![Page 26: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/26.jpg)
• TTFB = Time to first byte
• Dépend uniquement de la proximité des “Edges”, vous savez, à cause de c = 299,792,458 m/s
• Rend Google content. Mais aussi vos utilisateurs.
CHAPÎTRE PREMIER, LE CDN
![Page 27: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/27.jpg)
LE CDN IMPOSE DES CONTRAINTES
• Le “hit ratio” doit être bon
• GEOIP
• Triturages des x-headers à la mano pour faire quelque chose de charmant
![Page 28: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/28.jpg)
LE CDN IMPOSE DES CONTRAINTES
• Le “hit ratio” doit être bon
• GEOIP * En tout cas vous devez comprendre l’effet sur le “hit ratio”. Les CDN vont vous exposer des headers intéressants à titre d’exemple HTTP_CF_IPCOUNTRY pour Cloudflare ou CloudFront-Viewer-Country pour le CDN éponyme. Fastly va vous donner jusqu’à la ville.
• Triturages des x-headers à la mano pour faire quelque chose de charmant
![Page 29: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/29.jpg)
LE CDN IMPOSE DES CONTRAINTES
• Le “hit ratio” doit être bon
• GEOIP
• Triturages des x-headers à la mano pour faire quelque chose de charmant* Certains CDNs vont vous permettre de triturer à mort. Evitez.
![Page 30: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/30.jpg)
LE CDN, SON IMPLÉMENTATION NOUS POUSSE À FAIRE DES CHOSES BIEN
• Charger les contenus dynamiques en asynchrone, et si vôtre CDN le supporte .. en utilisant ESI (Xavier Leune vous en a déjà dit des choses hier .. ).
/users/me
• Contrôle de la sémantique cache au niveau de chaque contrôleur / chaque action de contrôleur.
• D’ailleurs .. cela fait déjà un gros bout de chemin vers les micro-services
![Page 31: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/31.jpg)
SYMFONY NOUS REND LA VIE SIMPLE ET BELLE
/**
*@Cache(expires="tomorrow")
*/
classUserControllerextendsController
{
/**
*@Cache(lastModified="user.getUpdatedAt()",ETag="'User'~user.getId()~user.getUpdatedAt().getTimestamp()")
*/
publicfunctionmeAction(User$user)
{
}
}
![Page 32: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/32.jpg)
LE PAR-DÉFAUT EST RAISONNABLE
Par défaut Cache-Control est no-cache
![Page 33: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/33.jpg)
ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
![Page 34: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/34.jpg)
ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la page peut être
en cache
![Page 35: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/35.jpg)
ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la page peut être
en cacheMais des parties peuvent rester dynamiques
![Page 36: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/36.jpg)
ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la page peut être
en cacheMais des parties peuvent rester dynamiques
Avec des TTLS différents…
![Page 37: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/37.jpg)
ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la page peut être
en cacheMais des parties peuvent rester dynamiques
Avec des TTLS différents…
Avec même du ciblage
![Page 38: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/38.jpg)
framework:esi:truefragments:{path:/_proxy}
SYMFONY A DU SUPPORT ESI INTÉGRÉ
Ouvrez donc app/config/config.yml et dans la partie framework :
![Page 39: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/39.jpg)
{{render_esi(uri,options=[])}}
QUI SAIT FAIRE DU FALLBACK EN DEV….
• Dans votre template twig il y a un helper pour ça.
![Page 40: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/40.jpg)
{{render_hinclude(controller('...'),{'default':'default/content.html.twig'})}}
VOUS POUVEZ OPTER POUR DU JS ASYNC. ICI AUSSI SYMFONY VA VOUS AIDER.Voir http://mnot.github.io/hinclude/
• Dans votre template twig il y a un helper pour ça aussi:
![Page 41: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/41.jpg)
{{render_hinclude(controller('...'),{'default':'default/content.html.twig'})}}
PROBABLEMENT IL VAUT MIEUX FAIRE LE JS AVEC UN FRAMEWORK COMME IL
FAUT (REACT? ANGULAR?)
• Et servir du JSON de vos magnifiques micro-services avec silex.
![Page 42: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/42.jpg)
• Le choix du CDN est compliqué. Nous avons utilisé CloudFront, CloudFlare et Fastly
• CloudFront n’est pas cher. Mais regardez bien la latence d’invalidation.
• CloudFlare peut être incroyable pour lutter contre des DDOS et il a des headers GEO détaillés.
• Fastly peut être cher (surtout en HTTPS) mais il donne du support ESI et custom VCL (même si c’est mal).
• Akamai ont inventé ESI; mais ils sont super chers et j’aime pas traiter avec eux.
CHAPÎTRE PREMIER, LE CDN
![Page 43: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/43.jpg)
ET VARNISH?
• Le reverse veut être proche du client.
• Implémenter du code applicatif au niveau du reverse c’est mal. Très mal. C’est intestable et bricolé. A chaque couche son rôle.
• Fastly supporte des VCLs customs. Mais évitez SVP (pas fastly, juste les VCLs customs).
![Page 44: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/44.jpg)
ET VARNISH?
• Par contre c’est pas du tout débile d’avoir un autre reverse devant votre serveur web.
• Considérez simplement nginx (pas de support ESI mais SSI est équivalent). Varnish c’est OK mais souvent superflu.
![Page 45: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/45.jpg)
Pleins de bouts de colle + plein de machines pour le faire
tourner
Serveur(s) Web
App-Server(s)
DB(s)
![Page 46: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/46.jpg)
• On va encore casser notre serveur web en plus petites parties.
• Cela peut simplement être un load balancer comme ELB sur AWS. Mais attention au support SNI. Chez nous on utilise ELB devant notre propre entre-point qui fait aussi le routage SSH.
• Ca peut aussi être un HAProxy ou l’un des dizaines projets en GoLang qui apparaissent comme des champignons après la pluie.
CHAPÎTRE DEUXIÈME, TRÈS COURT, SUR L’ENTRY POINT
![Page 47: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/47.jpg)
• Il peut être assez intelligent et participer au routage vers vos micro-services.
• Il participe à votre haute-disponibilité. Il isole du point de vue réseau vos systèmes internes.
CHAPÎTRE DEUXIÈME, TRÈS COURT, SUR L’ENTRY POINT
![Page 48: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/48.jpg)
ON N’A FAIT QUE ÇA:CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 49: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/49.jpg)
COMME QUOI, 40 MINUTES POUR RENDRE VOS APPLICATIONS NATIVES
AU CLOUD C’EST STRESS.CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 50: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/50.jpg)
J’ESPÈRE QUE VOUS AVEZ SUIVI LE TALK DE FABIEN MEURILLON SUR LES MICRO-SERVICES. VOUS AVEZ DÉJÀ COMPRIS LA
RELATION ENTRE CETTE BANDE ET LA COUCHE LA PLUS EN AMONT (CDN) DONC JUSTE QUELQUE REMARQUES.
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 51: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/51.jpg)
• Comme on a cassé notre serveur web en plusieurs parties chacune remplissant un petit rôle sur le chemin de la requête on comprends l’intérêt de casser notre serveur d’application aussi;
• On peut ainsi faire monter en échelle chaque partie de manière autonome ce qui, bizarrement, va nous réduire la facture d’hébergement. On met pas TOUT à l’échelle du composant le plus lourd.
CHAPÎTRE TROISIÈME, LES MICRO-SERVICES
![Page 52: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/52.jpg)
Si vôtre graph de services n’est pas trop profond ça peut encore aller.
MAIS ATTENTION À LA LATENCE À LA QUEUE LEU-LEU
![Page 53: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/53.jpg)
• Si vous commencez à faire des boucles, même avec du keep-alive ça risque de non seulement être lent… mais aussi de consommer un max de mémoire.
• Deux stratégies pour mitiger ceci:
MAIS ATTENTION À LA LATENCE À LA QUEUE LEU-LEU
Foreachimageinarticledoanhttp
request
![Page 54: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/54.jpg)
• Designer vos APIs pour que toujours on puisse faire des appels “bulk”. On ne vend plus au détail.
• Communiquer en profondeur uniquement à travers une Queue de Messages
• Exposer chaque service avec deux APIs (HTTP synchrone et MQ Async) est une bonne pratique.
• On commence par HTTP pour aller vite. Puis on factorise en async.
LA LATENCE À LA QUEUE LEU-LEU
![Page 55: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/55.jpg)
DONC EN GROS AU LIEU DE FAIRE
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 56: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/56.jpg)
VOUS FAÎTESCDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 57: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/57.jpg)
VOUS FAÎTESCDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 58: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/58.jpg)
DOCTEUR, LE MESSAGE QUEUE C’EST PAS COMPLIQUÉ ?
![Page 59: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/59.jpg)
useSwarrot\Processor\ProcessorInterface;useSwarrot\Broker\Message;
classProcessorimplementsProcessorInterface{publicfunctionprocess(Message$message,array$options){echosprintf("Consumemessage#%d\n",$message->getId());}}
![Page 60: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/60.jpg)
Chaque queue de message donne des garanties différentes.
Mais de nos jours, Rabbit ou Kafka, ça va vous suffire.
![Page 61: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/61.jpg)
ET POUR LES ÉCRITURES … CECI VOUS DONNE DU
“BACKPRESSURE MANAGEMENT”
![Page 62: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/62.jpg)
UN PIC DE TRAFIC NE VAS PLUS RÉSULTER DANS VOS SYSTÈMES QUI PLANTENT.
MAIS SIMPLEMENT DANS UNE LATENCE PLUS IMPORTANTE POUR LA MISE À JOUR DES
DONNÉES.
![Page 63: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/63.jpg)
C’est déjà du CQRS.
Avez vous entendu parler de CQRS ?
ET ON PEUT TRICHER ENCORE MIEUX
Foreachimageinarticledoanhttp
request
![Page 64: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/64.jpg)
• Désolé, ça, je ne traduis pas en Français.
CHAPÎTRE QUATRIÈME, COMMAND AND QUERY RESPONSIBILITY
SEGREGATION
Foreachimageinarticledoanhttp
request
![Page 65: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/65.jpg)
• Au lieu d’intermédier les lectures par vôtre Queue de Messages
CHAPÎTRE QUATRIÈME, COMMAND AND QUERY RESPONSIBILITY
SEGREGATION
Foreachimageinarticledoanhttp
request
![Page 66: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/66.jpg)
VOUS FAÎTES TOUTES VOS LECTURES SUR LE MOTEUR DE RECHERCHE
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 67: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/67.jpg)
VOUS FAÎTES TOUTES VOS LECTURES SUR LE MOTEUR DE RECHERCHE
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
ECRITURE
![Page 68: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/68.jpg)
VOUS FAÎTES TOUTES VOS LECTURES SUR LE MOTEUR DE RECHERCHE
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
ECRITURE
![Page 69: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/69.jpg)
VOUS FAÎTES TOUTES VOS LECTURES SUR LE MOTEUR DE RECHERCHE
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
LECTURE
![Page 70: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/70.jpg)
SI VOUS AVEZ SUIVI HIER LA PREZ DE LA FOURCHETTE SUR
“L’API FIRST”.. ET CELLE DE BLABLA SUR ELASTICSEARCH.. VOUS VERREZ. CE N’EST PAS
DE LA THÉORIE.
![Page 71: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/71.jpg)
• Vous faîtes toutes vos lectures “bulk”, les listes, par le moteur de recherche (et si vous avez suivi la prez blablacar … vous avez vu. Un ElasticSearch est très riche).
• Parfois même les lectures unitaires c’est pas mal par le moteur de recherche (donc un seul lieu dans lequel vous aller dénormaliser).
QUAND JE DIS TOUTES LES LECTURES JE SIMPLIFIE UN PEU
![Page 72: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/72.jpg)
• Par contre sur un formulaire, tout ce qui est transactionnel, vous lisez de votre DB principale qui demeure “la source de vérité”
• L’écriture correspondante va partir souvent sur le MQ sauf cas super rare ou quelqu’un vous a convaincu que l’écriture synchrone est un feature.
LA VÉRITÉ A UNE SEULE SOURCE
![Page 73: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/73.jpg)
ET QUEL MOTEUR DE RECHERCHE?
![Page 74: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/74.jpg)
ElasticSearch
ET QUEL MOTEUR DE RECHERCHE?
![Page 75: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/75.jpg)
OK, d’accord SOLR c’est très bien aussi, en tout cas c’est du Lucene.
ET QUEL MOTEUR DE RECHERCHE?
![Page 76: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/76.jpg)
OK, d’accord, Xavier, Sphinx existe.
ET QUEL MOTEUR DE RECHERCHE?
![Page 77: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/77.jpg)
ElasticSearch
ET QUEL MOTEUR DE RECHERCHE?
![Page 78: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/78.jpg)
• C’est la meilleure traduction que j’ai pu trouver pour “Staggered Release”. Qui est le contraire du “Synchronous Release”.
• Si vous pensez faire du micro-service, mais vous devez mettre en prod tous les services de manière synchrone, vous ne faites pas de micro-services.
CHAPITRE CINQUIÈME, MISE EN PROD ÉCHELONNÉE
![Page 79: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/79.jpg)
Car parfois vous voulez pourvoir partager des modèles entre vos micro-services
DE MANIÈRE PARFAITEMENT DÉSAGRÉABLE, CECI EST NON-TRIVIAL
![Page 80: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/80.jpg)
• C’est qu’on appelle des “Lazy Migrations” de migrations à la volée.
• C’est difficile à faire au niveau d’un ORM comme Doctrine.
CHAPÎTRE CINQ ET DEMI, LA MIGRATION PROGRESSIVE
![Page 81: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/81.jpg)
• Il y a pourtant un pattern : le membre static, un integer qui représente en Semver la version du model. A l’hydratation on regarde la version et on fait jouer la migration.
• Mais beaucoup plus facile à faire si vous faîtes TOUTES vos lectures sur le moteur de recherche…. la co-existence des modèles est assuré par l’indexation.
CHAPÎTRE CINQ ET DEMI, LA MIGRATION PROGRESSIVE
![Page 82: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/82.jpg)
MAIS, ORI, ON DEVAIT PARLER DES APPLICATIONS NATIVES AU CLOUD, N’ES TU PAS EN TRAIN DE TE PERDRE DANS
TES PENSÉES?
![Page 83: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/83.jpg)
• Il y a une cohérence à tout ça. Je pense.
• Ces intermédiations, tout-à-coup, nous résolvent cette question de la vie de l’application à échelle, et dans la durée
• Mais aussi, tout-à-coup, chacun des éléments de l’infra vient de devenir horizontalement scalable.
• Ajouter un noeud rabbitmq, puis augmentez le nombre des workers (et vous venez d’avoir du backpressure management gratos) ajouter quelques noeuds au cluster elasticsearch .. ou quelques serveurs d’application et voilà le pic de trafic 10X n’est pas grave du tout.
MERCI POUR LA QUESTION, MAIS NON.
![Page 84: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/84.jpg)
CE QUI NOUS PERMET AUSSI DE, TOUTE-DE-SUITE, PASSER AU CHAPITRE SUIVANT TOUCHANT AUX BASES DE DONNÉES
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 85: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/85.jpg)
CHAPÎTRE SIXIÈME, OÙ L’ON DÉCOUVRE QU’ON A UNE FLOPÉE DES SYSTÈMES
DE PERSISTANCECDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de recherche
Queue de Message
Système de Fichier distribué
![Page 86: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/86.jpg)
UN RAPIDE SIXIÈME CHAPÎTRE.LE BÂT BLESSE AU NIVEAU DE LA BD
RELATIONNELLE. CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de rechercheQueue de Message
Système de Fichier distribué
![Page 87: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/87.jpg)
NOUS ON FAIT DU ACTIVE MASTER / PASSIVE MASTER EN REPLICATION SYNCHRONE (GALERA). MAIS IL Y A DES
LIMITES À ÇA. SURTOUT SI VOUS VOULEZ TRAVAILLER EN MODE HAUTE-DISPO SUR DES MULTIPLES DATACENTERS.
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de rechercheQueue de Message
Système de Fichier distribué
![Page 88: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/88.jpg)
CHAPÎTRE PÉNULTIÈME
Le Cache.
![Page 89: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/89.jpg)
COMME VOUS AVEZ VU PLUS TÔT AVEC NICOLAS GREKAS SYMFONY VA VOUS ABSTRAIRE BEAUCOUP DES QUESTIONS SUR
CERTAINES DES COUCHES PAR DES SERVICES, DU COUP CELA DEVIENT UNE QUESTION SIMPLEMENT DES SERVICES FOURNIS PAR
VOTRE INFRA.
CDN
Point d’entrée Point d’entrée Point d’entrée
DB DB
Serveur Web
App1 App2 App3
DB
Serveur Web
CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
Moteur de rechercheQueue de Message
Système de Fichier distribué
![Page 90: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/90.jpg)
RAPPELONS NOUS. CA N’EXISTE PAS DES
APPLICATIONS STATELESS.
LA QUESTION EST TOUJOURS : OÙ EST L’ÉTAT.
IL TRAÎNE SOUVENT DANS LA DB … ET DANS VOS CACHES.
![Page 91: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/91.jpg)
IMPLÉMENTER DONC LES BONNES PRATIQUES DE CACHE (PSR-6) AVEC LES SERVICES SYMFONY VOUS
LIBÈRE PAS MAL DE DEVOIR Y PENSER.
![Page 92: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/92.jpg)
• On a parlé des la structuration des éléments d’infra et un peu de l’adhésion code (pas grand chose n’est-ce pas).
• Tout ceci nous prépare pour pouvoir passer pour chaque une de nos couches de N à N+1
• Mais cela dépend alors de notre capacité à créer à l’identique, et rapidement des nouveaux noeuds.
• Vous avez deux choix là: le blob que l’on copie (mal) où le build systématique avec des garanties d’idempotence (bien!).
CHAPÎTRE DERNIER, LE DÉPLOIEMENT
![Page 93: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/93.jpg)
• Ca implique des contraints mais qui vont vous rendre des fiers services:
• Le processus de build ne doit pas être dépendant de l’environnement. Il ne doit pas nécessiter la connexion aux services. Il ne doit pas connaître l’identité du serveur sur lequel on va déployer (toute la conf devra arriver de l’environnement).
• La prod est en lecture seule (pour éviter l’émiettement, le “infrastructure drift). Uniquement les données sont en Lecture/Ecriture
BUILD HORS INFRA, RUN EN LECTURE SEULE.
![Page 94: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/94.jpg)
CONCLUSION
![Page 95: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/95.jpg)
UNE APPLICATION CLOUD NATIVE PEUT ÊTRE DÉPLOYÉE
SUR UN PETIT DÉDIÉ.
![Page 96: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/96.jpg)
de tourner sur des multiples infrastructures distantes
de migrer d’une infrastructure à une autre
de haute disponibilité
de montée en échelle horizontale
d’absorber des pics irréguliers
de déploiement continu
UNE APPLICATION CLOUD EST UNE APPLICATION POTENTIELLEMENT CAPABLE:
![Page 97: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/97.jpg)
RIEN NE VOUS FORCE DE PASSER DE
![Page 98: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/98.jpg)
LAMP
• Linux
• Apache
• MySql
• PHP
![Page 99: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/99.jpg)
À
![Page 100: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/100.jpg)
NVMPESRRKCCDX• Nginx
• Varnish
• MariaDB/Postgres
• PHP-FPM
• Symphony
• NodeJS
• ElasticSearch/Solr
• Redis / RabbitMQ/ Kafka
• Ceph / Gluster
• Docker / LXC
![Page 101: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/101.jpg)
TOUTE DE SUITE.
![Page 102: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/102.jpg)
LE COÛT DE FAIRE LES CHOSES BIEN DÈS LE DÉPART EST RELATIVEMENT
FAIBLE.
ON N’A PAS OUBLIÉ “OPTIMIZE LAST”
TOUT CECI N’EST PAS LÀ POUR RENDRE VOTRE APPLICATION PLUS
RAPIDE. MAIS PLUS FACILE À MAINTENIR ET À FAIRE MONTER EN ECHELLE.
![Page 103: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/103.jpg)
JE VAIS QUAND MÊME ME FAIRE DE LA PUB EN 500MS
![Page 104: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/104.jpg)
CDN (CloudFront, Cloudflare, Fastly)
DNS (Route 53, Dyn, DNSMadeEasy)
ELASTIC LOAD BALANCER SCALE OUT
APP 1 APP 2 APP 3
NGINX / FPM NGINX / FPM NGINX / FPM
REDIS REDIS* REDIS*
DB LOAD BALANCING
GALERA DATABASE CLUSTER
SOLR CLOUD
SSD BASED NETWORK FILE SYSTEM
APP 4
NGINX / FPM
APP 5
NGINX / FPM
S3 BACKUP
1
2
3
5
6
DB LOAD BALANCING4
7
8
1.DNS Alias maps zone apex to CDN distribution. 2.CDN caches popular resources at edge locations.
HTTPS terminates here. 3.ELB performs health check on instances 4.Load Balancer distributes traffic 5.Nginx performs proxy caching, compression and
passes requests to the app running PHP-FPM 6.LB of DB queries pushes writes to the Master,
compensating for optimistic loading. 3 synchronous masters with health check
7.Three discreet Availability Zones datacenters. 8.Platform can scale out the web tier to as many
instances as might be required.
CHEZ MOI, PAR DÉFAUT, VOTRE PROD RESSEMBLE À ÇA.
CLOUD NATIVE SANS LES SOUCIS.
ET VOUS N’AVEZ RIEN À FAIRE. C’EST UN PAUVRE PETIT FICHIER YAML PUIS DE
L’AUTOMAGIE.
VENEZ ME PARLER.
![Page 105: Construire Des Applications Cloud Natives - SymfonyLive Paris 2016](https://reader038.vdocuments.site/reader038/viewer/2022110219/5879c9b61a28abb42a8b6e7f/html5/thumbnails/105.jpg)
QUESTIONS ?
Ori Pekelman, markeuteux en chef chez platform.shMais on me permet de parler ici parce que je fait de l’Haskell.
@oripekelman sur github/twitter/linked-in