Horizontal Scaling :
Horizontal scaling means that you scale by adding more machines/nodes into your pool of resources or scaling group.This is one of the biggest successive method when compare with vertical scaling . You can quickly scale-up and scale-in number of nodes to handle machine traffic without affecting the application.
Most of the public cloud provider AWS,Google,Azure supports horizontal scaling . The advantage in horizontal scaling is you no need to stop your application or current nodes . Just include additional nodes to handle the traffic.
One of the challenge with this method is application should support for stateless method. When you add some new node the application should run properly on the newly added server.So you should have prepare on your application design and architecture to fit with this method.Its just not only adding new node.
Some of the reasons why organizations should choose to scale horizontally include increasing I/O concurrency, reducing the load on existing nodes .
Most of the cloud provides use this method for Autoscaling concept.
vertical Scaling :
Vertical scaling means that you scale by adding more power ,CPU, RAM,disk to an existing machine/node.
The advantage is no need to think about application stateless configuration or high level architecture . Simply add more hardware resources to your existing servers.
One of the drawback with this method is you need to stop the node to take effect of newly added servers. So you have to plan for downtime.
With most of the public cloud providers you can stop the existing node /server and choose the new machine type and start the machine.
So depends on application and high availability requirement you can choose scaling type.