Microservices – Architecture Pattern for Microservice as a Plugin

architectural-patternsArchitecturemicroservicesplugin-architectureplugins

Long story short – I would like to make a web application, solely for self-education purposes, that should allow user to add additional functionalities via plugins – just like Jenkins – https://jenkins.io/doc/book/managing/plugins/ – which does it via extension points.

But beside that, at the same time I would like each of the plugin itself to be a self sustainable process on an arbitrary host, arbitrary technology stack, to be scalable and not be able to affect host with core systems anyhow, which already feels more like a microservice.

The main points to me are:

  • Plugins to be add/removed on fly via web UI;

  • Plugins to sit arbitrary on the same host as core, or any other
    host;

  • Plugins to be scalable both on I/O and performance;

  • Plugins to be written with arbitrary technology and only required
    to follow some basic contract to expose its functionality and available settings/controls to the core.

My brain was capable to produce only such a simple idea
https://svgshare.com/s/FSo

So in the end of the day I have a feeling like I am trying to reinvent the wheel here, and there are ready solutions either in plugins or microservices architectures that cover these requirements – are there any really?

Best Answer

There seem to be an incompatibility between the two concepts:

  • Microservices are by design meant to be independently deployable services that remain loosely coupled.

  • Plugins are meant to extend something existing, which means that the plugin has no value on its own.

But you may be interestted in client-side discovery pattern, which suits your flexibility needs with a microservice-oriented mind. You may use it :

  • with a classical plugin architecture: you create plugins able to find a suitable microservice and use its functionality for the extended the basic service.
  • by designing your wholde app as microservices which dynamically find other microservices.