In a cloud environment, the role of the developer means much more than simply creating and deploying applications. It is your job to develop and deliver high-performance cloud-based applications within the best cost structure for your organization.
Cloud computing environments provide new opportunities to optimize the performance of applications by using techniques that would have been unthinkable in traditional deployment models. But cloud environments can also make it easier to latch on to or develop bad habits such as throwing more hardware at a performance problem, since additional virtual servers are only a click (and a credit card charge) away.
The savvy developer will not only avoid such pitfalls, but will also be able to leverage the cloud provider’s attributes to extract better performance at no additional cost. Achieving this level of optimization will require developers to extend beyond their traditional “comfort zones,” expand the scope of their roles and responsibilities, and become knowledgeable about the unique advantages and drawbacks of cloud computing environments.
As we can all see, Web applications are moving to the cloud at a stunning pace. According to Forrester, nearly 20% of all critical Web transactions in production contain at least one object—an ad, analytics tag, video or newsfeed, for example—from a cloud-based service.
The cloud is already having a major impact on Web application performance for many of the world’s leading companies, because the performance of cloud-based services varies widely based on service providers and regions.
From an IT operations perspective, the cloud presents several significant challenges that can impact application performance. First, the cloud is opaque, which means that cloud customers often have little to no visibility into system health outside of their own instance. Second, the cloud is a shared resource, and because virtualized applications can’t be 100% sealed off from one another, cloud customers can’t be sure that if a “neighbor” in the cloud experiences a spike in traffic, their own application performance levels won’t suffer as a result.
For years, as part of the testing and quality assurance process, developers have leveraged end-user performance testing and monitoring tools to gauge the end-user experience at the end of a complex Web application delivery chain, including third-party services, ISPs, carriers and browsers. With the advent of cloud computing, the cloud becomes another performance-impacting element in this chain.
Developers can leverage their expertise with existing tools to accurately assess the end-user experience on the other side of the cloud and to verify service quality. Armed with this knowledge, the developer is in a stronger position to understand the overall health of the cloud environment, and to influence deployment decisions like the selection of a data center, availability zone or Cloud region, or even a completely different cloud service provider.
Optimizing performance in the cloud, for free
The cloud offers several techniques to improve application performance for free. Developers need to recognize and understand these techniques, which can have a direct impact on their organization’s bottom line.
For example, domain sharding is a tried-and-true technique that performance-savvy Web developers are aware of. The technique involves fooling the end user’s browser into thinking that there’re more than one host serving up content, usually by setting up a CNAME. This causes the end user’s browser to create additional connections to what it thinks are other hosts, thereby enabling more objects to be downloaded in parallel, and often (but not always) results in a much better performance and experience for the end user.
In a traditional hosting environment, this technique has a drawback. It reduces the infrastructure’s effective capacity, enabling it to handle fewer end users (since each user is now making more simultaneous requests). The way around this is to throw more hardware, and potentially more network capacity, at the problem.
In the cloud, though, this same technique can be implemented at no additional cost, and with no impact on capacity. For example, implementing sharding using different Amazon S3 buckets to serve up static content could improve performance by 40% or more, but would not incur any additional cost. Sharding, in this case, increases the bandwidth usage, but not the volume of data. Amazon S3 charges by volume, not by bandwidth.
Implementing sharding the wrong way, without a good understanding of how resources are being priced and what the natural resource bottlenecks are, can result in either poor performance or elevated costs, or both.
So, whose job is it to make tradeoffs: IT operations’ or the developers’? With a keen understanding of application performance requirements, you should be closely involved in the evaluation and negotiations with cloud service providers.
Today, many cloud service providers offer perfunctory, “one-size-fits-all” service-level agreements promising, for example, certain uptime guarantees (such as 99.9%). But what does 99.9% uptime really mean to a cloud customer and its end users?
What it means is just that the cloud service provider’s servers are up and running. But the truth is that this has practically no correlation to how fast and reliable the customer’s application may be for its end users around the world.
Some vendors charge by CPU hour, some by RAM hour, and others by both. They all charge for bandwidth, but some are free inbound, some aren’t. Only the developer really knows how the application works and what types of resources it requires. By knowing the resource cost tradeoffs, you can build your applications with an eye on optimizing their performance/cost ratio.
What are the bottlenecks in your application: CPU, memory, I/O? Some of these resources are plentiful in the cloud, while others like I/O are incredibly difficult to isolate in a multi-tenant environment. While cloud service providers do their best to manage capacity, how can you be sure that the performance of your applications is not being negatively impacted by a “neighbor” that experiences a spike in traffic? Or if your cloud service provider’s data center is connected to enough carriers to ensure that acceptable redundancy and performance levels are maintained?
The key is to establish performance-focused SLAs with the right cloud service provider to meet your organization’s unique needs. Developers need to understand why they are using the cloud. Before actually diving down into deploying applications in the cloud, they have to ask themselves a very simple but incredibly important question: Why?
Ask yourself: Why do you want to move to the cloud? What are your goals? What do you hope to achieve? Some common reasons might be to shift capital expenses into operating expenses, improve end-user experience, or have more elasticity for handling peak traffic.
Once you understand your reasons, evaluate cloud providers based on your reasons for using the cloud, and your associated performance requirements and success criteria. Then, architect applications to take advantage of the cloud with those goals and cost structures in mind, and look for SLAs based on these performance requirements.
Clearly, before engaging any cloud service provider, you must make sure the provider can meet your unique performance requirements, and then build these requirements into your SLA.
Once this is done, the key to validating your success is to conduct ongoing tests and measurements from an end user’s perspective, all the way at the edge of the Internet. This is the only way to see first-hand which end-user segments may be experiencing performance degradation. You can then use this performance data to incite your cloud service providers to take the steps needed to meet and uphold their application and service-performance requirements.
Your good developers will have to extend their skills to encompass roles that were previously the domain of IT operations. Tossing an application over the wall to an ops team is no longer a viable option, and assuming that things will just work in production because they worked in a development environment will obviously not work.
As a development manager, part of your new expanding role will be to fully exploit performance optimization opportunities available in the cloud while helping to create a framework that delivers the strongest cloud performance at the best price.
Imad Mouline is CTO of Gomez, the Web performance division of Compuware.