Many organizations look to cloud space because of the capability it offers to rapidly scale both up and down to meet changing demands on their resources. The options available when provisioning assets in the cloud range from required CPU and memory, availability, network capacity, storage type and capacity, and plenty of others, all of which should be considered carefully when provisioning the resource.
A common practice for organizations is to provision systems at a pre-determined baseline and plan for scaling that will meet increased demand and revert back to the baseline when the demand falls off. This does well to meet the needs of the users, can be automatically configured, and helps keep costs down when the demand is not at peak. While this strategy addresses the potential for increased demand, it fails to account for the potential of over-provisioning when determining your initial resource baseline.
A great technique to combat this is to conduct quarterly or semi-annual reviews of your resource usage to identify under-utilized resources. Using data visualization tools such as Grafana, Kibana, and Splunk, you can ingest the data from the native cloud monitoring tools to identify where the baseline provisioning, or the resources assigned when the system is operating at normal demand, may be too high. Using that data, your team can make adjustments to the way they provision new resources and modify existing resources to reduce waste. Recurring reviews allow for new systems to come online and establish a baseline, which can then be used to identify trend data. It also provides a means to ensure the changes you are making are having the desired changes in utilization (and reduced costs), without causing excessive strain on the resources.
The most common area to find this type of over-provisioning is in storage, for example provisioning 100GB of storage for a Linux Application Server that only requires 30GB to operate and utilizes a database for application data. Many cloud engineers provision storage for a system liberally because storage is relatively cheap in the cloud. The above example is a difference of around 5 USD/month per system for basic block storage, so it may not appear to be too egregious on the surface. However, in an organization with hundreds or thousands of systems operating in their cloud environment, the cost of all that wasted space can add up quickly and spiral out of control when scaling is configured to execute automatically to meet increased demand. An analysis conducted for a client last year identified this type of over-provisioning had been done for several hundred systems within their environment. Simply adjusting how their storage was being provisioned reduced their monthly cloud costs by over 20%.
Other areas where resources are commonly over-provisioned and under-utilized are CPU and memory. Most of the time, this is driven by recommended system requirements from manufacturers and may not be as easy to reduce even after they are identified. Instead of trying to guess how far below minimum requirements you can go to save money in these instances, look at the type of systems being provisioned, and the way you are deploying your applications. Often times, under-used CPU and memory are a clear indicator of an opportunity to use serverless computing, such as Lambda, or leverage containerization.
By Jon Cook, Technical SME