A computer-implemented method performed by a service-level agreement engine of a client device in communication with a cloud storage service through a network, the cloud storage service including a plurality of nodes storing one or more data objects for the client device, the method comprising: receiving a first transaction request from an application of the client device, wherein the first transaction request includes a plurality of service-level agreements, wherein each service-level agreement is associated, by the application, with a utility value assigned according to the desirability, for the application, of the service-level agreement, and wherein each service-level agreement comprises a consistency guarantee and a performance guarantee, receiving information about the plurality of nodes; based on the information about the nodes and on the consistency guarantee and the performance guarantee of each of the plurality of service-level agreements, determining that at least one node of the plurality of nodes can fulfill the first transaction request in accordance with one or more of the plurality of service-level agreements; and selecting a node from the at least one determined node to fulfill the first transaction request, wherein, where multiple nodes are able to fulfill the first transaction request, the selected node being either (i) the node that can fulfill the first transaction request according to the service-level agreement with the highest utility value, or (ii) the node associated with the greatest expected utility value, wherein the expected utility value is determined by determining a probability that the node can fulfill the first transaction request according to the service-level agreement, and multiplying the determined probability by the utility value associated with the service-level agreement. receiving a first transaction request from an application of the client device, wherein the first transaction request includes a plurality of service-level agreements, wherein each service-level agreement is associated, by the application, with a utility value assigned according to the desirability, for the application, of the service-level agreement, and wherein each service-level agreement comprises a consistency guarantee and a performance guarantee, receiving information about the plurality of nodes; based on the information about the nodes and on the consistency guarantee and the performance guarantee of each of the plurality of service-level agreements, determining that at least one node of the plurality of nodes can fulfill the first transaction request in accordance with one or more of the plurality of service-level agreements; and selecting a node from the at least one determined node to fulfill the first transaction request, wherein, where multiple nodes are able to fulfill the first transaction request, the selected node being either (i) the node that can fulfill the first transaction request according to the service-level agreement with the highest utility value, or (ii) the node associated with the greatest expected utility value, wherein the expected utility value is determined by determining a probability that the node can fulfill the first transaction request according to the service-level agreement, and multiplying the determined probability by the utility value associated with the service-level agreement.