I had seen following deployment techniques used in Cloud for Java Applications
1. Hot Deployment (Partial Deployment / Quick Fixes / Live Fixes / Hot Fix / Dirty Fix)
When there is problem with one static component (JS/CSS/Image) this is the best technique.
People used to put class files, jsps too, but that too affects end user.
2. Hot Swap Deployment (Complete code swap, JVM Swap, VM Swap)
To achieve zero down time, we need to use commercial tools.
When there is no DB Changes, install new software on S2. Bring S2 to Up. In load balancer remove active S1 server and point to S2. This way S1 is passive and helps to bring it back, if there are any issues in S1 deployment.
3. Rolling Restart
When there are few servers (<5), it is easy to bring down one, install and bring it up. When we do one by one, we can minimize down time to end user without any new hardware.
4. Hard Stop Deployment (Bring all server(s) down and bring them back)
For major changes without backward compatibility, we need to stop all servers. Install and bring them back. There is huge down time and risks involved.
5. Promote Deployment
Many companies deploy software on many servers. For example Company A is deploying software on 100 servers. First they deploy on 1% servers. Test with target IP Address. If everything is fine they will promote same code to 5% of servers. They get feedback from users. Also there is another technique – switching the 5% of traffic irrespective of servers. This helps company to gain confidence on fixes/changes and also in users.
Ready to Use Products:
Live Rebel: http://zeroturnaround.com/software/liverebel/
Control Tier: http://doc36.controltier.org/wiki/Main_Page
Bean Stalk: http://beanstalkapp.com/features/deployments
Software Deployment: http://en.wikipedia.org/wiki/Software_deployment
System Deployment Tips and Techniques
Please contact me to get customized plan/software for your needs.
Bhavani P Polimetla