Task Allocation Heuristics for Distributed Computing Systems