Virtualization has come a long way in recent years. These days it's not uncommon to deploy a massive amount of virtual servers on top of a physical server cluster. Virtualization makes management of system resources and data storage systems a breeze. Virtual servers can be moved around while you swap a physical server out, and then moved back onto it with no downtime.
This kind of flexibility is not without its downsides. All of these servers are centrally managed by a hypervisor, which is a piece of software that manages all these virtual machines, and it often requires a lot of hardware overhead. Meanwhile, depending on what you're working on, some projects might require actual hardware and can't be virtualized.
This is why you need to plan out how you'll be using your hardware architecture ahead of time. Generally, the criteria for choosing your server is the same as it would be for a regular PC: CPU, RAM and hard drives. But more specifically, you'll also need to look at how you'll be scaling your servers when your projects increase in scope and in server load.
If, for instanse, you'll be working with Redis you might not actually need a top of the line processor or even a particlarly fast hard drive, but you should be looking at 16-32 gigs of RAM with error correction (ECC memory). On the other hand, if you're running a content distribution network you need to consider running larger solid state drives. If you're going to run an online storefront, it's worth looking horizontal scaling with sharding. In the online store example, if a holiday is coming up can your server cope with increased traffic? If not, how easy would it be to connect aditional servers? What would those servers be doing? Questions like this is what you should be asking, no matter what kind of project you're trying to work on. Always think ahead.
When looking at CPUs, always consider number of cores and cache sizes in addition to raw speed. More cores can often be better than higher speeds, but it would depend on whether you'll be running parallel processes. Another often missed aspect of picking a processor is the heat, and cooling systems should be picked appropriately. Slower, low core count, processors will do fine with basic fan cooling, but more powerful servers might need to invest in liquid cooling. The kind of processor you choose will also, in turn affect the kind of ram and motherboard you'll be getting. So it's not an understatement that this might be the most important part you'll choose.
Hard drives will definitely affect server performance, but can be picked independently of the rest of your system. Sometimes, like in the examples listed above, harddrives might be the crucial part on which your operation hinges. As such, you should consider hard drives carefully. After all, this is where all that data will be kept.
When picking a hard drive, you should consider reviews on its reliability, drive speed, read/write time and, often not considered enough, stability and how bad it vibrates when operating. Your choices are between SATA (5400/7200 rpm), SAS (10k/15k rpm), or SSD (solid state doesn't rotate, obviously). SSD is obviously the best option, but can often be expensive depending on how much space you need. For larger drives, SAS drives are very effective. SATA drives, while probably the most prolific type in the general market, aren't used as often for server operations, and instead used to store reserve copies and archives of your data. They're common, cheap, and reliable.
When putting the server together, you should look at using about 80% of it's resources. If resource load starts to approach that usage (gets to around 70% capacity), it's time to start thinking about upgrading your server or adding a new one to the cluster. This is where stress tests become important, as they can give you a good picture of exactly what kind of load, and how much, your server can take and point you in a direction of what should be upgraded or added.
The biggest problem you'll encounter is that there really is no ideal way to determine what kind of power your server will need. This is one of those times where you need to have some experience, and if you don't you just have to try your best to gain that experience. Sometimes that means underestimating or overestimating your needs and maybe messing up. But, rule of thumb, if you want to be sure that you have everything covered, it's better to overestimate and get stronger hardware than you might need. That way you'll have plenty of overhead if you're wrong about how much stress the server will be under, and the worst case scenario, you might have too much ram or too much drive space. Ultimately, if it can do the job that's what's going to matter.