Transluscent Inter-Process Service Migration Jean-Paul Calderone exarkun@twistedmatrix.com Time Slot: Half Hour Presentation Author Background: Jean-Paul Calderone completed coursework towards a computer science degree at the State University of New York at Stony Brook before taking a position at the National Center for Biotechnological Information at NIH. He is currently employed by Divmod. He spoke previously at PyCon 1 about two applications developed using Twisted. Presentation Summary: Circumstances exist where it is desirable to change the behavior of a running application without interrupting the service of those users whom it is currently serving. In high load environments, it is often the case where there will always be a significant number of users relying on the service. In these environments, the simplistic approach of waiting for all users to sign off, then shutting down and restarting the server software are not feasible. Several possible techniques, of varying degrees of sophistication, for dealing with this problem will be discussed. Among them are uses of multiple processes (possibly on multiple physical computers) in a cluster configuration, dynamic loading and unloading of code within a single process, process re-execution (via execl()) to upgrade code without dropping resources such as open files and sockets, and migration by passing resources such as open files and sockets to a new process running new code. Examples of why this is a real problem, the specific issues related to solving it in Python and the strengths and weaknesses of each covered technique will be discussed. If it is technically possible to do so, working examples of some of the techniques will be shared and demonstrated. Presentation Outline (Tentative slide titles): * Introduction * What is migrating? * Why do we need migrating? * Naive solutions * Problems with naive solutions * Load balancing * Upgrading code * Upgrading hardware * Fail-over * Problems with migrating * Different migration models * execl() * Problems with execl() * Multiple processes, same machine * Problems with multiple processes * Multiple machines * Problems with multiple machines * Example of simple (stateless) case * Example of complex (stateful) case * Demonstration of rapid migration [if possible] * Walk-through of rapid migration * Demonstration of gradual migration [if possible] * Walk-through of gradual migration * Integration with existing software * Designing for migratability * Conclusions * Future directions * Further reading