Like Borg efficiently allocates compute resources, Andromeda manages network bandwidth over Google Cloud’s global network. This software-defined network ensures traffic from a service or user is routed most efficiently. Google Cloud is a single extensive network, and everything is software. Features like the global load balance or firewalls are just software configurations via an API rather than a physical device. This powerful feature defines how you want the network to appear with code alone.
An enormous benefit for me is having my development environment on the same Google network as my deployment environments with security between them. Gone are the days of having to transfer data over slow VPN connections.
Combining Abstractions
Taken together, this combination of abstractions is powerful. Being able to request a unit of compute or a unit of storage and knowing that the contract will be met without having to worry about the capacity or reliability of hardware means work is done for you. Similarly, with networks, data replication, and security, being able to declare behavior and being confident that requirements will be met is a liberating way of working. It gets better as Google Cloud combines these building blocks to make higher-level services so a developer can focus on the code, not the infrastructure.
Why Not DIY?
It can be tempting to use the infrastructure as a service (IaaS) of Google Cloud and treat it like a normal data center with virtual machines, disks, and networks, and run vendor’s products as you would on-premises. Effectively, this is resorting to the lowest common denominator to remain cloud agnostic. This is particularly popular when deploying databases and Kubernetes platforms like OpenShift, and it will work. You will have to pay for licenses and people to operate the services to go down that road, though. This may be practical for a large organization, but it may be no cheaper than an on-prem data center adding complexity for little benefit.
However, I hope by explaining the abstractions that Google Cloud provides, you will see how you are missing out if you do this. Google’s abstractions allow you to work at a higher level and leverage many years of Google engineers’ work. Moreover, you would also be missing out on the managed services Google provides on top of the foundations that raise the abstraction even further. Being able to take advantage of the higher levels of abstraction is what cloud native development is all about.
As an individual developer, you don’t have the choice of doing it yourself. If you have followed Kelsey Hightower’s “Kubernetes the Hard Way”, for example, you will have some idea of the effort involved. That is why using Google Cloud can be seen as a powerful toolkit to build what you want without needing an organization behind you. However, suppose you are developing as part of a large organization and adopting the same cloud native approach. In that case, there is no reason for complexity and cost to rise, which is how a traditional organization can keep up with any digital-native competitor.
If you work for an enterprise organization, you may have access to a private cloud platform like Red Hat OpenShift, VMWare Tanzu, or even Google Anthos, Google Cloud’s on-premises offering. Like Google Cloud, all these platforms’ applications are container based. Although tools and services vary, the principles of cloud native development I describe for Google Cloud in this book will still be applicable. The difference is that these solutions require a significant initial investment. If you are an individual developer, they are unlikely to be available. Google Cloud, however, has a much lower barrier to entry, especially if you take advantage of the free trial. For an individual developer, it is a much more accessible way to learn.
Summary
Google Cloud stands out in cloud native development due to its focus on service integration and support for open standards, minimizing vendor lock-in. It boasts a robust infrastructure, built on custom hardware and high-speed networking. Powerful software abstractions like Borg, Colossus, Spanner, and Andromeda manage compute, storage, databases, and networking, respectively, freeing developers to focus on coding rather than infrastructure. A do-it-yourself approach, treating GCP as a typical data center, limits the benefits of these high-level abstractions and may lead to extra costs. Leveraging GCP’s cloud native principles is beneficial for individual developers and large organizations alike.
Google Cloud provides the foundations for building cloud native applications. In Chapter 3, you will look at the characteristics of a cloud native application and the tools, techniques, and technologies that support them.