1. A method implemented by data processing apparatus, the method comprising: maintaining a directed graph that represents allocations of resources in a distributed computing system, wherein each node of the graph represents an allocated resource, wherein different types of nodes in the graph represent different types of resources, wherein each particular type of node is associated with a message handler that is specific to the type of the node, and wherein each link between a pair of nodes in the graph represents ownership or usage of one resource represented by one node by another resource represented by the other node of the pair of nodes; receiving a request to allocate a resource of a first type in the distributed computing system, the distributed computing system having a plurality of different types of resources including a plurality of hardware virtualizations implemented on different host machines; in response to receiving the request, sending, by a message handler of a source node in the graph, a message to be processed by a message handler of the first type; and processing the message by the message handler of the first type, including allocating a first resource of the first type and associating a node of the first type with the first resource.