I agree with the swing approach more than the approach you are looking for. The problem is that you find yourself in situations where load balancing can move users between different versions of the application during the transition.
The solutions we came across (before finding SeeSaw that we donβt use) had to take half the bastards from the load balancing line. Close them. Update them. Run them. Put these mogrels back online in the load balancer and take the other half. Close the second half. Refresh the second half. Run them. This significantly reduces the time when you have two different versions of the application running at the same time. I wrote a bat bat file for this. (Deploying to Windows is not recommended, by the way)
It is very important to note that database migration can make the whole approach a bit dangerous. If you have only additive migrations, you can run them anytime before deployment. If you delete columns, you need to do this after deployment. If you rename columns, itβs best to split it into a new column and copy the migration data into it to run before deployment and a separate script to delete the old column after deployment. In fact, it can be dangerous to use regular migrations in the production database as a whole if you are not making special efforts to organize them. All this indicates more frequent deliveries, so each update is lower risk and less complex, but is the subject of a different answer.
MattMcKnight
source share