Summary: CPUs with fast single-core performance, minimising overcontention, and edge caching.
Taking those in reverse order…
Intelligent caching, as close to the user as possible, is the absolute single best thing you can do for the performance of any website or application. Connecting to a distant (in network topology terms) server to obtain a resource takes a lot longer than doing it locally (damned speed-of-light). With TLS involved, the impact becomes even worse. So, the more you can cache somewhere close (in network topology terms) to the user, the better off you’ll be.
Overcontention is how pretty much every provider makes their money, whether that be shared hosting, VPS, dedicated server rental, your ISP – everyone is putting more customers onto their systems than they have the resources to service, if everyone wanted to maximally use what they’re paying for to the maximum. It is only by gambling that not everyone is actually going to use what they’re paying for that allows providers make money. When that gamble doesn’t pay off, performance suffers.
Finally, dynamic page generation in Discourse (or, indeed, any website or application) is CPU bound, and it’s single-core CPU bound. Once the server decides it has to collect data together and munge it into a blob of HTML or JSON, the biggest difference you can make in getting that job done quickly is by having a single CPU core that runs very, very fast available to do that munging. It’s not the only factor, but it’s the one that’ll be the most obvious when you start experimenting. Database performance (and not having crap SQL) is the next most important, and then having a fast network to get the requests in and the responses out quickly is next.