Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Construire Des Applications Cloud Natives - SymfonyLive Paris 2016

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 105 Anuncio

Construire Des Applications Cloud Natives - SymfonyLive Paris 2016

Descargar para leer sin conexión

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.

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.

Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

Similares a Construire Des Applications Cloud Natives - SymfonyLive Paris 2016 (20)

Anuncio

Más reciente (20)

Construire Des Applications Cloud Natives - SymfonyLive Paris 2016

  1. 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
  2. 2. CONSTRUIRE DES APPLICATIONS CLOUD NATIVES Préambule
  3. 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
  4. 4. App-Server DB Serveur Web
  5. 5. LAMP • Linux • Apache • MySql • PHP
  6. 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.
  7. 7. NMP • Linux • Nginx Apache • MySql • PHP Pas vu un Apache depuis un bail.
  8. 8. NMP • Linux • Nginx Apache • MariaDB MySql • PHP Là au moins ça ne change pas l’acronyme
  9. 9. NMP • Linux • Nginx Apache • MariaDB MySql • PHP Bon vieux demeure.
  10. 10. App-Server DB Serveur Web
  11. 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. 12. Pleins de bouts de colle + plein de machines pour le faire tourner Serveur(s) Web App- Server(s) DB(s)
  13. 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. 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
  15. 15. CHAPÎTRE PREMIER, LE CDN
  16. 16. • Pas uniquement pour les “assets” mais en frontal des toutes les pages • Même en mode loggué CHAPÎTRE PREMIER, LE CDN
  17. 17. LE CDN C’EST JUSTE NOTRE SERVEUR WEB COUPÉ EN DEUX App-Server DB Serveur Web
  18. 18. LE CDN C’EST JUSTE NOTRE SERVEUR WEB COUPÉ EN DEUX App-Server DB Serveur Web CDN
  19. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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) { } }
  32. 32. LE PAR-DÉFAUT EST RAISONNABLE Par défaut Cache-Control est no-cache
  33. 33. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE
  34. 34. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE Toute la page peut être en cache
  35. 35. ESI PERMET LA MISE EN PARTIELLE DE LA PAGE Toute la page peut être en cache Mais des parties peuvent rester dynamiques
  36. 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. 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
  38. 38. framework: esi: true fragments: { path: /_proxy } SYMFONY A DU SUPPORT ESI INTÉGRÉ Ouvrez donc app/config/config.yml et dans la partie framework :
  39. 39. {{ render_esi(uri, options = []) }} QUI SAIT FAIRE DU FALLBACK EN DEV…. • Dans votre template twig il y a un helper pour ça.
  40. 40. {{ render_hinclude(controller('...'), { 'default': 'default/content.html.twig' }) }} VOUS POUVEZ OPTER POUR DU JS ASYNC. ICI AUSSI SYMFONYVAVOUS AIDER. Voir http://mnot.github.io/hinclude/ • Dans votre template twig il y a un helper pour ça aussi:
  41. 41. {{ render_hinclude(controller('...'), { 'default': 'default/content.html.twig' }) }} PROBABLEMENT ILVAUT MIEUX FAIRE LE JS AVEC UN FRAMEWORK COMME IL FAUT (REACT? ANGULAR?) • Et servir du JSON de vos magnifiques micro-services avec silex.
  42. 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. 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. 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. 45. Pleins de bouts de colle + plein de machines pour le faire tourner Serveur(s) Web App- Server(s) DB(s)
  46. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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é
  58. 58. DOCTEUR, LE MESSAGE QUEUE C’EST PAS COMPLIQUÉ ?
  59. 59. use SwarrotProcessorProcessorInterface; use SwarrotBrokerMessage; class Processor implements ProcessorInterface { public function process(Message $message, array $options) { echo sprintf("Consume message #%dn", $message->getId()); } }
  60. 60. Chaque queue de message donne des garanties différentes. Mais de nos jours, Rabbit ou Kafka, ça va vous suffire.
  61. 61. ET POUR LES ÉCRITURES … CECIVOUS DONNE DU “BACKPRESSURE MANAGEMENT”
  62. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  73. 73. ET QUEL MOTEUR DE RECHERCHE?
  74. 74. ElasticSearch ET QUEL MOTEUR DE RECHERCHE?
  75. 75. OK, d’accord SOLR c’est très bien aussi, en tout cas c’est du Lucene. ET QUEL MOTEUR DE RECHERCHE?
  76. 76. OK, d’accord, Xavier, Sphinx existe. ET QUEL MOTEUR DE RECHERCHE?
  77. 77. ElasticSearch ET QUEL MOTEUR DE RECHERCHE?
  78. 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. 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. 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. 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. 82. MAIS, ORI, ON DEVAIT PARLER DES APPLICATIONS NATIVES AU CLOUD, N’ESTU PAS EN TRAIN DETE PERDRE DANS TES PENSÉES?
  83. 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. 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. 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. 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. 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é
  88. 88. CHAPÎTRE PÉNULTIÈME Le Cache.
  89. 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. 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. 91. IMPLÉMENTER DONC LES BONNES PRATIQUES DE CACHE (PSR-6) AVEC LES SERVICES SYMFONYVOUS LIBÈRE PAS MAL DE DEVOIRY PENSER.
  92. 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. 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.
  94. 94. CONCLUSION
  95. 95. UNE APPLICATION CLOUD NATIVE PEUT ÊTRE DÉPLOYÉE SUR UN PETIT DÉDIÉ.
  96. 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:
  97. 97. RIEN NEVOUS FORCE DE PASSER DE
  98. 98. LAMP • Linux • Apache • MySql • PHP
  99. 99. À
  100. 100. NVMPESRRKCCDX • Nginx • Varnish • MariaDB/Postgres • PHP-FPM • Symphony • NodeJS • ElasticSearch/Solr • Redis / RabbitMQ/ Kafka • Ceph / Gluster • Docker / LXC
  101. 101. TOUTE DE SUITE.
  102. 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.
  103. 103. JEVAIS QUAND MÊME ME FAIRE DE LA PUB EN 500MS
  104. 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. 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

×