In the beginning God created the heavens and the earth. And God Said “let there be punch cards”. The writings of the greatest software architectures alive (Uncle Bob, Martin Fowler, Gergor Hohpe and others) are also history books. That’s what I love about them. History makes you really appreciate and to better understand where and why you are here. Now that I’m older than younger, I wish to do the same to you, to better understand what cloud computing actually is and through it, what cloud infrastructure today is.
Who is going to backup and replace those hard drives? “Don’t care, not my problem!”. The hardware, the bare metals are no longer your concern. It is now your Cloud provider’s responsibility to maintain it for you. You’ve outsourced it to someone who will do it better than you ever will, that is higher resiliency. That is what is called IaaS – Infrastructure as a Service.
I want my engineers to be happy when they come to work every morning. I want them to be happy with their families when they go home. My engineers need to sleep well at night knowing that they’re servers won’t go down. In order for engineers to be happy and for them to focus on the money makers - maintenance must be minimized. They should not spend their time chasing ghosts in the machines. Which is why I simply LOVE containers, which opened the door to an entire new era in cloud computing.
An isolated highly available solution would require three times the servers. Resilience costs money. A lot of it.Must there be a tradeoff between resilience and costs?
Your job now is to do this every morning, to make sure that no company resources are wasted due to incorrect container/resource allocations. Although it is necessary and beneficial it’s quite annoying, repetitive and time consuming. If only this entire burden and waste of time can be coded and automated somehow, so you’d can go back to focus on the money makers.
The Ops would no longer care where the applications are running. All the “open issues” of optimal bin packing and keeping the cluster up to date no longer exists. No need to buy and maintain servers, no need to launch or shutdown servers at all. It’s no longer the entire company’s problem.
Both for the developer and the Ops that’s a lot of work to do just to get a simple code to run. Although many Infrastructure as a Code tools exist, that is still a lot for the Ops to set up and a huge burden to make sure all the above is always up. Function as a Service as a concept is to take care of everything related to getting your code to run, letting you get back to what’s really important - the money maker.
For the last few years I’ve taken part in a philosophical debate on how to better handle concurrency and throughput. To achieve higher throughput in the application layer requires certain expertise, and probably even per application. Scaling your infrastructure is a know-how as well. The answer between one or the other, Programmatic or Infrastructure, is as always - somewhere in between. The Middle Way. It depends.
Even if I know something now, it doesn’t mean anything about the future, as requirements change through time. The uncertainty can be so high that is completely unpredictable, or predictable and you’ve got it wrong. You could have gotten it right for year one, but year two was so good for business that the assumptions you made no longer hold. As an architect that is something to consider.
There is a tight relationship between application development and the compute it will run on. There are costs and considerations of choosing whether to go with Serverless Compute by default or not.