> why do I need a Middleware server ? … I have used Cuba platform app running on 1 server with TOMCAT to run the WAR file generated…
That’s a good question. As you may know, any CUBA application consists of at least two “blocks” - Middleware and Web Client. Middleware contains business logic, Web Client is a default front-end. This separation exists not only in the development stage but in the running application too, no matter how it is assembled. Even if you run a single WAR file, the blocks are still separated by classloaders. Tomcat (or any other Java web server) is a container for both blocks, it provides Servlet API and other means for running web applications. If you run Middleware on a separate server, it will also be a Tomcat, because the Middleware block is actually a web application without front-end.
In a simple case, you can run Middleware and Web Client on a single machine, either as separate web apps or in a single WAR. But when you need to scale your system by adding more servers, you will have to organize communication between Middleware blocks to synchronize various caches (entity cache, locks, app properties cache and others). The more servers you have, the more intensive is the communication and more config files you have to support. At the same time, Middleware blocks do not need to be scaled at the same proportion as Web Client blocks as I explained in my previous comment. So it is logical for a situation when you need more than 2 Web Client servers to have a separate Middleware blocks cluster with up to 2 servers (for fault-tolerance).
See also the Application Scaling documentation.