I manage a few servers and for the sake of the question let's consider these three:
- nginx server: it only runs nginx and serves static files, responses from the disk cache, or passes requests to the API server
- API server: it returns data and it connects to the database server
- database server: it hosts the database, Redis and some other stuff
This setup allows us to perform maintenance with zero downtime. That is also the case for upgrades. If we want to add more memory to the database server, we just spin up a new instance, physically clone the database, and destroy the old server.
Roughly the same thing can be done with the API server. However, sooner or later we will need to upgrade the nginx server. How do we do that without downtime, if the upgrades require a shutdown? The nginx instance has to have a fixed IP to be reached from the external world.