web-dev-qa-db-fra.com

Existe-t-il un modèle d'architecture pour "microservice comme plugin"?

Longue histoire courte - J'aimerais faire une demande Web, uniquement à des fins auto-éducatives, cela devrait permettre à l'utilisateur d'ajouter des fonctionnalités supplémentaires via des plugins - tout comme Jenkins - https://jenkins.io/doc/book/Gestion/Gestion/Plugins / Comment le fait via des points d'extension.

Mais à côté de cela, dans le même temps, j'aimerais que chacun des plugin lui-même soit un processus autonome sur une pile de technologies arbitraires arbitraires, d'être évolutif et de ne pas être en mesure d'affecter l'hôte avec les systèmes de base, ce qui ressent déjà plus comme un microservice.

Les points principaux pour moi sont:

  • Les plugins doivent être ajoutés/supprimés à la volée via Web UI;

  • Plugins pour s'asseoir arbitraire sur le même hôte que le noyau, ou tout autre
    Hôte;

  • Les plugins doivent être évolutifs à la fois sur des E/S et des performances;

  • Les plugins doivent être écrits avec une technologie arbitraire et uniquement pour suivre un contrat de base pour exposer ses fonctionnalités et ses paramètres/contrôles disponibles au cœur.

Mon cerveau était capable de produire une idée aussi simple https://svgshare.com/s/fso

Donc, à la fin de la journée, j'ai l'impression d'essayer de réinventer la roue ici, et il y a des solutions prêtes dans les plugins ou les architectures de microservices qui couvrent ces exigences - y a-t-il vraiment?

3
lGSMl

Il semble y avoir une incompatibilité entre les deux concepts:

  • Les microservices sont par designs destinés à être des services déployés de manière indépendante qui restent facilement couplés.

  • Les plugins sont destinés à étendre quelque chose existant, ce qui signifie que le plugin n'a aucune valeur à son propre .

Mais vous pouvez être intéressé à (( motif de découverte de client , qui convient à vos besoins de flexibilité avec un esprit orienté microservice. Vous pouvez l'utiliser:

  • avec une architecture de plug-in classique: vous créez des plugins capables de trouver un microservice approprié et utilisez ses fonctionnalités pour le service de base étendu.
  • en concevant votre application WHOLDE en tant que microservices qui trouvent de manière dynamique d'autres microservices.
0
Christophe

Je ne sais pas ce dont vous parlez existe déjà. Mais je sens que ce n'est pas quelque chose d'inhabituel. Cela ressemble à quelque chose qui est "l'état idéal" de l'architecture orientée vers services (micro). Le "rêve" original de l'architecture orientée vers services (micro) était fondamentalement ce que vous décrivez. "Simplement" ajoutez un nouveau service et s'intègre automatiquement et transparent avec des services déjà existants.

Concevoir une architecture dans laquelle le nouveau service "raccroche" avec le reste des services et le noyau doit être relativement simple. Le nouveau service peut soit diffuser sa présence pour tout le monde, de sorte qu'ils puissent configurer la connexion avec elle. Ou il peut contacter un courtier central et découvrir des services dont il a besoin ou peut utiliser.

La partie difficile conçoit une API entre le noyau et les plugins qui permettent le type d'extensibilité que vous envisagez. L'API devrait avoir une très bonne conception pour permettre une extensibilité future des fonctionnalités que vous n'avez pas à l'avance. Vous ne devriez pas vraiment entrer dans la situation où vous devez changer l'API pour chaque plugin que vous ajoutez.

Un autre problème consiste à déboguer le système dans son ensemble. Vous auriez besoin de beaucoup de suivi et d'instrumentation pour comprendre un comportement émergent inattendu entre différents services.

1
Euphoric

Longue histoire courte - J'aimerais faire une demande Web, uniquement à des fins auto-éducatives, cela devrait permettre à l'utilisateur d'ajouter des fonctionnalités supplémentaires via des plugins - tout comme Jenkins - https://jenkins.io/doc/book/Gestion/Gestion/Plugins / Comment le fait via des points d'extension.

Vous pouvez le faire en fournissant des webhooks pour vos utilisateurs à envoyer/recevoir des messages. Un exemple de ceci est dans shopify

Vous pouvez créer des événements communs dans votre demande d'éducation que vous pensez être utiles pour les services tiers pour écouter/réagir. Ensuite, ces événements sont abonnés lorsque votre utilisateur enregistre une webhook sur votre plate-forme. Par la suite, lorsque ces événements sont déclenchés, ils appelleront le service tiers de votre utilisateur.

La topologie de déploiement (hébergement, technologie, orchestration, etc.) devrait être complètement agnostique pour vous car ce sera juste un point d'extrémité HTTP de la perspective de votre plate-forme.

Remarque: vous devez toujours prendre soin de la sécurité et ne permettez pas aux services de votre utilisateur de déposer votre infrastructure.

0
unclelim12