Read a recent article from a very active pundit and practitioner in the Cloud Computing space, Mike Kavis, titled "Architecting the Cloud: Testing performance in your cloud application."
In the article, Mike advocates a layered approach to testing cloud-deployed applications that makes a lot of sense, in terms of the kinds of performance testing you can actually do while the design and development lifecycle is going on. To summarize, this involves testing from the system roots up while the solution is firmed up in this order:
Infrastructure. Test performance of the cloud provider(s) to ensure they can sustain the needed load.
- Data. "it is time to analyze the impact of encryption, transformation, data
replication, and the various ways that data is being manipulated to
address security , compliance, reliability, and scalability
requirements."
- Business Logic. Interactions of services and processes.
- User experience. Does the application meet user needs?
[Image Source: Mike Kavis]
This is a solid approach for testing to happen while a "build from scratch" cloud-based project is being designed/developed. Testing the raw performance level of the infrastructure first is something worth validating early on, and so on up the stack, finally testing the business logic and application when they come together.
Mike talks about how covering the core performance of the cloud infrastructure early can mitigate risk at deployment: "... It would be very expensive to find performance issues from the lower
levels of the architecture at this point. That is why I recommend the
layered approach to performance testing. What I also like about this
approach is that you can start testing very early in the life cycle."
To expand on this discussion, one way to shorten this cycle is through Service Virtualization, which is the practice of simulating and modeling the behaviors and performance characteristics of components, business logic and even UIs in the cloud that are not yet available for live testing. This kind of virtualization can go a long way toward eliminating service and 3rd party system dependencies and bringing performance testing to bear much earlier in the process.
Then, after that rollout, there remains a continuous validation need. (Only so much you can cover in a blog, so this is a topic we'd like to see Mike address in a future post... por favor... : )
For instance, the infrastructure itself may behave differently under the kinds of data and usage variability in ways that you could never predict with the raw-traffic or user interface kinds of performance benchmarking. New versions of services can be introduced, the Cloud provider can do something that affects their performance -- the list of risks goes on and on. Continuously validating going forward is a way to ensure that there are no unintended consequences of change at any one of the above layers.
All in all, it is a nice development to see practitioners showing real architectures and methodology around Cloud Computing as it is being applied for the business, as opposed to continuously defining the space, so I'd recommend keeping up with future posts from Mike.