Cloud resources can be expensive, especially when you are forced to pay for resources that you dont need; on the other hand resource shortages cause downtimes. Whats a developer to do? In this article we will discuss techniques for determining the golden medium that lets you pay for just the resources you actually consume, without being limited as your application capacity requirements scale.
The first step to any solution of course is admitting that you have a problem. Below are some details on the issue that many cloud users face.
Almost every cloud vendor offers the ability to choose from a range of different VM sizes. Choosing the right VM size can be a daunting task; too small and you can trigger performance issues or even downtimes during load spikes. Over-allocate? Then during normal load or idle periods all unused resources are wasted. Does this scenario look familiar from your own cloud hosted applications?
And when the project starts growing horizontally, the resource inefficiency issue replicates in each instance, and so, the problem grows proportionally.
In addition, if you need to add just a few more resources to the same VM, the only way out with most of current cloud vendors is to double your VM size. See the sample of AWS offering below.
(Click on the image to enlarge it)
Exacerbating the problem, you need to incur downtime when you move, by stopping a current VM, performing all steps of application redeploy or migration, and then dealing with the inevitable associated challenges.
This shows that VMs are not quite flexible and efficient in terms of resource usage, and limits adjustment according to variable loads. Such lack of elasticity directly leads to overpaying.
If scale out is not helping to use resources efficiently, then we need to look inside our VMs for a deeper understanding of how vertical scaling can be implemented.
Vertical scaling optimizes memory and CPU usage of any instance, according to its current load. If configured properly, this works perfectly for both monoliths, as well as microservices.
Setting up vertical scaling inside a VM by adding or removing resources on the fly without downtimes is a difficult task. VM technologies provide memory ballooning, but its not fully automated, requiring tooling for monitoring the memory pressure in the host and guest OS, and then activating up or down scaling as appropriate. But this doesn't work well in practice, as the memory sharing should be automatic in order to be useful.
Container technology unlocks a new level of flexibility thanks to its out-of-box automatic resource sharing among containers on the same host, with a help of cgroups. Resources that are not consumed within the limit boundaries are automatically shared with other containers running on the same hardware node.
And unlike VMs, the resource limits in containers can be easily scaled without reboot of the running instances.
As a result, the resizing of the same container on the fly is easier, cheaper and faster than moving to larger VMs.
There are two types of containers application and system containers. An application container (such as Docker or rkt) typically runs in as little as a single process, whereas a system container (LXD, OpenVZ) behaves like a full OS and can run full-featured init systems like systemd, SysVinit, and openrc, that allow processes to spawn other processes like openssh, crond, or syslogd, together inside a single container. Both types support vertical scaling with resource sharing for higher efficiency.
Ideally on new projects you want to design around application containers from the ground up, as it is relatively easy to create the required images using publicly available Docker templates. But there is a common misconception that containers are good only for greenfield applications (microservices and cloud-native). The experience and use cases prove possibility to migrate existing workloads from VMs to containers without rewriting or redesigning applications.
For monolithic and legacy applications it is preferable to use system containers, so that you can reuse architecture, configuration, etc., that were implemented in the original VM design. Use standard network configurations like multicast, run multiple processes inside a container, avoid issues with incorrect memory limits determination, write on the local file system and keep it safe during container restart, troubleshoot issues and analyze logs in an already established way, use a variety of configuration tools based on SSH, and be liberal in relying on other important "old school" tasks.
To migrate from VMs, monolithic application topology should be decomposed into small logical pieces distributed among a set of interconnected containers. A simple representation of the decomposition process is shown in the picture below.
Each application component should be placed inside an isolated container. This approach can simplify the application topology in general, as some specific parts of the project may become unnecessary within a new architecture.
For example, Java EE WebLogic Server consists mainly of three kinds of instances required for running in a VM: administration server, node manager and managed server. After decomposition, we can get rid of the node manager role, which is designed as a VM agent to add/remove managed server instances, as now they will be added automatically by the container and attached directly to administration server using the container orchestration platform and a set of WLST (WebLogic Server Scripting Tool) scripts.
To proceed with migration, you need to prepare the required container images. For system containers, that process might be a bit more complex than for application containers, so either build it yourself or use an orchestrator like Jelastic with pre-configured system container templates.
And finally, deploy the project itself and configure the needed interconnections.
Now each container can be scaled up and down on the fly with no downtime. It is much thinner compared to virtual machines, so this operation takes much less time compared to scaling with VMs. And the horizontal scaling process became very granular and smooth, as a container can be easily provisioned from the scratch or cloned.
For scaling Java vertically, it is not sufficient to just use containers; you also need to configure the JVM properly. Specifically, the garbage collector you select should provide memoryshrinking in runtime.
Such GC packages all the live objects together, removes garbage objects, uncommit and releases unused memory back to the operation system, in contrast to non-shrinking GC or non-optimal JVM start options, where Java applications hold all committed RAM and cannot be scaled vertically according to the application load. Unfortunately, the JDK 8 default Parallel garbage collector (-XX:+UseParallelGC) is not shrinking and does not solve the issue of inefficient RAM usage by JVM. Fortunately, this is easily remedied by switching to Garbage-First (-XX:+UseG1GC).
Lets see the example below. Even if your application has low RAM utilization (blue in the graph), the unused resources cannot be shared with other processes or other containers as its fully allocated to the JVM (orange).
(Click on the image to enlarge it)
However, the good news for the Java ecosystem is that as of JDK 9, themodern shrinking G1 garbage collector is enabled by default. One of its main advantages is the ability to compact free memory space without lengthy GC pause timesand uncommit unused heap.
Use the following parameter to enable G1, if you use JDK lower than 9th release:-XX:+UseG1GC
The following two parameters configure the vertical scaling of memory resources:
Also, the application should periodically invoke Full GC, for example, System.gc(), during a low load or idle stage. This process can be implemented inside the application logic or automated with a help of the external Jelastic GC Agent.
In the graph below, we show the result of activating the following JVM start options with delta time growth of about 300 seconds:
-XX:+UseG1GC -Xmx2g -Xms32m
(Click on the image to enlarge it)
This graph illustrates the significant improvement in resource utilization compared to the previous sample. The reserved RAM (orange) increases slowly corresponding to the real usage growth (blue). And all unused resources within the Max Heap limits are available to be consumed by other containers or processes running in the same host, and not wasted by standing idle.
This proves that a combination of container technology and G1 provides the highest efficiency in terms of resource usage for Java applications in the cloud.
The last (but not least) important step is to choose a cloud provider with a "pay per use" pricing model in order to be charged only based on consumption.
Cloud computing is very often compared to electricity usage, in that it provides resources on demand and offers a "pay as you go" model. But there is a major difference - your electric bill doesnt double when you use a little more power!
Most of the cloud vendors provide a "pay as you go" billing model, which means that it is possible to start with a smaller machine and then add more servers as the project grows. But as we described above, you cannot simply choose the size that precisely fits your current needs and will scale with you, without some extra manual steps and possible downtimes. So you keep paying for the limits - for a small machine at first, then for one double in size, and ultimately horizontal scaling to several underutilized VMs.
In contrast to that, a "pay as you use" billing approach considers the load on the application instances at a present time, and provides or reclaims any required resources on the fly, which is made possible thanks to container technology. As a result, you are charged based on actual consumption and are not required to make complex reconfigurations to scale up.
(Click on the image to enlarge it)
But what if you are already locked into a vendor with running VMs, and youre paying for the limits and not ready to change it, then there is still a possible workaround to increase efficiency and save money? You can take a large VM, install a container engine inside and then migrate the workloads from all of the small VMs. In this way, your application will be running inside containers within the VM - a kind of "layer-cake", but it helps to consolidate and compact used resources, as well as to release and share unused ones.
Realizing benefits of vertical scaling helps to quickly eliminate a set of performance issues, avoid unnecessary complexity with rashly implemented horizontal scaling, and decrease cloud spends regardless of application type - monolith or microservice.
Ruslan Synytsky is CEO and co-founder of Jelastic, delivering multi-cloud Platform-as-a-Service for developers. He designed the core technology of the platform that runs millions of containers in a wide range of data centers worldwide. Synytsky worked on building highly-available clustered solutions, as well as enhancements of automatic vertical scaling and horizontal scaling methods for legacy and microservice applications in the cloud. Rich in technical and business experience, Synytsky is actively involved in various conferences for developers, hosting providers, integrators and enterprises.
See the original post:
Cost Reduction Strategies on Java Cloud Hosting Services - InfoQ.com
- VMware Cloud Hosting Services Provider | TrueNorth ITG - April 28th, 2019
- What is cloud hosting? | IBM Cloud - April 18th, 2019
- What is cloud hosting? - Definition from WhatIs.com - April 18th, 2019
- What is Cloud Hosting and What Are the Benefits - April 18th, 2019
- How will cloud hosting affect your SEO campaign? | The Drum - April 18th, 2019
- Cloud Hosting Services | Steadfast - April 18th, 2019
- The Best Cloud Web Hosting Services for 2019 | PCMag.com - April 12th, 2019
- Web Hosting - Hosting Ireland Provides Web Hosting ... - March 23rd, 2019
- ZOOM Web Hosting and Domain Registration Philippines is a ... - March 13th, 2019
- Hostway and HOSTING Merge, Creating One of the Largest ... - March 8th, 2019
- 7 Best Managed Cloud Hosting Providers of 2018 - WPMyWeb - March 2nd, 2019
- Cloud Hosting vs. Shared Hosting Comparison | HostGator - March 2nd, 2019
- Shared Web Hosting Plans - Fast & Secure Shared Hosting ... - February 15th, 2019
- Cloud Hosting Services | Cloud and Hosting | Sungard AS - February 8th, 2019
- 10 Best Cloud Hosting Service in 2019 - AppModo - January 21st, 2019
- Best Cloud hosting January 2019 | WebHostingGeeks - January 21st, 2019
- Cloud Products & Services | HOSTING - January 11th, 2019
- Cloud Hosting - Super Powerful and Fully Redundant | TMDHosting - January 11th, 2019
- Cloud Hosting Services - Secure Managed Cloud Hosting - Bluehost - October 26th, 2018
- Indias Best Cloud Hosting | Cloud Servers | Cloud Service ... - October 16th, 2018
- QuickBooks Hosting Fast, Secure Cloud Hosting | Ace Cloud ... - October 2nd, 2018
- Cloud Services - Deploy web apps & APIs | Microsoft Azure - October 2nd, 2018
- HIPAA Compliant Cloud Hosting Services - atlantic.net - September 15th, 2018
- 2018's Best "Cloud Hosting" Providers | 100% Real Reviews - September 15th, 2018
- Best Cloud Hosting Providers of 2018 | HostAdvice - August 27th, 2018
- Shared Hosting vs Cloud Hosting - How To Start A Blog - August 27th, 2018
- 10 Best Cloud Server Hosting Providers (2018): Top Cloud ... - August 21st, 2018
- Google Cloud IoT Reviews and Pricing - 2018 - July 12th, 2018
- Cloud Hosting Plans - Secure & Scalable Services | HostGator - May 18th, 2018
- Best cloud hosting providers in 2018 | TechRadar - May 14th, 2018
- Cloud Hosting - Cloud - Windows - March 2nd, 2018
- Cloud Servers | Cloud Hosting | Web Hosting - Cirrus Hosting - February 20th, 2018
- Managed Dedicated, Cloud and Hosting Services - February 20th, 2018
- What is Cloud Hosting? | Web Hosting Sun - February 12th, 2018
- Cloud Hosting - Managed Cloud Services - January 9th, 2018
- Cloud Hosting by Perry Hosting - December 11th, 2017
- What Is Cloud Hosting? | GoDaddy - YouTube - December 11th, 2017
- Linux VPS | Best Managed Linux Cloud Hosting - RoseHosting - November 24th, 2017
- Cloud hosting platforms. Part one: Pantheon | ADCI Solutions - November 24th, 2017
- Get to know Linode, the new (big) kid in town - Technical.ly - September 7th, 2017
- 500 Cloud Operators, Managed Service Companies and Hosters to Gather at the 13th Annual Hosting & Cloud ... - Benzinga - September 7th, 2017
- Cloud ERP: The rising alternative to hosting your own - Networks Asia - September 7th, 2017
- Melbourne Server Hosting Renamed to iomart - Web Host Industry Review - September 6th, 2017
- Cloud ERP: The rising alternative to hosting your own - CIO Australia - September 6th, 2017
- Dean Dorton Technology named to Sage Intacct President's Club, Rookie of the Year and New Partner of the Second ... - The Lane Report - September 6th, 2017
- Microsoft Signs Deal to Put More Apps on Huawei's Cloud in China - eWeek - September 6th, 2017
- Cloud Hosting Providers CommsTrader's UK Channel Guide 2017 - CommsTrader - September 5th, 2017
- Huawei announces Microsoft cloud apps partnership - ZDNet - September 5th, 2017
- Trump Effect Could Cost US Cloud Providers Over $10 Billion: Report - Web Host Industry Review - September 2nd, 2017
- Cloud Native The Perfect Storm for Managed SD-WAN Services - Network World - August 30th, 2017
- Why 2017 is the Year to Understand Cloud Computing - Business 2 Community - August 28th, 2017
- President Trump Could Cost US Cloud Computing Providers More Than $10 billion by 2020 - The Data Center Journal - August 28th, 2017
- What You NEED To Look For In A Cloud Hosting SLA - TG Daily (blog) - August 27th, 2017
- President Trump Could Cost US Cloud Computing Providers More ... - The Data Center Journal - August 27th, 2017
- State of Cloud - 2017 - Read IT Quik - August 22nd, 2017
- President Trump could cost US cloud computing providers more than $10 billion by 2020 - Bdaily - August 22nd, 2017
- Microsoft No Longer a PC Company with Deals Like Halliburton, Says Credit Suisse - Barron's - August 22nd, 2017
- Did Snap Make a Mistake With Its $3 Billion in Cloud Contracts? - Madison.com - August 21st, 2017
- Right Networks continues focus on tech improvement with new CIO - Accounting Today - August 21st, 2017
- Altinity Provides Cloud Version of ClickHouse on Kodiak Data MemCloud - Markets Insider - August 21st, 2017
- NASA calls on cloud for online eclipse streaming - GCN.com - August 21st, 2017
- Cloud Hosting Reviews and Comparisons | Cloud Hosting Directory - August 19th, 2017
- Free cloud hosting: comparing the top providers offer - August 19th, 2017
- Microsoft Expands HPC Cloud Portfolio With Cycle Computing Acquisition - eWeek - August 19th, 2017
- UC San Diego Health: Moving Its EHR to the Cloud, Strategically - Healthcare Informatics - August 19th, 2017
- Rackspace's first in-house attorney for international moves on - San Antonio Business Journal - August 19th, 2017
- Microsoft Acquires Cycle Computing to Bulk Up its HPC Cloud Services - eWeek - August 18th, 2017
- Massive Potential Attracts International Players to Iran's Cloud Computing Market, Despite Challenges - PR Newswire (press release) - August 18th, 2017
- These Inventors Need To Conquer Cryptocurrency To Change Cloud Computing - Celebrity Net Worth - August 18th, 2017
- 360 Cloud Solutions now offers Adaptive Insights - Accounting Today - August 18th, 2017
- Hackers breach third party cloud vendor TekLinks - Healthcare IT News - August 18th, 2017
- Stronger security and disaster planning fuel healthcare's migration to the cloud - Healthcare IT News - August 16th, 2017
- Hackers hit dermatology practice through cloud vendor - Information Management - August 16th, 2017
- Hackers hit dermatology practice through cloud vendor - Health Data Management - August 15th, 2017
- Unisecure Hybrid Cloud Hosting Introduces New Integration And Collaboration Support. - HostReview.com (press release) - August 14th, 2017
- CenterGrid Names Kevin Westendorf As Chief Technology Officer - Markets Insider - August 14th, 2017
- Earth911.com - Earth911.com - August 14th, 2017
- Commerce Department Plans to Move Cybersecurity to the Cloud - FedTech Magazine - August 13th, 2017
- Snap CEO Evan Spiegel Makes A Case For Slow User Growth - Fortune - August 11th, 2017
- RiverMeadow and WSM Announce Agreement to Facilitate Cloud Migrations - GlobeNewswire (press release) - August 11th, 2017