Your organization is in a place where you are considering different options to quickly deploy your databases. Maybe you have multiple internal customers in product teams that want to be able to setup their environments in an easy and fast way. New database clusters for new projects, dev environments, upgrade tests and so on. Launching everything by ops or infra team is not something that scales well therefore you are looking into alternatives. One of them could be to use some sort of external DBaaS providers. Products like Amazon RDS are well known and allow for quick and easy deployment of the database infrastructure. On the other hand they come with a set of limitations – you can deploy only the databases and topologies that are supported. Easy deployment also means easy only if you know what you are doing. For a first time user this could be something he’ll struggle with. Then you heard about private DBaaS – something you can build on your own, adapt to your needs. What are the benefits of running your own DBaaS compared to running the public DBaaS? Let’s take a quick look at it.
Deploy Whatever You Want
For starters, the most limiting factor of a public DBaaS is that you can’t really have control over what solutions are available. There’s a list of the available solutions and that’s pretty much it. You cannot deploy anything that is not supported by the vendor. With your own solution you have a control. If your organization decides to implement another technology, it is always possible to include it in your own DBaaS. Sure, it may take a bit of time to actually implement the solution – code will have to be written, tests would have to be performed but eventually it will become available for your users. This is actually not just a theoretical problem. Let’s take a look at the Galera cluster, a synchronous replication cluster for MySQL. It is quite common as its performance characteristics are rather similar to traditional replication. It’s pretty easy to use and it’s very easy to set it up in a highly available topology, way easier than with regular MySQL Replication. If you’ll start looking for Galera Clusters amongst public DBaaS, you are in a tough spot. No major DBaaS provider has Galera in his offering therefore the only way to get your hand on Galera is to deploy it on your own, or create a private DBaaS that would provide Galera for your users.
Make It Easy-to-Use
Second good reason for designing your own DBaaS – making it easy to use. Let’s be honest, public DBaaS’ UIs are not the best example of the great user experience. They do their job but they are quite complex to navigate, especially for people who do not have experience in using them. If you want the UI where your users, even those not technical ones, feel comfortable, you may want to design it yourself.
Hide the Complexity
Adding on the point above, you may want to hide the complexity. DBaaS are very complex solutions – databases, replicas, load balancers, networking, auto scaling and many many more. Majority of those features are reachable from the UI, making it very complex and clunky. The main reason behind it is that those are solutions designed to work for everyone and, additionally, UI is not necessarily the main way of interacting with the environment.
Command Line Interface is typically the way to go as it is easier to run several commands that you can write down and store for later use than going through the hundreds of windows and options in the UI every time you want to deploy a cluster. On the other hand, for less technical-savvy users setting up CLI access may be quite hard – they typically prefer clear visibility that UI gives then. Keeping in mind that most of those features may be irrelevant for your use case, you can hide the complexity of the solution and present the user with a UI that only has options that he has to decide on. If you come up with a standard, highly available environment that includes database cluster, a set of load balancers and, for example, some sort of a virtual IP, what’s required by the user is to pass the number of nodes, maybe their size and that’s pretty much all – the outcome there will be a single entry point to the database cluster. A hostname or an IP address that points to the load balancers and a user credentials to access . That’s all the user has to know to be able to successfully connect to the database.
Integrate Into Your Environment
Public DBaaS are available as is, there are not many options for customization. They are focused on deploying, provisioning and managing databases that they support. They do not care about your environment, what you want really as the final outcome.
Do you want to deploy a web application that requires some database as a backend? Do you want to create a copy of your existing database to run some tests on? Do you want to deploy a Disaster Recovery cluster in another datacenter?
Some of those options are simple to accomplish, some are not. You may have to write complex scripts that would tie together all the loose ends – integrate database deployment into your process of deploying a web application. Prepare a script that will perform all of the required actions to create a copy of the database – take a snapshot of the database, transfer it to another DC, create a new cluster using the snapshot. Everything is possible but your end user, most likely, won’t enjoy running scripts. When going for your own DBaaS solution, you can nicely integrate everything into the single UI. Do you want to deploy your application along with the cluster? Here’s a button to click. Everything will be deployed locally in your datacenter. Do you want to have a copy of your database? Again, click here. It’s that simple. Sure, underneath there will be scripts but what’s great is that everything is tied together, in a single management UI that you may already have for your applications.
Sure, building your own DBaaS will take some time and resources, you will have to maintain it as well but there are significant benefits of going your own way, especially if you incorporate database management tools like ClusterControl to reduce the need of writing your own database deployment code and reduce overhead required to maintain the whole solution.