1. A system for deploying and managing software services, comprising: a computing environment that includes a plurality of virtualized and non-virtualized machines, which are organized into resource pools, wherein each of the resource pools includes a collection of virtualized resources; a plurality of software services, wherein each of the plurality of software services includes one or more software applications which are manageable as a unit and deployable to one of the resource pools; a plurality of agents, wherein each of the plurality of agents resides on one of the plurality of virtualized and non-virtualized machines, manages software applications and resources on the one of the plurality of virtualized and non-virtualized machines, and exposes the resources to the resource pools for use by the computing environment; a system controller that communicates with the plurality of agents to determine resources available on the plurality of virtualized and non-virtualized machines and to select a resource pool for deploying a software service, based on one or more of remaining capacity of the resource pool, dependencies of the software service, a service level agreement (SLA) of software services already deployed on the resource pool, and a priority for the software service; and a rules engine that compares administrator defined constraints with runtime metrics, wherein an administrator defined constraint is a user defined SLA that is captured a metric or state derived from meta data or other metrics and the runtime metrics are provided to the rules engine by a monitor service, and generates events when a constraint is violated by a metric of the runtime metrics, each event generated by the rules engine carries with it information necessary to handle the event including the scope of a constraint failure that caused the event.