A method of balancing resource utilization among a set of servers, the method comprising: determining a system state for the set of servers, wherein some of the servers in the set may be unavailable, the system state being defined by the subset of servers that are currently available from among the set of servers, and wherein the number of possible system states is the number of unique subsets of servers from among the set of servers; assigning individual shards to respective ones among the subset of available servers according to a shard-to-server allocation scheme that, at least for mapped ones of the possible system states, prescribes an allocation of the shards among the subset of servers belonging to each mapped system state and minimizes the number of shard reassignments needed when the system state changes, wherein each shard is one among a set of shards and comprises a logical container for objects, and wherein each object comprises a job object or a storage object that requires respective resources on the server to which the object is assigned; allocating new objects incoming to the set of servers for processing to respective ones of the shards according to an object-to-shard allocation scheme that balances resource requirements across the shards; and responsive to the system state changing from a first one of the mapped system states to a second one of the mapped system states, reassigning individual ones of the shards from one server to another, as needed, in view of the differences between the shard-to-server assignments prescribed by the shard-to-server allocation scheme for the first and second mapped system states characterized in that the shard to server allocation scheme comprises a permuted copy of a weight vector comprising an ordered set of weights expressing relative preferences for assigning the shard to respective ones of the servers in the set of servers, the order of the weights being permutated so that each permuted copy of the weight vector is unique and assigning each shard to the available server having the highest relative preference, as indicated by the weight vector that corresponds to the shard. determining a system state for the set of servers, wherein some of the servers in the set may be unavailable, the system state being defined by the subset of servers that are currently available from among the set of servers, and wherein the number of possible system states is the number of unique subsets of servers from among the set of servers; assigning individual shards to respective ones among the subset of available servers according to a shard-to-server allocation scheme that, at least for mapped ones of the possible system states, prescribes an allocation of the shards among the subset of servers belonging to each mapped system state and minimizes the number of shard reassignments needed when the system state changes, wherein each shard is one among a set of shards and comprises a logical container for objects, and wherein each object comprises a job object or a storage object that requires respective resources on the server to which the object is assigned; allocating new objects incoming to the set of servers for processing to respective ones of the shards according to an object-to-shard allocation scheme that balances resource requirements across the shards; and responsive to the system state changing from a first one of the mapped system states to a second one of the mapped system states, reassigning individual ones of the shards from one server to another, as needed, in view of the differences between the shard-to-server assignments prescribed by the shard-to-server allocation scheme for the first and second mapped system states characterized in that the shard to server allocation scheme comprises a permuted copy of a weight vector comprising an ordered set of weights expressing relative preferences for assigning the shard to respective ones of the servers in the set of servers, the order of the weights being permutated so that each permuted copy of the weight vector is unique and assigning each shard to the available server having the highest relative preference, as indicated by the weight vector that corresponds to the shard.