We all started off as babies, and I am sure that not many of you remember that one of the first toys you played with (and if you do not remember - then I am sure those of you with kids have probably done the same with your children) was a plastic container with different shapes on the lid and blocks that were made of different shapes.
A triangle would only go into the triangle, a circle in the circle, a block in the block and so on.
This is a basic skill that teaches us that no matter how hard we try, there are some things that just do not work. Things can only work in a certain way (of course coordination, patience and whole lot of other educational things).
It is a skill that we acquire, it takes time, patience, everyone gets there in the end.
And why am I blogging about this – you may ask?
This analogy came up a few days ago in a discussion of a way to provide a highly available database in the cloud.
And it got me thinking….
There are certain things that are not meant to be deployed in a cloud environment because they were never meant to be there in the first place. The application needed an Oracle database and it was supposed to be deployed in a cloud environment.
What is the default way to deploy Oracle in highly available configuration? Oracle RAC. There are a number of basic requirements (simplified) you need for Oracle RAC.
- Shared disk between the nodes.
That will not work in a cloud environment.
So we can try using dNFS – as the shared storage for the nodes – that might work..
But then you have to make an NFS mount available to the nodes – in the cloud.
So let’s deploy an NFS node as part of the solution.
But then we have to make that NFS node highly available.
- Multicast between the nodes - that also does not work well in the cloud.
So maybe create a networking environment in the cloud that will support multicast?
Deploy a router appliance in the cloud.
Now connect all the instances in the cloud into the router.
But the router poses as a single point of failure.
Make the router highly available.
And if not Oracle RAC – then how about Data Guard – which does not require shared storage?
But it has a steep licensing fee.
And you have to find a way for managing the virtual IP address – that you not necessarily will have control over.
But that can be overcome by deploying a VRRP solution with IP addresses that are manually managed.
Trying to fit a triangle into a square – yes if you push hard enough (it will break the lid and fit).
If you cry hard enough – Mom/Dad will come over and put it in for you.
Or you come up with half-assbaked solution like the one below…
Some things will not fit. Trying to make them fit creates even more (and sometimes even bigger) problems.
In this case the solution should have been - change the code to use a NoSQL database that can be deployed easily and reliably in a cloud environment.
As always your thoughts and comments are welcome.