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 :