The second piece with you by DB is the storage layer, right. The query layer, we took the Aurora approach, the storage layer, we really took the Google Spanner approach because we wanted both scalability and HA. If you know anything about Amazon Aurora, you know that although it scales reads really well, right scaling isn't nearly as up to par. So using Google Spanner using Raft consensus, we're able to slowly add more nodes to your cluster until you need it, right.
And just to kind of double click on the RDBMS feature set, this is what's supported today on you go bite from version 2.9, you can see a full list of this on our docs as well. But things like stored procedures, triggers, role level security, user defined types, et cetera, you'll see that not many NoSQL databases, right. If any, NewSQL, as well as all the distributed SQL systems aren't gonna have that because it's almost impossible to do without reusing the Postgres SQL code itself. So if you're using any of these today, rest assured you can use them with you by DBA as well if you decide to make that transition.
Now to double click on the scaling portion. Over here to the left is what you have seen for years on right, your typical, hey, we have a single server database and we have the clients coming in, all our data is on a single node. If we want to scale to be able to handle more client traffic, we're kind of bottlenecked. Depending on where your bottleneck is in storage or if it's CPU or if it's RAM, really all you can do is increase the size of your instance, scaling vertically. And eventually, you get to this crossover point where it just becomes too expensive, right? Or maybe the physical limitations are there. You're kind of relying on manufacturers of these servers that are choosing your CPU and RAM relationships, right? And sometimes that's kind of what makes you think, okay, and now I got to start sharding, all right? Well, up to this point, you would have had the shard manually if you're using MySQL, Oracle, they have the ability to shard, but they don't do automatically sharding for you like Ubiquity Db does, you have to manually shard your data across a cluster, and you have to manage all that. Anytime there are changes, you're gonna have to go ahead and make those changes, right to the shards themselves and manually shard it to the application, and this is very time consuming. If you're somebody who is doing this today or has done this in the past, or has even just heard about it, it's very time consuming, and it takes a lot of experience as well. So finding the people that know how to do it and how to do it right is also extremely challenging. So you might DB's goal was to take this away from the user and make sure that the database itself could automatically do this.
So every time you create a database in you by DB, take a look over here on the right side, we split that data into chunks or shards, and then we distribute those shards across all of the nodes in your cluster. The cool part about this is that now every single one of these nodes is gonna be acting as the quote unquote, master node, accepting client traffic, having its own CPU and RAM that is able to serve that traffic. Anytime that you need a scale, you can still vertically scale if you'd like, right, go from two cores to four cores, it's eight, 16, 32, et cetera, or you can just add more nodes to the cluster. And these nodes can be in the same region, it could be in different regions, or very flexible when it comes to type of topology that you're having. The key part is all these nodes are identical, right, every node has its own Postgres query layer, it has its own DocumentDB storage layer running on the YugoByteDB node within a single cluster.
So if we take a look at a user on their cell phone, if you have a mobile application or it's a web application using GraphQL connected to something like Hasura GraphQL Engine, and then Hasura communicates the back end YugoByteDB engine, it communicates with that query layer that's Postgres compatible, as you'll see when I run through the Hasura demo, we'll be using the Postgres Connector itself. There's no special YugoByteDB connector, we're using the exact same one. And then that communicates with the data, right? So connecting to any node, YugoByteDB will cache kind of the different shard locations and be able to direct the traffic to where it needs to go, and then you can add or remove nodes anytime without any downtime. So that's different than how you'd have to do with traditional systems, right? Let's say you had a monolithic application and a single-server database, you'd have one app connecting to GraphQL, connected to the GraphQL server, hitting that single node Postgres instance, in this example.
Now, if we take a look at what it's gonna look like with YugoByteDB and GraphQL, as you kind of see today, you're broken up into microservices, each one's using GraphQL APIs, connecting to the same cluster. As you build out more microservices and you build out more APIs, you can hit the same cluster and add nodes to that cluster, right? So you're not stuck on a single node. If you start with a three node cluster, you can grow that to a six node cluster or a nine node cluster, et cetera. So even if you're running, a lot of times in our conversations, users will create microservices, right, for their application code and they'll break their massive application code into different sections. And sometimes they'll still be running it on a single node database, whether that's Postgres, MySQL, Oracle. It doesn't really matter, because at the same time all of them are kind of, it's the same type of system, right? It doesn't scale as easily. So a key part to any type of modernization effort for your applications is gonna be the database. Because really what we're doing is if you continue to run it on a single node instance, you're eventually gonna run into another bottleneck. Because that's a benefit that YugibyteDB provides.
And there are different typologies with any YugibyteDB cluster. Every YugibyteDB cluster has a minimum of three nodes. So if we assume every single one of these little visuals is a single node, you can run across availability zones. Alright, so availability zone one, availability zone two, availability zone three. Your data is being distributed across these three nodes running in three different availability zones, and it's being synchronously replicated and using RAF consensus to make sure that there's data integrity between them. So you have consistency across zones, but obviously you don't have the luxury of regional fillers. That's where the regional topology comes in. If you want region level redundancy, you're gonna want to have your nodes in three different regions rather than three different availability zones. Technically, they can be three different availability zones as well. But they're gonna be in three different regions, right? So that's kind of the key there. We're kind of expanding the distance that we want to be protected for.
And then the last one is multi cloud. If you want to run on AWS and GCP and Azure, and you want to have X amount of nodes in each, you can do that as well. And that obviously takes it to another level, right? Where if something were to have a new cloud provider in a particular region, you have other cloud providers that, or other nodes and other cloud providers that can, will make sure that your cluster's still up and running. And these clouds can actually be a private data center as well. So this doesn't necessarily have to be a public cloud like AWS. If you have your own data center, you can have a node in your own data center and then other nodes that are maybe in public clouds. One of the key areas of conversation that we're having with users is as they expand globally, how do we reach our users with lower latency in these new regions that we're pushing on our app. And for that, that is something that NewYork ADB is really good at, where we allow you to scale and be able to add nodes to new regions as needed. And you can accomplish this in two different ways. One of them is using synchronous replication and the idea of geo-level partitioning, where you pin specific rows to specific regions. We partition off a particular column that allows you to select different variables that allow you to choose, hey, if we have a row come in and the geo column is US, it'll automatically pin that data to the United States. If it's EU, it'll go to EU. If it's Asia, it'll go to Asia. Right? So that's something that's, when it comes up a lot, when you talk about data compliance, especially with the EU and GDPR compliance, we almost always need to make sure that, hey, EU data stays in EU. But at the same time, if you wanted to, you could query across the different regions, but the data is stored in that particular region. You go by, DB also has the concept of asynchronous replication. So if you want to have two separate clusters synced up with asynchronous rather than synchronous replication, that's also something that we can do. And when we've seen users accomplish that for low latency in different regions as well. So using Yugo by Cloud and other different, let's say, for example, Hasura cloud, we've really seen developers start to embrace this type of architecture where they don't have to deal with the infrastructure piece. They don't have to go to the command line and run different scripts and different types of commands in order to stand up these different technologies. These technologies are fully managed for them by the people that built them in the first place. And by using them together, you really get a fully managed GraphQL stack. And that's what we're going to show you today on the Hasura piece.
Comments