| This seems to come up every time serverless comes up. There should probably be some better docs around this. It's true each function needs it's own connection, but in reality: 1) The containers actually stick around for a while and get reused so if you write the code correctly it only has to establish the connection once per container invocation 2) Unless you are doing a lot of traffic you'll probably only realistically have a few containers running your functions so it will only be a few connections. 3) If you end up with enough traffic that it actually becomes a problem, it would have been a problem anyway because you'd be running a lot of servers with persistent connections in a more traditional model. In other words, the number of connects and set up and tear down is about the same as in a traditional setup, maybe just a little bit more. Edit: One more thing. Sometimes a counter I hear is "Yeah but every function needs it's own connection". I counter that with the contention that even with a traditional setup, a good abstraction means only one or maybe two functions actually talks to the database -- everyone else should be getting their data from that function. Also if you do it that way that one function can do some smart caching (which survives at least a few minutes with serverless). |
I think this is the part I disagree with. DB connection pools are much, much smaller than than the total # of functions that touch a database in any reasonably complex application.
Yes, scale is always an issue, but it seems to me that in this serverless world where you have 1 connection per function you run into scale issues a lot(order of magnitude?) faster than the "traditional" way.
> a good abstraction means only one or maybe two functions actually talks to the database
In a serverless world, does this mean you would run a handful of functions with DB connections, and other functions would proxy db requests through them? I can see that working ok I suppose.