Hi, You do not need to overprovision a service to achieve resource utilisation. Ignite will do it for you even if you have just one service instance on a node. Internally Ignite services are based on Compute grid: it will use threads from the public pool to process the service invocations. You can just output current thread ID from your service method and you will see different threads execute your service (assuming methods are long enough for several threads to be taken from the pool).
The only reason to overprovision service I can think about is accounting for cluster growth. For example, suppose now your cluster is 2 nodes but it will grow to 20 nodes in the future. You can provision 10 instances of a service on 2 nodes resulting to 5 instances per node but in the future the service instances will be re-deployed so that an instance is deployed on 10 nodes of 20.