All the monolithic applications are being decomposed into smaller components/systems and APIs and these are hosted on cloud. APIs present a unique challenge owing to many participants.
By 2020, 25% of the total IT systems is expected to be on cloud.
Today, approximately 80% of workloads are virtualized and around 70% organisations have presence or intent to adopt cloud strategy (IAAS, PAAS or SAAS).
Performance testing in Cloud Environments
We are moving away from monolithic performance engineering to cloud performance engineering with some aspects that should be done consciously and intentionally. Performance engineering on cloud is complex and difficult to manage than monolithic applications. Although, cloud is scalable but benchmarking, profiling and data analysis is very complicated due to multiple dependencies and increasing frequency of code changes.
Not all cloud migrations succeed; few reasons they fail are due to complexity around dependencies with existing applications, lack of good resources with service providers, diverse systems that cannot be automated, duplication of processes, business not embracing new technologies and silos between business and IT groups.
The Six prime pillars that should be part of Performance Engineering strategy for cloud applications should be –
- Shared Infrastructure
Shared Infrastructure on Cloud is the most important factor to consider. Co-tenants can use more resources (I/O, CPU, Bandwidth, Memory and other resources) that can impact user experience significantly. Many organisations can mitigate network precincts by private (dedicated tenancies) but virtualization risks will still exist and needs to be considered. Monitoring software’s (Ex: CloudWatch for AWS) should be utilized to capture, measure and provide insights for proactive management of issues that could arise.
Monitoring (Infrastructure and Application) is another key aspect to be considered. Monitoring of hardware and software on shared infrastructure is a necessity. Cloud native monitors, SaaS APM like Dynatrace, New Relic, Splunk, Solarwinds etc. can be used for monitoring of cloud resources. Cloud native monitors like Amazon Cloud Watch, GCE Stackdriver provide integration into existing monitoring dashboards.
Performance testing and tuning should be considered based on type of implementation, integration points, network stricture, IOPS and dataflow. Most applications are developed with FAAS (Function as a service) concept to support server less architecture that needs to be well understood. Today we have hook.io, AWS lambda, Openwhisk, Oracle Cloud Fn services, S3, BLOB, Ceph, Cloudstack storage services, DynamoDB, Redis & Cassandra DB services.
Resilience validation techniques should be part of strategy definition. For Recovery Point Objective (RPO) and Recovery Time Objective (RTO) validation, virtualisation techniques should be used. Data replication and synchronization should be regularly validated, Server provisioning should be automated (including self-healing) and Chaos tests to be performed on Micro-Services.
Security (Static Application Secure testing, Vulnerability and Penetration) testing should be performed at regular cadence. Developed code is deployed on shared infrastructure that should be protected against outside attacks, which can cause catastrophe.
Usability validation is another important aspect to be encapsulated in the test pipeline. Accessibility verification should be performed in an automated fashion, to ensure hosted applications comply with regulatory requirements.
To sum it all, if key facets of Performance Engineering on Cloud are considered fittingly, then success on achieving organisational goals is not far.