in reply to A distributed design challenge
I would go so far as to suggest that you really want to minimize the number of machines, because communication between different machines on a rack has to go through networking hardware. Communication between processes on a single machine does not. While you have presented this as “a distributed design challenge,” it fairly screams to me that it is not; that it emphatically should not be.
It would be reasonable to be able to channel the requests for a particular auction to a particular machine as a way of load-balancing, but you undoubtedly do not want multiple machines bidding on the same auction. In fact, I would go so far as to suggest that, whereas it is “intuitive” that this must demand a highly parallel solution (both inside and outside each box), it is to me almost certain that precisely the opposite is true. Massive amounts of microseconds will be burned-up trying to decide if it’s okay to make this bid, instead of making it. What you really want is for one software agent, who does not have to interlock with anyone anywhere, to be solely responsible for any given auction from its start to its completion and able to act entirely upon its own authority. Have a way (but only insofar as it is provably necessary ...) to marshal the requests to the appropriate box and thence to the appropriate software-agent within that box. Balance the system by adjusting either or both of those two controls. Now, upon receipt of a valid request, the software agent can make its decision instantly, based solely on information which it has in its hand, without consulting anyone and without waiting for anything. When the gavel falls, it can inform others of the concluded outcome.