{"id":22365,"date":"2025-06-12T10:52:06","date_gmt":"2025-06-12T10:52:06","guid":{"rendered":"https:\/\/www.adenlab.com\/reduce-your-infrastructure-costs-with-auto-scaling\/"},"modified":"2025-11-11T12:05:28","modified_gmt":"2025-11-11T12:05:28","slug":"reduce-your-infrastructure-costs-with-auto-scaling","status":"publish","type":"post","link":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/","title":{"rendered":"Reduce your infrastructure costs with auto-scaling"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"22365\" class=\"elementor elementor-22365 elementor-20280\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14e1f94 e-flex e-con-boxed e-con e-parent\" data-id=\"14e1f94\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3424a0b noted_content elementor-widget elementor-widget-text-editor\" data-id=\"3424a0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\n<p><script src=\"https:\/\/platform.linkedin.com\/in.js\" type=\"text\/javascript\"> <\/script> <script type=\"IN\/FollowCompany\" data-id=\"35547327\" data-counter=\"bottom\"><\/script><\/p>\n<p><\/p>\n<p>The cloud is everywhere, and we hear about it on every street corner. Chances are, you or your company use a cloud service in one way or another (AWS, Google Cloud, to name but two). <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-60d0b45 e-flex e-con-boxed e-con e-parent\" data-id=\"60d0b45\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-700a5f7 elementor-widget elementor-widget-text-editor\" data-id=\"700a5f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you use it intensively (several machines running continuously), you may be interested in auto-scaling.<\/p>\n<p>Auto-scaling allows you to add or remove machines as needed, in near-real time. For example, when user traffic increases dramatically and your servers are underwater, auto-scaling lets you add machines to free up the load on existing servers, reduce response times for your users and maintain the quality of service you offer. <\/p>\n<p>Without auto-scaling, the opposite problem also exists: in off-peak periods, your machines have nothing to do, but you pay them anyway.<\/p>\n<p>This is of course good for the Cloud platform you&#8217;re using, but not so good for you.<\/p>\n<p>At Adenlab we use Google Cloud, and of course we use auto-scaling. The need is as follows: at night, we import data from your Google Ads, Analytics, Amazon, Bing, etc. accounts. <\/p>\n<p>We learn from this data (machine learning), calculate new bids for your products, and update them on the relevant platforms. And we do so much more! All this every night.  <\/p>\n<p>Each of these operations has specific requirements in terms of volume and machine power. For example, we have some powerful machines for machine learning, and many less powerful machines for updating auctions. <\/p>\n<p>Having so many full-time machines would be a net loss of budget, since most of them have nothing to do during the day. We therefore group these machines according to their type (power, etc.) into groups, called Auto-Scaling Groups. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-188d658 e-con-full category-data e-flex e-con e-child\" data-id=\"188d658\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4d2e2c elementor-widget elementor-widget-heading\" data-id=\"d4d2e2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Auto-Scaling Groups<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd03200 elementor-widget elementor-widget-text-editor\" data-id=\"cd03200\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Auto-scaling groups (ASGs) are used to group machines of the same type under the same auto-scaling policy.<\/p>\n<p>By default in Google Compute Engine (GCE), you can choose to scale according to CPU or memory usage. Using the Stackdriver monitoring tool, you can create custom metrics to increase or decrease the number of machines. <\/p>\n<p>Unfortunately, it&#8217;s impossible to automatically scale an ASG to zero, i.e. to cut all the machines in the group. This is quite logical, since in the absence of a machine we would no longer receive any metrics (CPU or other) leading to re-scale again. <\/p>\n<p>In our case, many of our machines work at specific times of the day, usually for 8 to 10 hours at a time, and will have nothing to do for the rest of the day. Here&#8217;s an example of how our auto-scaling policy works: <\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignleft size-full wp-image-20306\" src=\"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph.webp\" alt=\"\" width=\"1600\" height=\"840\" srcset=\"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph.webp 1600w, https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph-300x158.webp 300w, https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph-1024x538.webp 1024w, https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph-768x403.webp 768w, https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/autoscalinggraph-1536x806.webp 1536w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/p>\n<p>We have a machine that does nothing for almost 2\/3 of the day.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8d1f511 e-con-full category-data e-flex e-con e-child\" data-id=\"8d1f511\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8df3426 elementor-widget elementor-widget-heading\" data-id=\"8df3426\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Auto-scaler to machine zero<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aca1755 elementor-widget elementor-widget-text-editor\" data-id=\"aca1755\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Of course, we&#8217;d like to avoid having to pay for a useless machine. We&#8217;ll see that there&#8217;s a way to have zero machines and still have an automatic scaling system.<\/p><p>However, there is one prerequisite: we need a way of knowing when it&#8217;s time to scale up again.<\/p><p>At <a href=\"https:\/\/www.adenlab.com\/en\/\" rel=\"noopener\">Adenlab<\/a> we use a taskqueue<a href=\"https:\/\/github.com\/pricingassistant\/mrq\" rel=\"noopener\">(MRQ<\/a>) for our recurring jobs. MRQ allows us to route our jobs to specific worker groups, depending on the queue and\/or the task itself. Each worker group is linked to an ASG, so we have a clear metric here: for a given ASG, do we have any jobs queued?<\/p><p>With all this, we can use the following ASG structure:<\/p><p><strong>A small (read: inexpensive) machine that will always be up (not self-leveling)<\/strong><\/p><p><strong>One or more ASGs, without auto-scaling policy<\/strong><\/p><p>By creating an ASG without an auto-scaling policy, GCE will let us scale to zero machines if we want. On our little machine, we&#8217;ll have a script that runs every 5 minutes and checks each MRQ worker group for jobs to process.<\/p><p>If this is the case, the script will create an auto-scaling policy for the worker group concerned, and scale it up to 1 machine. The auto-scaler can then add additional machines as required, depending on the base metric configured (in our case, CPU utilization).<\/p><p>Let&#8217;s write an MRQ task for this script. Already the necessary imports :<\/p><pre><code class=\"language-python\">from mrq.task import Task\nfrom google.oauth2 import service_account\nfrom googleapiclient import discovery\nimport time\nimport re<\/code><\/pre><p>First, we need to configure a few parameters concerning GCP :<\/p><pre><code class=\"language-python\">class ScaleUp(Task):\n    project_name = \"name of your GCP project\"\n    zone = \"europe-west1-c\" # adapt your zone here\n    service_account_path = \"service_account_credentials.json\"\n    # groups that are not concerned by this task\n    groups_to_skip = (\"group1\",)<\/code><\/pre><p>Add to <em>groups_to_skip <\/em>the worker groups that should not be auto-scalated: at least add the group of the machine that will unstack this task.<\/p><p>Now let&#8217;s write the main method of our task:<\/p><pre><code class=\"language-python\">def run(self, params):\n    credentials = service_account.Credentials               \n        .from_service_account_file(\n            self.service_account_path\n        )\n     \n    self.service = discovery.build(\n        \"compute\", \n        \"v1\", \n        credentials=credentials, \n        cache_discovery=False\n    )\n    # We need to have a way to know what we want our different\n    # autoscaling policies to be.\n    # We could store them in a DB and fetch them here,\n    # so that it is shared with our Ansible playbooks for instance.\n    # For simplicity here we'll just hardcode them here:\n    self.autoscaler_configs = {\n        \"group2\": {\n            \"min_replicas\": 1,\n            \"max_replicas\": 10,\n            \"cooldown\": 180,\n            \"cpu_target\": 0.80\n        },\n        \"group3\": {\n            \"min_replicas\": 1,\n            \"max_replicas\": 8,\n            \"cooldown\": 180,\n            \"cpu_target\": 0.90\n        }\n    }\n    # First we need to fetch existing ASGs\n    self.fetch_groups()\n    # Next we want to know which groups currently have an autoscaler\n    self.fetch_autoscalers()\n    # Check each groups and see if we should scale them up\n    self.check_groups()<\/code><\/pre><p>Here&#8217;s how to retrieve ASG information:<\/p><pre><code class=\"language-python\">def fetch_groups(self):\n    self.groups = {}\n    request = self.service.instanceGroupManagers() \n                          .list(\n                            project=self.project,\n                            zone=self.zone\n                          )\n    while request is not None:\n       response = request.execute()\n       for asg in response['items']:\n           group_name = asg[\"baseInstanceName\"]\n           self.groups[group_name] = {\n                \"base_name\": group_name,\n                \"name\": asg[\"name\"],\n                \"size\": asg[\"targetSize\"],\n                \"link\": asg[\"selfLink\"]\n            }\n       request = self.service.instanceGroupManagers() \n                             .list_next(\n                               previous_request=request,\n                               previous_response=response\n                             )<\/code><\/pre><p>We hydrate <em>self.groups <\/em>with ASG information. <span data-sheets-root=\"1\">For more information, see the <a class=\"in-cell-link\" href=\"https:\/\/cloud.google.com\/compute\/docs\/reference\/rest\/v1\/instanceGroupManagers\" target=\"_blank\" rel=\"noopener\">ASG structure<\/a>.<\/span><\/p><p>Now let&#8217;s take a look at the code we&#8217;ll use to create an autoscaler for a given worker group:<\/p><pre><code class=\"language-python\">def create_autoscaler(self, group):\n    autoscaler_config = self.autoscaler_configs[group]\n    config = {\n        \"target\": self.groups[group][\"link\"],\n        \"name\": \"%s-as\" % group,\n        \"autoscalingPolicy\": {\n            \"minNumReplicas\": autoscaler_config[\"min_replicas\"],\n            \"maxNumReplicas\": autoscaler_config[\"max_replicas\"],\n            \"coolDownPeriodSec\": autoscaler_config[\"cooldown\"],\n            \"cpuUtilization\": {\n               \"utilizationTarget\": autoscaler_config[\"cpu_target\"]\n            }\n        }\n    }\n    operation = self.service.autoscalers().insert(\n        project=self.project,\n        zone=self.zone,\n        body=config\n    )\n    wait_for_operation(operation)<\/code><\/pre><p>You can find the <em>wait_for_operation<\/em> code in this <a href=\"https:\/\/github.com\/GoogleCloudPlatform\/python-docs-samples\/blob\/master\/compute\/api\/create_instance.py\" rel=\"noopener\">example<\/a>.<\/p><p>The last thing we need is a method for scaling up an ASG:<\/p><pre><code class=\"language-python\">def scale_up(self, group, size=1):\n    if self.groups[group][\"size\"] &gt; 0:\n        # Already scaled up\n        return\n    # Make sure we have an autoscaler\n    if not self.autoscalers.get(group):\n       self.create_autoscaler(group)\n    operation = self.service.instanceGroupManagers().resize(\n        project=self.project,\n        zone=self.zone,\n        instanceGroupManager=self.groups[group][\"name\"],\n        size=size\n    )\n    wait_for_operation(operation)<\/code><\/pre><p>The final logic of our task is quite simple:<\/p><pre><code class=\"language-python\">def check_groups(self):\n    # Now we have everything we need for the actual task logic:\n    for group in self.groups:\n    if group in self.groups_to_skip:\n        continue\n    if self.should_scale_up(group):\n        self.scale_up(group)<\/code><\/pre><p><em>should_scale_down<\/em> is the method that should contain your scaling logic. We don&#8217;t provide it here, but remember that in our case it&#8217;s a question of checking whether or not we have jobs waiting to be processed.<\/p><p>This task is scheduled to run every 5 minutes. This is convenient for our use case, because even if there are no pending jobs, a team member can perform an action at any time, which will result in the creation of a new job.<\/p><p>We don&#8217;t want to have to wait too long for it to be started. Of course, for any user actions that create jobs and are supposed to get a quick response, we need a dedicated machine that&#8217;s always up.<\/p><p>In most cases, however, it&#8217;s best to avoid asynchronous tasks for user interactions that require feedback.<\/p><p>So now we can scale up a machine when we need it, and GCE will take over if we need more. But we also need a way to scale down to zero when we don&#8217;t need it again!<\/p><p>To do this, we have a second task, running every 30 minutes, which will execute the same code as the first, with the difference that it will remove the autoscaler and scale to 0 machines if there are no pending jobs.<\/p><p>We can inherit our new task from the previous one, so that we have all the methods we need to communicate with GCP :<\/p><pre><code class=\"language-python\">class ScaleDown(ScaleUp):<\/code><\/pre><p>We also need some new methods to scale down:<\/p><pre><code class=\"language-python\">def delete_autoscaler(self, group):\n    autoscaler = self.autoscalers[group]\n    operation = self.service.autoscalers().delete(\n        project=self.project,\n        zone=self.zone,\n        autoscaler=autoscaler[\"name\"]\n    )\n    wait_for_operation(operation)\n    \ndef scale_down(self, group):\n    if self.groups[group][\"size\"] == 0:\n        # Already scaled down\n        return\n    # Delete the autoscaler so that we can scale to zero machine\n    if self.autoscalers.get(group):\n      self.delete_autoscaler(group)\n    operation = self.service.instanceGroupManagers().resize(\n        project=self.project,\n        zone=self.zone,\n        instanceGroupManager=self.groups[group][\"name\"],\n        size=0\n    )\n    wait_for_operation(operation)\n    \ndef check_groups(self):\n \n    for group in self.groups:\n        if group in self.groups_to_skip:\n            continue\n        if self.should_scale_down(group):\n            self.scale_down(group)<\/code><\/pre><p>When we know there are no more pending jobs, we remove the autoscaler and scale down completely. Again, <em>should_scale_down <\/em>contains the scale down logic to be implemented.<\/p><p>The positive side of this approach is that we can have several scaling criteria. For example, to avoid scaling up and down several times in a row too close together, we can also check that a certain amount of time has elapsed without a job being created before scaling down.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4a1bbb8 e-con-full category-data e-flex e-con e-child\" data-id=\"4a1bbb8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7ac80e5 elementor-widget elementor-widget-heading\" data-id=\"7ac80e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd5439d elementor-widget elementor-widget-text-editor\" data-id=\"dd5439d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We have seen that by deleting the autoscaling policy, we can delete all the machines in an instance group.<\/p>\n<p>We&#8217;ve written an autoscaling task that uses custom logic to determine whether a group should be up (1 machine) or down (0 machine).<\/p>\n<p>The disadvantage is that we have to have a separate machine, always up and ready to unpack our autoscaling task.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The cloud is everywhere, and we hear about it on every street corner. Chances are, you or your company use [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":20283,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[83],"class_list":["post-22365","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","tag-analytics-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Autoscaling: how does it work and what are the advantages? | Adenlab<\/title>\n<meta name=\"description\" content=\"Discover auto-scaling and how it can optimize your cloud resources. Automatically add or remove machines as needed.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reduce your infrastructure costs with auto-scaling\" \/>\n<meta property=\"og:description\" content=\"Discover auto-scaling and how it can optimize your cloud resources. Automatically add or remove machines as needed.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/\" \/>\n<meta property=\"og:site_name\" content=\"Adenlab\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Adenlab.Agency\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-12T10:52:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-11T12:05:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1333\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Adenlab Adenlab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@adenlab\" \/>\n<meta name=\"twitter:site\" content=\"@adenlab\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adenlab Adenlab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Autoscaling: how does it work and what are the advantages? | Adenlab","description":"Discover auto-scaling and how it can optimize your cloud resources. Automatically add or remove machines as needed.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/","og_locale":"en_US","og_type":"article","og_title":"Reduce your infrastructure costs with auto-scaling","og_description":"Discover auto-scaling and how it can optimize your cloud resources. Automatically add or remove machines as needed.","og_url":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/","og_site_name":"Adenlab","article_publisher":"https:\/\/www.facebook.com\/Adenlab.Agency\/","article_published_time":"2025-06-12T10:52:06+00:00","article_modified_time":"2025-11-11T12:05:28+00:00","og_image":[{"width":2000,"height":1333,"url":"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp","type":"image\/webp"}],"author":"Adenlab Adenlab","twitter_card":"summary_large_image","twitter_creator":"@adenlab","twitter_site":"@adenlab","twitter_misc":{"Written by":"Adenlab Adenlab","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#article","isPartOf":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/"},"author":{"name":"Adenlab Adenlab","@id":"https:\/\/www.adenlab.com\/en\/#\/schema\/person\/0c4e95886f0c8eed2d6a80d5bde719c0"},"headline":"Reduce your infrastructure costs with auto-scaling","datePublished":"2025-06-12T10:52:06+00:00","dateModified":"2025-11-11T12:05:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/"},"wordCount":1187,"publisher":{"@id":"https:\/\/www.adenlab.com\/en\/#organization"},"image":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp","keywords":["Analytics"],"articleSection":["Tendances"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/","url":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/","name":"Autoscaling: how does it work and what are the advantages? | Adenlab","isPartOf":{"@id":"https:\/\/www.adenlab.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#primaryimage"},"image":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp","datePublished":"2025-06-12T10:52:06+00:00","dateModified":"2025-11-11T12:05:28+00:00","description":"Discover auto-scaling and how it can optimize your cloud resources. Automatically add or remove machines as needed.","breadcrumb":{"@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#primaryimage","url":"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp","contentUrl":"https:\/\/www.adenlab.com\/wp-content\/uploads\/2025\/06\/New-Project-1-.webp","width":2000,"height":1333,"caption":"Ladder Climb"},{"@type":"BreadcrumbList","@id":"https:\/\/www.adenlab.com\/en\/reduce-your-infrastructure-costs-with-auto-scaling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Adenlab","item":"https:\/\/www.adenlab.com\/en\/"},{"@type":"ListItem","position":2,"name":"Trends","item":"https:\/\/www.adenlab.com\/en\/category\/trends\/"},{"@type":"ListItem","position":3,"name":"Reduce your infrastructure costs with auto-scaling"}]},{"@type":"WebSite","@id":"https:\/\/www.adenlab.com\/en\/#website","url":"https:\/\/www.adenlab.com\/en\/","name":"Agence Data Marketing des Ecommerces | Agence Google Ads | R\u00e9f\u00e9rencement Naturel | Agence Social Ads | Retail Media","description":"https:\/\/www.adenlab.com\/","publisher":{"@id":"https:\/\/www.adenlab.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.adenlab.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.adenlab.com\/en\/#organization","name":"Adenlab","url":"https:\/\/www.adenlab.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.adenlab.com\/en\/#\/schema\/logo\/image\/","url":"","contentUrl":"","caption":"Adenlab"},"image":{"@id":"https:\/\/www.adenlab.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Adenlab.Agency\/","https:\/\/x.com\/adenlab","https:\/\/www.linkedin.com\/company\/adenlab","https:\/\/www.tiktok.com\/@adenlab__","https:\/\/www.instagram.com\/adenlab__\/"]},{"@type":"Person","@id":"https:\/\/www.adenlab.com\/en\/#\/schema\/person\/0c4e95886f0c8eed2d6a80d5bde719c0","name":"Adenlab Adenlab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4099e6c40b79c4c83c5d020d70245bacba14fcd054cf8553f861500143f18fc4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4099e6c40b79c4c83c5d020d70245bacba14fcd054cf8553f861500143f18fc4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4099e6c40b79c4c83c5d020d70245bacba14fcd054cf8553f861500143f18fc4?s=96&d=mm&r=g","caption":"Adenlab Adenlab"},"url":"https:\/\/www.adenlab.com\/en\/author\/adsadenlab-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/posts\/22365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/comments?post=22365"}],"version-history":[{"count":5,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/posts\/22365\/revisions"}],"predecessor-version":[{"id":24818,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/posts\/22365\/revisions\/24818"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/media\/20283"}],"wp:attachment":[{"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/media?parent=22365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/categories?post=22365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.adenlab.com\/en\/wp-json\/wp\/v2\/tags?post=22365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}