I have to find a solution to a problem and I don't know where to start.
Lets imagine I have a list of n containers and m processes. Each process resides already within a container and have 4 attributes, ex: cpu, memory, IO and network utilization.
The sum of each attribute type of all processes within a host cannot exceed the physical limitation of resources of that host, ex: 5 processes consuming 10% of cpu within a host can be together within a host, but 15 can't.
I would like to find the best (or a good one) solution that assigns those processes to the hosts with the following restrictions:
- Use the minimum containers/hosts possibles.
- Minimize processes exchanges, from one host to another, if a process is already in one host it would be desirable for it to stay there.
- The processes attributes can changes dynamically but there might be a trend based on time or prior behavior.
- Maximize a host CPU utilization
- Maximize memory utilization
- Minimize IO utilization within a host so processes don't conflict to each other.
- Minimize network utilization.
I have seen a proposed solution of a simpler version of this problem (just using CPU attribute), using Markov chains evaluating the past values of the CPU utilization.
I first thought applying a multi-objectives Knapsack approach.
Any help please.