Many IT departments are feeling an extraordinary amount of pressure lately to move applications to the cloud. This pressure often comes from those who are anxious to capitalize on the vast savings advertised by cloud service providers. Without proper performance monitoring, though, you may be left in the dust.
Although there is no denying that running applications in the cloud can save money -- especially in the form of startup costs -- some organizations are beginning to discover that the cloud experience isn't always all that it's cracked up to be.
As cloud technology begins to mature, security and availability become higher priorities. And although cloud performance can be just as important, it is sometimes overlooked.
The bottom line is that your users neither know nor care where an application is running. They expect the application to perform just as well in the cloud as it did when it was hosted in your data center.
Cloud performance monitoring 101
So how can you ensure adequate cloud performance? This simple question can actually be very difficult to answer. Odds are that the performance monitoring tools that you used when the application was being hosted in your local data center will not work in a cloud environment.
First of all, you can't depend on your cloud service provider when it comes to performance monitoring. Typically, service providers will not even address the issue of cloud performance within their service-level agreements (SLAs). These types of agreements usually cover service availability but not application performance.
There are some providers that will give you cloud performance benchmarks for your hosted applications. The problem is that this benchmarking data probably does not accurately reflect the end-user experience.
Think about it for a moment: Have you ever heard a cloud service provider advertise that your application is going to perform better than it does now once you move that application to the cloud? Of course not. Cloud service providers know that no matter how good their data centers are, there is nothing that they can do about Internet latency.
So if a cloud service provider gives you performance benchmarking data, it’s likely that the data was collected from within the service provider’s own data center. If that’s the case, it probably does not take Internet latency into account.
Even if a service provider does try to account for Internet latency, geographic proximity to the data center can make a huge difference in end-user experience. Unless a service provider actually measures your application’s performance from your facility, then the performance data that they provide probably won’t accurately represent true cloud performance.
So how can you address cloud performance monitoring? The truth is that there is no one-size-fits-all solution. Each cloud provider exposes different parts of its network infrastructure. As a result, a solution that works with one cloud provider may not work with another.
Cloud monitoring options depend on your cloud
Your options for cloud monitoring depend on what type of cloud you are using. The three main types of clouds used for hosting applications include:
- Infrastructure as a Service (Iaas): When an organization subscribes to an IaaS cloud, it is typically given access to a virtual server and a storage pool. IaaS clouds such as Amazon’s EC2 provide the greatest opportunities for performance monitoring because you have full access to the server’s operating system and to the applications that are running on it.
- Platform as a Service (PaaS): Clouds such as Google App Engine are platforms for running Web based applications. Although it is sometimes possible to build performance metrics into a Web application, PaaS clouds do not provide access to the underlying operating system.
- Software as a Service (SaaS): These types of clouds allow organizations to run commercial SaaS applications such as Salesforce.com or Microsoft Exchange in a hosted environment. Although the hosting provider may give you access to performance reports in some cases, there are few options for gathering your own performance metrics.
If the application that you need to monitor was developed in-house, then one of the most effective techniques for monitoring the application’s performance is to have its developers create an agent that can be embedded into the application. The general idea is for the agent to note the time just before phoning home. When the agent’s transmission is received, the time stamp on the transmission can be compared against the time when the transmission was received, which will allow you to measure latency.
Cloud monitoring tools
If you happen to have an application that is coded in Java, you don't have to worry about the hassles of developing a custom agent. There are at least two software publishers that offer Java-based code for cloud performance monitoring. One is AppDynamics 3.0, which is designed to monitor distributed Java-based applications in the cloud. The software tool provides a dashboard for tracking cloud performance and helps to isolate the cause of any problems that may be detected. AppDynamics also detects memory leaks in real time and locates their sources.
Another tool that exists for monitoring applications in the cloud is New Relic, which works with Ruby, Java, PHP and .NET applications. Two features make New Relic unique. First, it is designed to be simple to deploy. The other is that the basic monitoring solution is free. If you also need diagnostic and optimization capabilities, New Relic offers those tools for a fee.
AppDynamics and New Relic are suitable for use with IaaS and PaaS clouds, but they do not work with SaaS. But another application called FactFinder from BlueStripe Software is said to work with any application, regardless of whether it is a packaged application like Microsoft Exchange or a custom app that was developed in-house.
FactFinder works by using protocol-level visibility into each node that is involved in running a distributed application. By monitoring packets on a hop-by-hop basis, FactFinder is able to create a map of the infrastructure that is running the distributed application and is able to locate bottlenecks when performance problems occur.
Regardless of which method you use for performance monitoring of cloud applications, it is critically important that you measure the data in a uniform manner. Unless you are consistent with your choice of metrics and the tools that you use, the historical performance data you collect will be meaningless.