1. A method for providing services in a distributed system, comprising: receiving capabilities of a compute resource from an executable application on the compute resource; receiving a request to add a new service to the distributed system, including information reflecting requirements of the new service; determining whether an instance of the new service was previously instantiated and is currently operating in the distributed system; monitoring operation of the previously instantiated instance of the new service to determine whether the previously instantiated instance fails; matching the requirements of the new service to the capabilities of the compute resource if the new service was determined in the determining step to not currently be operating in the distributed system or if the monitoring determines the previously instantiated instance of the new service fails; and when the matching determines the requirements of the new service match the capabilities of the compute resource, directing the executable application running on the compute resource to instantiate an instance of the new service.