Ces-jours-ci on ne parle que de montée en échelle et de scalabilité horizontale.
Dans cette présentation, un peu abstraire mais bien pratique, nous parlerons des choix architecturaux que vous pouvez faire pour rendre votre application prête pour un succès planétaire (dommage d’échouer an ayant réussi).
Nous allons parler de micro-services, de leur utilité et leurs limites, là où l’on veut communiquer par JSON/HTTP (que d’autres appels REST) et là où un Message Queue en bonne et due forme vous rendra des fiers services futurs. Nous parlerons aussi des écueils à éviter (par la séparation des domaines écritures / lectures) et des choses, que jamais ô jamais vous ne devriez mettre dans une base de données relationnelle. Nous évoquerons en guise de travaux pratiques et cerise sur le gateau comment faire des migration paresseuses avec Symfony.
20151119 Tirer le meilleur parti du Cloud pour ses développements
Construire Des Applications Cloud Natives - SymfonyLive Paris 2016
1. CONSTRUIRE DES
APPLICATIONS CLOUD
NATIVES
ou le passage de Lamp à Nvmpsesrrkc
Ori Pekelman, markeuteux en chef chez platform.sh
Mais on me permet de parler ici parce que je fait de l’Erlang.
@oripekelman sur github/twitter/linked-in
3. 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
6. 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.
11. 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
12. Pleins de bouts de colle + plein de
machines pour le faire
tourner
Serveur(s)
Web
App-
Server(s)
DB(s)
13. 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
14. 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 ETVOIR LE “QUOI” ET
LE “POURQUOI” DE CHAQUE COUCHE
16. • Pas uniquement pour les “assets” mais en frontal
des toutes les pages
• Même en mode loggué
CHAPÎTRE PREMIER, LE CDN
17. LE CDN C’EST JUSTE NOTRE
SERVEUR WEB COUPÉ EN DEUX
App-Server
DB
Serveur Web
18. LE CDN C’EST JUSTE NOTRE
SERVEUR WEB COUPÉ EN DEUX
App-Server
DB
Serveur Web
CDN
19. IL PARTICIPE ATOUTES 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
20. ILVA 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
21. PUIS À Ç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 CACHE CACHE
Serveur Web
App1 App2 App3 App1 App2 App3
22. ET Ç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
23. OU Ç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
24. ET ENCORE, MAIS ONVA RENTRER
DANS LE DÉTAIL PLUSTARD.
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é
25. Si la performance est orthogonale à la scalabilité …
le CDN, pourtant, est la seule manière d’optimiser le
TTFB.
CHAPÎTRE PREMIER, LE CDN
26. • 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
27. LE CDN IMPOSE DES
CONTRAINTES
• Le “hit ratio” doit être bon
• GEOIP
• Triturages des x-headers à la mano pour faire
quelque chose de charmant
28. 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
29. 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.
30. 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
31. SYMFONY NOUS REND LAVIE
SIMPLE ET BELLE
/**
* @Cache(expires="tomorrow")
*/
class UserController extends Controller
{
/**
* @Cache(lastModified="user.getUpdatedAt()", ETag="'User' ~ user.getId() ~
user.getUpdatedAt().getTimestamp()")
*/
public function meAction(User $user)
{
}
}
34. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la
page peut être
en cache
35. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la
page peut être
en cache
Mais des parties
peuvent rester
dynamiques
36. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la
page peut être
en cache
Mais des parties
peuvent rester
dynamiques
Avec desTTLS
différents…
37. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
Toute la
page peut être
en cache
Mais des parties
peuvent rester
dynamiques
Avec desTTLS
différents…
Avec même du
ciblage
42. • 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
customVCL (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
43. ETVARNISH?
• 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 desVCLs customs. Mais évitez SVP
(pas fastly, juste lesVCLs customs).
44. ETVARNISH?
• 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.
45. Pleins de bouts de colle + plein de
machines pour le faire
tourner
Serveur(s)
Web
App-
Server(s)
DB(s)
46. • 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
47. • 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
48. 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é
49. COMME QUOI, 40 MINUTES POUR
RENDREVOS 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é
50. J’ESPÈRE QUEVOUS AVEZ SUIVI LETALK 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é
51. • 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 pasTOUT à l’échelle
du composant le plus lourd.
CHAPÎTRETROISIÈME, LES
MICRO-SERVICES
52. Si vôtre graph de services
n’est pas trop profond ça
peut encore aller.
MAIS ATTENTION À LA
LATENCE À LA QUEUE LEU-LEU
53. • 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
For each image in
article do an http
request
54. • 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
55. 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é
56. VOUS FAÎTES
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é
57. VOUS FAÎTES
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é
60. Chaque queue de message donne des garanties différentes.
Mais de nos jours, Rabbit ou Kafka, ça va vous suffire.
61. ET POUR LES ÉCRITURES …
CECIVOUS DONNE DU
“BACKPRESSURE
MANAGEMENT”
62. UN PIC DETRAFIC NEVAS
PLUS RÉSULTER DANSVOS
SYSTÈMES QUI PLANTENT.
MAIS SIMPLEMENT DANS UNE
LATENCE PLUS IMPORTANTE
POUR LA MISE À JOUR DES
DONNÉES.
63. C’est déjà du CQRS.
Avez vous entendu parler
de CQRS ?
ET ON PEUTTRICHER
ENCORE MIEUX
For each image in
article do an http
request
64. • Désolé, ça, je ne traduis
pas en Français.
CHAPÎTRE QUATRIÈME, COMMAND
AND QUERY RESPONSIBILITY
SEGREGATION
For each image in
article do an http
request
65. • Au lieu d’intermédier
les lectures par vôtre
Queue de Messages
CHAPÎTRE QUATRIÈME, COMMAND
AND QUERY RESPONSIBILITY
SEGREGATION
For each image in
article do an http
request
66. VOUS FAÎTESTOUTESVOS 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é
67. VOUS FAÎTESTOUTESVOS 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
68. VOUS FAÎTESTOUTESVOS 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
69. VOUS FAÎTESTOUTESVOS 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
70. SIVOUS AVEZ SUIVI HIER LA
PREZ DE LA FOURCHETTE SUR
“L’API FIRST”.. ET CELLE DE
BLABLA SUR ELASTICSEARCH..
VOUSVERREZ. CE N’EST PAS
DE LATHÉORIE.
71. • 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 DISTOUTES LES
LECTURES JE SIMPLIFIE UN PEU
72. • 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.
LAVÉRITÉ A UNE SEULE
SOURCE
78. • 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
79. Car parfois vous voulez pourvoir partager
des modèles entre vos micro-services
DE MANIÈRE PARFAITEMENT
DÉSAGRÉABLE, CECI EST NON-TRIVIAL
80. • 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
81. • 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îtesTOUTES
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
82. MAIS, ORI, ON DEVAIT PARLER
DES APPLICATIONS NATIVES
AU CLOUD, N’ESTU PAS EN
TRAIN DETE PERDRE DANS
TES PENSÉES?
83. • 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.
84. 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é
85. CHAPÎTRE SIXIÈME, OÙ L’ON DÉCOUVRE
QU’ON A UNE FLOPÉE DES SYSTÈMES
DE PERSISTANCE
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é
86. 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 recherche
Queue de Message
Système de Fichier distribué
87. NOUS ON FAIT DU ACTIVE MASTER / PASSIVE MASTER EN
REPLICATION SYNCHRONE (GALERA). MAIS ILY A DES
LIMITES À ÇA. SURTOUT SIVOUSVOULEZTRAVAILLER 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 recherche
Queue de Message
Système de Fichier distribué
89. COMMEVOUS AVEZVU PLUSTÔT AVEC NICOLAS GREKAS
SYMFONYVAVOUS 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 recherche
Queue de Message
Système de Fichier distribué
90. RAPPELONS NOUS. CA
N’EXISTE PAS DES
APPLICATIONS STATELESS.
LA QUESTION ESTTOUJOURS :
OÙ EST L’ÉTAT.
ILTRAÎNE SOUVENT DANS LA
DB … ET DANSVOS CACHES.
91. IMPLÉMENTER DONC LES
BONNES PRATIQUES DE
CACHE (PSR-6) AVEC LES
SERVICES SYMFONYVOUS
LIBÈRE PAS MAL DE DEVOIRY
PENSER.
92. • 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
93. • 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.
96. 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:
102. 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
RENDREVOTRE APPLICATION PLUS
RAPIDE. MAIS PLUS FACILE À MAINTENIR
ET À FAIRE MONTER EN ECHELLE.
104. 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.
105. QUESTIONS ?
Ori Pekelman, markeuteux en chef chez platform.sh
Mais on me permet de parler ici parce que je fait de l’Haskell.
@oripekelman sur github/twitter/linked-in