Earlier today at the Microsoft Build 2017 conference in Seattle, Scott Guthrie announced two new offerings to the Azure Database Services Platform, Azure Database for MySQL and Azure Database for PostgreSQL. Today I’ll be talking about our MySQL offering – a little bit about our journey, the architecture and our aspirations for the future. If you’re interested in learning more about our PostgreSQL offering, take a look at Sunil Kamath’s blog post where he talks about what we’ve done for PostgreSQL.
What is Azure Database for MySQL?
Rather than re-stating the details in our marketing page, I want to delve a little deeper on what makes Azure Database for MySQL both a great fit for Azure as a new service, as well as our customers. Up until today, the options to deploy a MySQL database in Azure had been limited to either complex VM deployments where you had to manage the entire stack (usually full LAMP stack), or deploying through one of our partners into their managed service offering. Customers have been telling us for quite some time that these options were not satisfying their needs fully and that they preferred an offering directly from Microsoft with the same level of high-availability, performance scaling and support that is provided by SQL Database today.
That is exactly what we did.
Started over a year ago, the team worked closely with the SQL architects on how we could work together to build a database systems foundation that could scale across SQL, MySQL, PostgreSQL, and who knows – possibly other database engines in the future. Not only did we build both Azure Database for MySQL and PostgreSQL on the solid foundation of the SQL DB service fabric-based architecture, we worked together to extend it giving all services more capabilities with regards to storage options and performance. Through the economy of cloud scale, this investment allows for predictable capacity planning and high instance density enabling us to bring a very elastic pricing model for our customers. More on pricing later.
The above is a snippet from our Build presentation illustrating how Azure Database for MySQL is part of the overall Azure Database Services Platform where shared architecture yields benefits for each service that sits on top of it. Below I’ll go into a little more detail here on the core areas: Trusted, Flexible and Intelligent.
One of the largest value propositions of any managed service is the fact that the infrastructure is managed for you. You don’t have to worry about MySQL server patching, for example. Critical Vulnerabilities (CVE) are unfortunately a necessary event in all software development, and the MySQL community is great about patching CVEs very shortly after discovered. Once a CVE is announced and available, we patch the system for you so you don’t have to worry about it. The same is true for minor version releases of MySQL Community Edition. We update your server for you on the back-end so you don’t have to. What about the need to reboot the server, you ask? That’s the beauty of the highly-available nature of the Azure Database Services Platform, rebooting servers for patches and updates to take effect happen without your applications going offline. How do we do this? Simple, we maintain a replica of your database and when an update is necessary, we spin-up a new database server for you and switch over to the new server on the fly with mere seconds of unavailability, meaning your apps don’t even notice. This of course is also true in the event that your MySQL server experiences a crash, we can recover within seconds.
Backup and restore work in a similar manner, with the ability to fully restore your server or being able to restore to specific points in time in 5 minute intervals for up to 35 days. What’s really cool here is the fact that you don’t have to worry about managing how much storage is necessary to support this, we manage this for you on the back-end and you don’t have to pay for this storage.
Security is an area that Microsoft Azure is particularly strong as a public cloud platform overall providing encryption of your data both at-rest and in-motion. Control access is also implemented allowing you to control the IP addresses that have access to your server through firewall rule management as well as enforcing SSL connections between your server and connecting client applications. Lastly, all of the great native security features that are built-into MySQL as a product are also implemented including user access control so you can create multiple users with different access writes such as read or read-write only, ensuring that you can grant access to specific users for specific needs without compromising your data integrity.
One challenge of bringing an application and associated database to any public cloud platform is sizing the cloud platform’s services for your specific application. Choose the wrong performance option oftentimes results in having to spin-up a new database server and migrating your database and application settings to the new server. With Azure Database for MySQL, we leverage the incredible HA framework to enable on-the-fly scaling, up or down, with no application downtime. Not only does this alleviate the pain from having chosen the wrong performance option for your database, but also applies to workloads that have cyclical spikes in activity. Imagine that you have a marketing promotion that will be run over a weekend or a holiday that is expected to increase your traffic by 300%. You can simply scale-up before the event to handle the traffic during the promotion and then scale-down afterwards to control your costs. Here’s what a couple of our customers have to say about this.
“In the past, an event like a snow day could crash the website with thousands of parents hitting it at once. We can get over 100,000 hits in a 30-minute period, but we’ll be prepared with Azure Database for MySQL’s ability to scale on the fly. Running our website on Azure will really help our communications—we won’t have to worry about it anymore.”
-Matthew Williams, Systems Analyst, School District 42 Maple Ridge—Pitt Meadows. Read School District 42’s story here.
“The biggest benefit of Azure Database for MySQL will be the ability to auto scale and respond to spikes in traffic by temporarily adding more resources, and then bringing them back down when they’re not needed. That’s a big deal for us.”
-Kevin Lisota, GeekWire. Read GeekWire’s story here.
Scale-on-the-fly isn’t the only “Flexible” tenant of Azure Database for MySQL. Oftentimes the need for fast database processing isn’t exclusively correlated to the compute resources (CPU and memory) needed for your application. By separating compute resources (Compute Units) from storage performance (IOPS), in the Standard performance tier of the service you have the ability to increase IOPS without having to upgrade your MySQL database server to the next tier of service. Right now is a good time to check out Azure Database for MySQL in Preview, as our Preview Pricing is roughly 50% of expected retail pricing. Learn more about pricing of Azure Database for MySQL here.
Built-in monitoring allows you to determine the actual usage of your MySQL server relative to your workload. By providing detailed usage metrics around both Compute Unit usage as well as Storage, you can easily decide between whether increasing IOPS is necessary rather than increasing your Compute Units by going to a higher SKU. Built-in alerting will let you know when you’ve hit pre-determined thresholds you have set for your MySQL Server to make these changes before they become a problem.
It’s all about the apps, anyway
Probably one of the best things about Azure Database for MySQL is that for app developers, there is no need to worry about the infrastructure. Focus on what you do best – building great apps. Azure Database for MySQL is using the same MySQL Community Edition that is available from mysql.com which means you can use all of same tools you already use for development, management, performance profiling and monitoring. Another area where we went the extra mile with Azure Database for MySQL is deep integration with other Azure Services, namely Azure Web Apps. Not only can you easily deploy an Azure Web App with Azure Database for MySQL as the database provider, but we’ve worked to provide complete solutions for common Content Management Systems (CMS) such as Wordpress and Drupal. So now deploying a website is not only integrated and easy with a single provisioning process, but you have choice for a scalable database provider to handle your website traffic.
This is just the start. Keep an eye out for more blog postings from me and the team as we progress on the product through Preview to GA, including deeper dives on topics such as migration, scaling, HA and developing for Azure Database for MySQL.