It has never been a better time to be a developer. Development tools and technologies continue to evolve that allow us to create better software. However, developers are under more pressure to decrease time to market, publish frequent enhancements, and reduce or eliminate bugs. The cloud offers several unique benefits to developers that can help. Some of the details mentioned below are specific to the Azure cloud, but other cloud providers have similar offerings.
One of the largest benefits of the cloud is the ability to scale. In traditional server hosting, you have to determine the specific hardware that each node of your system would run on from the web/application servers to the database servers. For highly available applications, you need load balancing of web and/or application servers and database clustering that requires expensive SAN (storage-area network) configuration. All of this requires extensive planning and locks you into this general configuration for several years based on setup cost alone.
With the advent of the cloud, you can now scale any portion of an application quickly and easily. For web and application servers you can scale up by increasing hardware power or scale out by adding more servers. Furthermore, configuring auto-scaling will dynamically add more servers based on various metrics (CPU, memory, etc.)
Databases can also be easily scaled by simply increasing the power of the server. For hosted SQL, these are measured in DTUs (Database Transaction Units) and represent a relative amount of processing power. In this model, you can create elastic database pools, which contains a fixed amount of processing power (DTUs) and share processing power with any number of databases. This allows each database to increase its scale when needed within the confines of the elastic pool.
Finally, with the advent of microservices and Azure Service Fabric, you can design your application with very fine-grained services and host these in a set of fluid containers that scale automatically.
A key benefit of using the cloud is the cost savings along with the ability to start small and increase usage as needed. A few economic benefits include:
On-premise or remote data centers require a large initial upfront investment. It also requires a lot of speculation for the current and future hardware requirements. As the customer base and application load increases, additional changes are required and would need new or replacement hardware.
For most cloud resources, you are only charged for the time you use. With features such as auto-scaling, you only get charged you for the additional servers when they’re running and no cost when it’s scaled down. Also, many services are priced per transaction, so if you don’t use it to a certain level, it is completely free.
The cloud offers increased redundancy, which can be critical when doing disaster recovery. Without the cloud, disaster recovery requires the provisioning of a separate data center (requiring an additional upfront and on-going investment), and the tools to replicate data or provide backups for restoring systems. The cloud can handle these out of the box and you are only paying for the hardware when you’re using it. This means your disaster recovery environment can be configured and ready, and then scaled appropriately when needed.
Quickly provisioning resources is a benefit that nearly all development teams can benefit from. They often need various types of resources from development and test environments to new types of technology in which to experiment. In typical IT shops, these tasks lie with the technical services team and can take days if not weeks to fulfill.
By utilizing the cloud, developers are empowered to quickly create new environments, from websites to virtual machines to databases. In addition, the cloud offers an almost endless list of services that are constantly being expanded. This allows development teams to stay on top of ever-changing technology. Plus, when they are finished with any resource, they can quickly turn it off or decommission it.
Finally, the provisioning of resources can be fully scripted and automated. This can be used to quickly create new customer databases and servers, or create and decommission testing resources.
The cloud doesn’t conform to a one-size-fits-all mentality. Instead, it gives you a lot of different options to setup your environment to meet your unique needs. Two main service models in the cloud are Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). Both of these have their merits, and you can even mix the two when needed.
Infrastructure as a Service refers to having your own infrastructure provisioned and managed over the internet. These include virtual machines, storage and networking components such as firewalls & security. Your physical hardware is supported, but anything on top of the hardware, including the operating system and any software, is your responsibility along with the licensing. This includes security configuration, operating system updates & patches, plus new versions of your software.
Platform as a Service takes IaaS a couple steps further and takes care of the physical hardware plus the operating system and development software. They also handle all maintenance of the underlying environment. This limits the responsibility of the developer to building and deploying the application. PaaS offerings including websites, databases, and a large number of additional services. Each of these can be easily scaled based on the needs of your application.
Another benefit is the geographic reach of the cloud. Instead of relying on a single geographic location to host your software, the cloud makes it possible to host your application in data centers spread across the globe. With traffic management and global replication of master data, you ensure your customers the best possible performance regardless of where they are located.
Content delivery networks (CDNs) can also be used to increase geographic reach even if your application is hosted in a single location. A CDN is a highly-distributed set of servers that respond directly to user requests for web content. They are used to provide quick access to applications, audio, video, images and other files to accelerate content delivery and improve the user’s experience. In addition, this reduces requests made directly to your application allowing it to better scale.
The cloud offers some unique features to handle deployments. With integration into your source control system, you can configure automated builds including the deployment of code, databases, automatic provisioning of servers, and automated testing of your application.
Deployment slots also offer the potential to perform no downtime deployments in a production environment. A deployment slot is an entirely separate web application hosted at a separate URL (e.g. staging.yourapp.com). You can perform your deployment to the slot and test everything out. When all is well, you simply swap your production and staging slot to officially go live! Another cool feature is that you can actually route a small percentage of production traffic to your staging slot. This allows you to test new features in production and ensure all is well before opening the flood gates.
The cloud puts many advanced services in the hands of developers to quickly build highly scalable and powerful applications. Here is a list of a few of these services:
Azure Service Fabric is used to simplify microservices development by managing and scaling service containers. This allows developers to focus on building the business logic and not on the problems of managing large distributed systems.
Service Bus provides real-time messaging as a service (MaaS) and makes it easier to build loosely-coupled distributed systems. A service bus supports publish/subscribe (one publisher and any number of subscribers) and queuing (first-in/first out).
Redis Cache is an open source solution that provides a fast in-memory data store, cache, and message broker. It can be used as a session cache for web applications, full-page cache, queuing, and even pub/sub.
SendGrid is an e-mail provider (SMTP relay) with the ability to track sent, opened, and clicked e-mails as well as handling unsubscribe requests.
Azure Functions provide a way to execute code in a “serverless” environment by not requiring a deployment to a virtual machine or web application. You are charged by the number of executions and total processing time. They can be triggered by using an HTTP request, a timer, or monitoring queue/blob storage. The code itself can be written in an on-line editor in a variety of languages, or a DLL (dynamic link library) module can be uploaded. These can be used to quickly add small tasks offloaded from your existing application.
In today’s agile development world, we need to quickly deploy applications and monitor that everything is going well. When we have a critical issue, we first need to be notified about the issue, have the tools to quickly identify the cause, and publish a fix as soon as possible.
Tools like Stackify Retrace offers application performance metrics, errors, logs and monitoring in a single tool. It gives developers a unique view into all facets of their application and allows them to be proactive in identifying problems before users report them. Performance issues can be quickly identified down to the service request and even the SQL statement.
The cloud has greatly matured in the last several years and adoption rates continue to rise. A recent study by RightScale found that over 50% of respondents are currently running applications in the cloud and these numbers continue to increase each year.
If your company and development team are not already benefiting from the cloud, now is the time to make your move!