Take a look at the c10k problem, a classic resource for this problem domain: <a href="http://www.kegel.com/c10k.html" rel="nofollow">http://www.kegel.com/c10k.html</a><p>You probably don't want to spawn one thread per connection, but get notified by the operating system when one of a bunch of TCP socket connections has an event for you to handle. You can achieve this by the kernel calls epoll, poll, select, kqueue. For Python, I recommend taking a look at tornado (<a href="https://github.com/facebook/tornado" rel="nofollow">https://github.com/facebook/tornado</a>), an asynchronous socket handling framework. In particular the "io-loop", which you could use for handling the connections.<p>As for serialization protocols, don't roll your own but consider JSON for maximum flexibility, and protocol buffers for maximum efficiency. For communication between servers consider well known libraries and protocols such as AMQP (eg RabbitMQ) and Redis pubsub.<p>Be sure to read up about Linux kernel settings to improve the number of maximum open sockets, etc. Here are several good readings referenced: <a href="http://serverfault.com/questions/10852/what-limits-the-maximum-number-of-connections-on-a-linux-server/10919#10919" rel="nofollow">http://serverfault.com/questions/10852/what-limits-the-maxim...</a><p>Also, you'll want to get familiar with some tools you'll be using a lot, such as <i>lsof</i> and <i>netcat</i>.<p>About the infrastructure design: you'll most likely end up with several different server applications and possibly a number of simultaneous running instances. Consider Amazon EC2 micro instances or something similar to start with.<p>I'd recommend to experiment with building several prototypes before the real product, getting to know the approaches, architectures, bottlenecks, etc. Enjoy the learning experience!<p>Finally, spend enough time on the supporting tools, such as automatic deployment (chef, puppet, fabric), automated clients, etc. which will make your life a lot easier! :)