by Nick Barkas
If you run on CPython, it's not possible to get a single-process, multithreaded Python program to use more than one CPU core at a time because of the Global Interpreter Lock (GIL). A common way of dealing with this is to run one instance of a Python program for each core a machine has and spread the load amongst those processes. This forces developers to write simple, stateless programs that naturally scale out to many many servers when needed, while also not having to think about things like locking and thread scheduling.
I'll discuss some tools and methods Spotify's backend uses for managing multiple identical server processes as well as load balancing with DNS, proxy servers, and using hashing to send repeated requests to the same process. I will also talk about the difficulties that arise when you really need to share data or state between processes, and how they can be dealt with.
Django makes it easy to build web sites and applications on tight deadlines - but how does it deal with sites that scale up in both traffic and complexity? Using Lanyrd.com as a case study, this talk will explore tricks and techniques for taking advantage of what Django has to offer while coping with the unexpected challenges raised by a highly dynamic social web application.
Topics covered will include performance monitoring and optimisation, advanced caching tricks, denormalisation with Solr and Redis and finding the right balance between technical elegance and pragmatism.