The situation we currently have in our company is:
We want to find out auto-scalable solution using docker, salt and Amazon EC2. Since I don't have admin background It's hard to evaluate which of possible solutions we've came up with are good and which are bad. So I decided to ask you for your experience with mentioned technologies and maybe you will be able to point out possible problems with following solutions:
That's all we have:) Any suggestions will be appreciated. Any different solutions than those three are very welcome (Especially those already running somewhere on production).
Is there a reason you do not consider using the amazon container service (ecs, http://aws.amazon.com/ecs/)? I imagine this would cover the docker scenarios you describe and perhaps you would not even need salt then (maybe this is just my ignorance, not having worked with it). You could containerize your app any way you want, create a docker cluster based on the ecs AMI and have amazon do the the scheduling in your docker cluster or you monitor the resources yourself via the API adding new cluster nodes when needed. From the ecs FAQ (http://aws.amazon.com/ecs/faqs/):
Is it possible for me to schedule container launches and manage placement across a cluster? Yes. You can do this in two ways. You can choose to let EC2 Container Service randomly place you across a cluster to try and maximize the availability of your tasks using the RunTask API, or you can use the DescribeCluster API to get information about the complete state of your cluster. The API returns data on all the container instances in a cluster, what tasks they're running, and what resources are still available. With this information you can use the StartTask API to target specific Container Instances in your cluster or use a custom scheduler to manage placement based on your requirements.
I think that way you could first utilize all your available cluster nodes to a high percentage and then trigger the creation of new cluster nodes that can be removed when you re done with the calculation. This should address the granularity problem form scenario 2 and the scaling down problem from scenario 3. In terms of complexity, it is still pretty high, at least compared to scenario 1 since you need to dockerize everything and learn ecs.