So what does impact continuous delivery? The usual suspects: deployment automation, continuous integration, branch-based development, loosely coupled architecture, and version control for all production artifacts. But also impactful and tagged in the roundup this past year for their use or lack thereof are: monitoring and observability, continuous testing, integrating data and the database into the deployment pipeline, and integrating security into software delivery. The database is a heavy theme of the latter set.Bringing the database into the fold of DevOps’ most foundational technical process, continuous delivery, can feel like a complex, even frightening, proposition for a lot of organizations, especially those weighed down by legacy architectures. But know this: it’s doable and improves SDO performance, even for organizations with scaled, distributed data tiers.
Make the Database Part of the HerdRegardless of the tooling a shop employs for its pipelines—Jenkins, Travis, GitLab, Amazon’s Code suite, etc—automating a software release process with a flow triggered by commits that builds, tests, stages, and ultimately deploys updates is the beating heart of continuous delivery. It’s adaptable for the database and complementary tooling with the right information and models. Baron Schwartz digs deep into schema as code and non-schema code kept in source control as well as data migration automation (and much more) in discussing how to achieve continuous delivery with databases in DevOps for the Database. But here the holistic picture will do. In Accelerate, the DORA team offers some wisdom around the big picture with pipelines and data tiers:
There are a few practices that are predictive of performance outcomes. We discovered that good communication and comprehensive configuration management that includes the database matter. Teams that do well at continuous delivery store database changes as scripts in version control and manage these changes in the same way as production application changes. Furthermore, when changes to the application require database changes, these teams discuss them with the people responsible for the production database and ensure the engineering team has visibility into the progress of pending database changes. When teams follow these practices, database changes don’t slow them down, or cause problems when they perform code deployments.Of course, there’s a kicker, a big one. All of this working well is predicated on the observability of a system—how well your developers, your teams engaged in genuine DevOps feedback loops, can measure what they want and need to measure (and not what irrelevant predefined metrics force on them) in order to craft and push an appropriate fix, an improvement, or a new feature. Observability is a property of the system. Being able to distinguish the patterns actually playing out and relevant to queries themselves, being able to explore a relevant external viewpoint, like details about a customer-facing workload, are all key. As Baron notes, “Without observability, it’s impossible to safely automate, it’s impossible to have confidence about migrations, it’s impossible to employ continuous delivery, and so on. Each of the capabilities and categories of development rests on a foundation of being able to observe and monitor the database.” In a skilled DevOps environment, observability has to be accessible to everyone on the team because developers are responsible for the database performance of their own application. It’s unreasonable to ask them to manage systems or be accountable for performance improvements if they lack a view of the right landscape.
Everyone’s In the SaddleAll of a team’s engineers can own continuous delivery for the database (or be on the path to doing so) if they can observe and measure particular signals from both external and internal points of view. Let’s break it down:
- First, a team needs to observe measures of Concurrency, Error rate, Latency, and Throughput (CELT) for customer-facing database workloads, i.e., the “golden signals” of the external view;
- Second, they need to observe the Utilization, Saturation, and Errors associated with CPU, memory, storage, and network, respectively, as those are the key resources the database uses to execute workloads.