Driver framework for Loadbalancer Plugin
There may be a need to implement different architectures depending on the nature of the solutions. Some of possible options are the following:
1) Current reference implementation:
All balancers are HAProxy processes on the single host
2) Reference implementation improved by agent scheduling
balancers could be created on different hosts on which balancer agents are running. Agent (and therefore, host) is chosen by scheduler.
3) REST Proxy to external device management component
Plugin sends REST request to external component that chooses device and configures it
4) Device inventory/scheduling and multi-vendor agent
Plugin chooses device using device inventory and sends requests to agent, which applies configuration changes via device-drivers
To avoid making separate plugin for each of architectures we may introduce plugin-side drivers which implement interaction with other components of the service (agents, external systems or devices) in the way most suitable for the specific vendor solution.
Here are examples of possible workflows:
So for the reference implementation the responsibility of the driver is only to send notifications to the agent when it's needed or do nothing, otherwise.
For advanced reference implementation driver also relies on agent scheduling to choose agent/host for the VIP and send notification via corresponding queue.
3) REST proxy
Driver is responsible for choosing device for the request using device inventory/device placement (scheduling) module