Dylan Young pointed out that this is likely an opinion-based answer, and I agree. It will completely depend on your solution and how you plan on using the different roles.
Which features you use and how much you use them will dictate your production setup.
- In production XP1 you cannot use Lucene, so that means you need a server running Solr. You could technically run Solr on the same server with other shared services, but you will most likely want this to be isolated in most scenarios.
- You should likely make sure xDB Collection shards are on dedicated resources and not sharing with other dbs.
- In most cases, the analytics/reporting databases (i.e. processing tasks/pools/reporting) should also be isolated to make sure processing tasks don't consume the IO needed for content databases
- Content Delivery should be isolated from Content Management, so there's two servers minimum there when you scale out, even if you run Processing/Reporting alongside CM. You likely have at least one more Content Delivery for High Availability.
What do you need?
- What kind of traffic levels do you need to meet?
- Are you going to be running Sitecore Connect or Data Exchange Framework regularly?
- Do you have additional integrations to xConnect, like in-store applications?
- Are you triggering a lot of live events from the CD?
- Do you have surge traffic patterns throughout the year?
- What is your implementation code going to be doing?
- Are you running transactional revenue through your site?
- What kind of performance numbers do you need?
- What are your requirements for High Availability?
- Do you have Disaster Recovery requirements? If so, what do you require in your DR scenario?
- How often do you publish, and how much do you publish?
- Where are your visitors? Do you have a global delivery need?
All of these, and other factors, dictate what infrastructure you need.
Be ready to change
In the end, my recommendation is to deploy in such a way that you can be flexible and react. If you try to overprovision up front you will inevitably have it wrong and need to change, so make sure that you have put out an infrastructure model where you can easily scale where you find bottlenecks and are not stuck and scrambling to respond to a change in infrastructure requirements.
Separating out the roles will allow you to distribute across servers and scale horizontally more easily. They don't necessarily need their own server to start, but if you scale out fully and share some resources initially it will be easier to spread out.
- "It depends". Number of servers will be dictated by scenario.
- Know your Scenario. You need to think through what you are going to do to plan.
- Be flexible. Separate roles, be ready for change.