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
- Global Cloud Hosting Service Market 2019 Industry Research, Segmentation, Key Players Analysis and Forecast to 2024 - News Midget - December 4th, 2019
- Logz.io Unveils First-Ever Open Source-Based Cloud Observability Platform Powered by ELK and Grafana - GlobeNewswire - December 4th, 2019
- 'Big 3' Public Cloud Providers: 4 Reasons Not to Use Them - ITPro Today - December 4th, 2019
- Global Managed Hybrid Cloud Hosting Market 2019 by Manufacturers, Countries, Type and Application, Forecast to 2025 - World Industry Reports - December 4th, 2019
- Join Us For The IBM i On The Public Cloud Webinar - IT Jungle - December 4th, 2019
- Amazon reveals new server chip to take on Intel - MyBroadband - December 4th, 2019
- SysGroup (LON:SYS) Hits New 1-Year Low at $33.50 - TechNewsObserver - December 4th, 2019
- How to match your IT workloads to the right cloud - TechBeacon - December 2nd, 2019
- Application modernisation in 2020 and beyond why businesses need to be ready now - CIO Australia - December 2nd, 2019
- Cloud Performance Varies Across the World, New Report Finds - ITPro Today - December 2nd, 2019
- Black Friday & Cyber Monday: These web hosting offers come only once a year - MyHostNews.com - November 30th, 2019
- HostNOC offering a big discount on its hosting and dedicated servers - Press Release - Digital Journal - November 30th, 2019
- Processing 30 billion images a month, heres how ImageKit delivers 98% of the optimised images in under 50 mil - YourStory - November 30th, 2019
- Cloud-based Database Market 2019 to Perceive Biggest Trend and Opportunity with Key Players Google, Amazon Web Services, IBM, Microsoft, Oracle,... - November 30th, 2019
- This Week in Jobs: We're one wild turkey - Technical.ly - November 30th, 2019
- Data Center Outsourcing and Hybrid Infrastructure Managed Services Market Revenue, Region Analysis, And Forecast 2024 - Space Market Research - November 30th, 2019
- Why Is Apple Trusted More Than Google? - Forbes - November 30th, 2019
- Ryuk ransomware attack on cloud hosting company affected 110 hospitals - TEISS - November 28th, 2019
- Embrace the Journey of Technological Transformation - CIOReview - November 28th, 2019
- Global Disaster Recovery-as-a-Service (DRaaS) Market 2018-2022 | Evolving Opportunities with IBM and iland | Technavio - Business Wire - November 28th, 2019
- Join In For The IBM i On The Public Cloud Webinar - IT Jungle - November 28th, 2019
- If tsoHost is lecturing us on sleep hygiene, Brit outfit really does have hosting back to front - The Register - November 28th, 2019
- DHA SDD Shifting Health IT Outlook for 2020 - GovernmentCIO Media - November 28th, 2019
- 4 Popular Types of Website Hosting That You Need to Know - India West - November 19th, 2019
- Is IT prepared for life in the fast lane of multi-cloud? - - Enterprise Times - November 19th, 2019
- How managed services and the cloud is driving innovation in asset heavy industries - CIO Australia - November 19th, 2019
- Salesforce and Microsoft Team Up to Improve Your Productivity - Tech.co - November 19th, 2019
- Business Cloud VoIP & UC Services Market:Clear Understanding of The Competitive Landscape and Key Product Segments - Heraldresearch - November 19th, 2019
- Cloud Leadership Summit 2019 successfully brings together leaders in the Indian cloud and hosting industry - Web Hosting | Cloud Computing |... - November 17th, 2019
- IBM and Bank of America Collaborating to Build a Fintech Public Cloud - Data Center Knowledge - November 17th, 2019
- Routed will host Xalam Analytics at cloud workshops in November - htxt.africa - November 17th, 2019
- Here are the winners of the UK IT Industry Awards 2019 - www.computing.co.uk - November 17th, 2019
- We're Stuck With the Tech Giants. But They're Stuck With Each Other. - International New York Times - November 17th, 2019
- WPMU DEV Hosting Review Managed WordPress Cloud Hosting - October 15th, 2019
- Cloud Hosting | Unlimited Cloud Hosting UK with SSD and ... - October 3rd, 2019
- The 5 Best Cloud Hosting Providers: Service On Cloud Nine ... - October 3rd, 2019
- 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