Ignoring the complexities surrounding data.
Not scalable at all. Well it might be surprisingly scalable if the code is well engineered, since everything is so simple!
Probably never reboots, despite updates (e.g. Linux) requiring it.
Using a Configuration Management tool like Chef, Puppet or Ansible.
Scalability achieved with AMI snapshots and such. Zero downtime with a load balancer fronting at least two instances running your App independently of one another.
Updates are applied before making a new AMI image. Latest AMI images are applied haphazardly.
Probably can't scale very well. Zero downtime can be achieved cheaply using some tricks. Probably best solution for personal projects or starting out since it's fairly simple.
Probably never reboots or applies security updates properly.
Using Docker & containerizing all the things on something like CoreOS or RancherOS. Scalability is as manual as making sure you can quickly spin up new CoreOS instances & run the Docker images with a load balancer in front.
Bonus points if you have moved from Postfix MTA to an external Restful mail API or queue.
Bonus points is if one has figured out how to get a CI to build the image and deploy it.
Bonus points for running two instances for Blue/Green deployments behind the load balancer for zero downtime.
Serious kudos if you manage to orchestrate your updates with etcd locks and have no downtime.
Scales in a complex way (worry about bother Container & Instance utilisation and timings), providing you have Service Auto Scaling in your region.
Included with "serverless":
- A/B deployments
- Optionally: API gateway is pretty sweet (basically you get Cloudfront integrated)
Most apps would probably have to be completely rewritten and somewhat tied to the hosting platform's API.