How to Pick a Pool in Erlang without Drowning
When building a system in Erlang one often encounters situations where a pool of processes or a pool of connections would be convenient or necessary.
Unfortunately, searches for “connection pool” or “process pool” on a website like Github can show more than 30 different libraries to use. Some of these are more popular than others and have even been the subject of talks or blog posts. Others lack documentation but have been used in production settings for years. The architecture chosen for these pools often work well under light loads, but can get bogged down under highly concurrent, or highly volatile loads. In many cases pooling is actually not the answer and instead alternate architectures should be used.
So given all this, if you think you need a pool, and want to pick one, which do you pick? In this talk I hope to provide a framework for answering that question.