web-dev-qa-db-fra.com

Comment déployer des microservices sur Heroku

J'ai beaucoup lu sur les microservices et j'aimerais créer mon application avec cette approche. Ce que je sais jusqu'à présent, c'est que je nead certains services comme:

  • équilibreur de charge - pour traiter chaque demande et la pousser vers un autre service
  • service d'autorisation - pour autoriser mes utilisateurs
  • base de données - pour mes microservices. Je voudrais utiliser une instance de DB avec des schémas différents pour chaque service.
  • service A - pour la fonctionnalité A
  • service B - pour la fonctionnalité B

  • etc. etc. etc.

J'ai découvert que Heroku est un endroit intéressant pour déployer des applications. Mon problème est que je ne comprends absolument pas leur idéologie. Ce que j'ai fait jusqu'à présent, c'est la création/l'enregistrement de quelques "applications":

  • my-app-auth
  • équilibreur de charge my-app
  • etc.

Je vois que Heroku me donne un nom d'hôte public pour chacune de ces applications, et c'est là que mes préoccupations commencent. Dois-je déployer mes services internes avec des noms d'hôte publics? Je ne pense pas. Et voici ma question:

Quelqu'un peut-il me fournir des directives sur la façon de gérer les microservices sur Heroku? Comment dois-je les déployer? Comment définir mon équilibreur de charge et y accrocher des services internes? Qu'est-ce que JHipster? En ai-je besoin? Comment puis-je l'utiliser? Dois-je utiliser les outils Heroku (par exemple CLI) ou puis-je rester avec mon dépôt gitlab? Je ne trouve aucun point de compréhension sur Internet à ce sujet.

17
Maciej Treder

Heroku est une société Platform-as-a-Service très simple. La façon dont Heroku fonctionne est très simple:

  • Vous avez plusieurs projets (services) dans les dépôts Git.
  • Vous créez une application Heroku pour chaque projet (chaque dépôt Git).
  • Vous poussez ensuite votre code de chaque dépôt Git vers leur application Heroku respective.
  • Heroku vous attribue une URL publique pour chaque application que vous possédez.
  • Si chacun de vos services fonctionne maintenant sur Heroku, ils peuvent s'envoyer des demandes d'API via des HTTP publics.

Maintenant - concernant votre question sur l'architecture orientée services sur Heroku.

Si vous faites SOA sur Heroku, vous devrez demander à chaque service de parler publiquement entre eux via HTTPS. C'est le "modèle" typique.

Parce que Heroku fournit un SSL gratuit pour chaque application, et que chaque application se trouve sur la même région d'Amazon - parler en arrière et en quatrième entre vos services via HTTP est très rapide + sécurisé.

Chaque application Heroku a un équilibrage de charge automatique, donc pas besoin de vous soucier des équilibreurs de charge.

L'option suivante ici (si vous ne voulez pas suivre les modèles typiques) consiste à utiliser quelque chose comme RabbitMQ ou Amazon SQS (un service de mise en file d'attente) et à partager des `` messages '' entre vos différents services.

Dans ce modèle, vous auriez toujours une application Heroku pour chaque service, mais au lieu de communiquer entre eux via HTTP, vous communiqueriez plutôt avec vos autres services via un protocole de mise en file d'attente comme Rabbit ou SQS. Cela a des avantages en termes de vitesse.

En ce qui concerne les services d'authentification, il existe plusieurs fournisseurs que vous pouvez utiliser pour fournir cette fonctionnalité. Le plus populaire que je connaisse est Stormpath . Si vous regardez à travers Heroku addon marketplace , vous pouvez également en trouver d'autres.

Enfin, pour les bases de données: vous pouvez utiliser n'importe quel fournisseur de base de données de votre choix. Le plus populaire est probablement Heroku Postgres . C'est une version hébergée de PostgreSQL qui est très fiable/facile à utiliser.

Vous pouvez soit partager une base de données entre TOUS vos services, soit avoir une base de données par service. L'une ou l'autre stratégie fonctionnera bien.

32
rdegges