First off, there is no "best" as in it will be the best for everyone, every situation, etc., etc., etc.
Most of my experience is using AWS, and while it does work well, it can also be a major pain. Heroku is dead easy, of course, but suffers from performance issues sometimes. I’m not sure if you can throw enough money at Heroku to make it better.
Your best bet, really, is to take a step away from the decision that you must choose one and only one provider. If you develop your deployment to be disposable at the drop of a hat, immutable, and so on, then you’ll also generally be able to pick up and move hosts at a moment’s notice as well, and thus be able to respond faster to host downtimes and failures.