On 2020-04-21 5:59 a.m., Dominique Devienne via Boost-users wrote:
It's deployed and serving clients in production or test environments, but I fixed a bug, checked in a fix, passed CI, and would like to redeploy, but w/o downtime for existing clients. New clients should use the same address, but be served by the newly deployed fixed server. While on-ongoing WebSocket connections keep on using the old server.
If not possible in-process, then how to know when older server is no longer in use, to gracefully stop it? Asio servers typically run forever, i.e. never run out of work, even when they temporarily have nothing to do, by design. Load balancers are typically involved in this process. https://www.haproxy.org/, ebpf/xdp, LVS, http://blog.raymond.burkholder.net/index.php?/archives/632-Load-Balancing-Wi...
The goal is to do this on "premise" (i.e. not in the cloud), on a single machine (no containers), and cross-platform (Windows and Linux).
The basic premise is that there is some sort of proxy or services which tests for 'aliveness', and forwards requests to the appropriate service. Typically it is designed to 'drain' traffic from a service to be stopped, and forward new sessions to an alternate service, and when no further traffic is forwarding to the old service, it can be stopped, updated, and restarted, and traffic can then be re-balanced. And then of course, the question is how do you balance the balancer? Usually that is some sort of routing protocol.
Thanks, --DD