Jobs should be assigned to clients based on their priority. By default this priority should be derived not only from data availability but also from client's performance, latency, bandwith, reliability and availability. There should be some mechanism for updating these metrics in a global or local scale. Perhaps idle clients should suggest or peer-autonegotiate their substitutes.