Is it necessary for servers to perform their respective functions in cluster architecture? I e, database server, memory server, picture server, etc


Project background:
Read is greater than write, which is about 4:1, with more than one million users and about 4000 concurrent users (high and low, high to 10K, low to 1K)
The performance of several servers is almost the same, and the load balance can basically be evenly distributed to each server.

I want them to face users directly one to one through load balancing (i.e. ABCD can be accessed directly).

Let them do their job (suppose A, B are memory servers, C are databases, D are picture processing servers) and let them accept user access layer by layer.

Give a suggestion

It is better to separate.
If they are not separated, it seems that they can make full use of the resources of the machine, but in fact they are not. Different types of services are deployed together, which increases the complexity of the server environment, is easy to generate problems and is not easy to locate, and is also not conducive to performance optimization.
Different types of services have different demands on resources. Memory servers pay more attention to memory, while picture servers pay more attention to disks and are deployed together. If memory bottlenecks affect picture servers in the same way, resulting in waste of disk resources.
So separate deployment, each service environment is simple, resources can be allocated on demand.