Resources for cloud independent architecture design?

9 points by carnitas ↗ HN
Hi there! I've been tasked with lifting some existing architecture and build systems to the cloud. I want to go with Kubernetes or some solution that allows for little to no cloud vendor lock in, allowing system to be run on prem as well.

Can anybody recommend a book or other resources that deals with these requirements? I've read "Designing Data Intensive Applications" and find it wonderful. I wonder if there's something similar for architecture / kubernetes.

Thanks for your suggestion!

12 comments

[ 3.5 ms ] story [ 37.4 ms ] thread
These requirements basically entail that you're able to achieve feature parity with an on-premises datacenter; thus, you're treating various cloud providers as vendors for VMs, storage, and network. "Treating the cloud like it's a datacenter" isn't exactly a best practice from a pure architectural perspective.

That said, there may well be business constraints forcing the decision, and that's fine--I'm not trying to pass judgement any! My point is simply that by building something that can be deployed to any and all environments you're reducing the list of what can be used down to a very small set of primitives.

Not "Best Practice" according to whom? Cloud vendors selling lock-in services? From an architectural perspective how is a bare VM at a remote data center worse than indeterminate/unknown intermedate layers of a proper "cloud" provider that is still in the same remote data center with the same hops and latency?

That "very small set of primitives" is enough to build the cloud vendors themselves so how exactly is that a limiting factor?

If I seem overtly hostile I don't mean it that way. I am just genuinely curious for an extended explanation. In it's current form it sounds down right marketing tautology to my ears.

For a lot of workloads, higher level services offer more bang for buck along the axes that matter. For a small real world example, I could run Wordpress myself on a VM for a fraction of what I pay WPengine, but it's way better for everyone if I pay WPengine instead and get on with doing the things that move the needle on my business.

Scaled up, you can consider the equivalent to be using managed database offerings, message queues, load balancers, etc. There's more value to me in spending time on the differentiated things that drive the value I provide to my customers than me implementing a crappy shadow of DynamoDB or BigQuery myself.

Thats a great point. I guess I want the product to be deployed anywhere so containers are my first thought
What’s the objective?

There are good reasons to do this, but it’s unlikely to save money. End of the day, you’re going to be committed (“locked in”) to something, whether that be a cloud provider, software company or budget for staff.

The objective is for our company to say “we are cloud enabled / cloud based”. We also need to install this software on prem at clients. Therefore I think kubernetes is a good neutral solution.
Makes sense.

Chick-fil-a got some press a couple of years ago about landing k8s clusters at their restaurants where the installers and staff are totally hands off. May be similar to your use case or may inspire some googling.

IIRC, Intel was funding some efforts around this type of solution, but with an IoT focus. Not sure if that is still a thing.

I was working on a project that was looking at doing this and was really excited about it, but we went a different direction.

Do you need k8s?

Have you thought of PAaS and managed databases? Just thinking. Of course if you’re all good to go on kubernetes go on then!

Well the reason I’m thinking kubernetes is that it can be hosted on prem for the client as well.
Basically I would like to keep close to the same environment on prem and in the cloud
You may be interested in "Zero to JupyterHub with Kubernetes"[0]. Here's an excerpt of the description:

""" This project will help you set up your own JupyterHub on a cloud and leverage the clouds scalable nature to support large groups of users. Thanks to Kubernetes, we are not tied to a specific cloud provider. """

[0]: https://zero-to-jupyterhub.readthedocs.io/en/latest/

What is your product? You can achieve cloud independency with an RPM and an ssh connection... then you can eventually move to installing the RPM in a docker image you build if you want to deploy in a more immutable way.

If you are going to use Kubernetes I hope it gives you a lot more than the former.

hint: it usually doesn't if you don't have multiple teams.