It's an all-too-familiar software lifecycle story: Teams don't pay attention to app performance until it's almost too late. Waiting to fix performance issues until failures occur is a problem no matter where the application is deployed. But when the app is hosted on the cloud, the likelihood of performance problems is even greater.
"As soon as you deploy to the cloud, you lose close control of that infrastructure," said Todd DeCapua, vice president of channel operations for Shunra Software, which sells virtualization tools for software testing. Cloud applications typically include three tiers: the front end, the middle tier and the database. "They can move at any time, anywhere, for any period of time," DeCapua noted, adding that "move" refers to the way cloud service providers automatically provision new instances to meet demand.
Stephen Pierzchala The best way to prevent performance problems is to take cloud issues into account early in the software lifecycle. That is notoriously difficult to accomplish, said Stephen Pierzchala, a technology strategist for Detroit-based Compuware Corp., which sells application performance management software. "Getting developers to factor in performance before they [write a line of code] is challenging," he said. "It's the biggest fight."
In this article, cloud performance experts offer best practices for addressing cloud application performance issues early in the software lifecycle.
Understand the complexity of the cloud infrastructure
Clouds apps are very complex. In addition to constant provisioning and deprovisioning of cloud instances, most of today's business applications rely on services delivered by the third parties, such as Google Analytics, said Pierzchala. "Any one of these services can impact performance. If your partner suffers a problem, you can't just flip a switch and make it better."
DeCapua said he is familiar with cloud-based banking applications that rely on hundreds of different services to deal with financial tasks such accessing credit scores, processing payments and others. "The cloud-hosted environment -- in New Jersey, for example -- makes calls to all of the distributed services at different locations and then back to the cloud in New Jersey." That has a huge impact on performance, he said.
When customers or employees who depend on the application can't get what they need, they don't care which service is causing the problem, Pierzchala said. "They are thinking, 'This thing is so slow. Why didn't I get my data?'"
That makes the company behind the application -- not the partner that caused the problem -- look bad, said voke analyst Theresa Lanowitz. "Application performance can make or break your brand."
Build resiliency into the application from the start of the software lifecycle
There is no magic bullet for gaining control over third-party services that applications call. But developers can architect apps in a way that makes it possible for application managers to turn off a service that causes a problem, Pierzchala said. "You need a fallback position -- you can turn off analytics, turn off ads, for example." Building in resiliency is not a perfect solution, but it's better than allowing the application to slow to a crawl or shut down completely, he said. Another proactive strategy is to use more than one cloud for the same application. "We choose Amazon because they're the big name." Spreading the application across several providers can be a way to hedge cloud performance bets, he said.
Get business executives to buy into cloud performance
The most effective strategy for boosting cloud performance involves defining application performance requirements early in the application lifecycle -- at the outset of a development project. Pierzchala admits that it's difficult to get software teams and business stakeholders to do this.
Nonetheless, he recommends establishing application performance as a nonfunctional requirement, where the software team specifies criteria by which performance can be measured. Pierzchala offered an example: "Our current app performance is X, based on these scenarios. This application must perform as at least as well as X -- ideally, 20% more."
The real challenge of this approach is getting the business stakeholders involved in the project to understand performance expectations for the cloud application. This means it's essential to educate all parties on the trade-offs required to meet those expectations. "If we add this new feature, it will impact performance," Pierzchala said. "Don't come to me in six months and say the app is too slow."
Factor performance into unit tests
DeCapua recommends that Agile development team members develop unit tests that factor in cloud performance. He offered an example -- a cloud application that relies on a credit check service (among others): "You have 1,000 concurrent users, a five-second response time at 40 transactions per second." As team members write stories -- that is, application requirements -- on cards, they should identify the performance piece on the back of the card, he said. Teams can use test virtualization services to simulate the cloud performance conditions specified by the unit test, he added.
Don't rely too heavily on service-level agreements
DeCapua noted that service-level agreements (SLA) are not an effective way to ensure acceptable performance for cloud applications because they don't address the root causes of cloud performance problems. He said executives have become increasingly skeptical of their value: "They have been burned by cloud SLAs." SLAs are about production monitoring, he said. When you're monitoring cloud applications in production, it's too late. "SLAs are not going to get back lost revenue, lost reputation."