{"id":9663,"date":"2020-02-24T16:56:59","date_gmt":"2020-02-24T15:56:59","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=9663"},"modified":"2023-06-18T18:20:04","modified_gmt":"2023-06-18T16:20:04","slug":"how-to-increase-robustness-of-a-large-scale-system-by-testing","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/02\/24\/how-to-increase-robustness-of-a-large-scale-system-by-testing\/","title":{"rendered":"How to increase robustness of a large scale system by testing"},"content":{"rendered":"\n<p>When a distributed software system grows bigger and bigger, one will end up with a big amount of various components which all need to scale independently. In order to achieve these components working smooth together, it is necessary to figure out at which time a component needs to be scaled, to avoid having one component as a bottleneck.<\/p>\n\n\n\n<p>This blog post focuses on the possibility to test the behaviour of a large scale system under extreme load in order to discover vulnerabilities. Therefore I will provide an overview of scalability testing and a more specific variant, which has already proven itself as a successful testing variant for such systems, called Chaos Engineering.<br><\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Scalability testing<\/h2>\n\n\n\n<p>Scalability testing is a testing method that is assigned to non-functional testing, which means it checks non-functional aspects of a system, like performance, reliability or usability.<br>The main aspect behind testing scalability is to measure an application\u2019s performance based on its ability to perform up &#8211; and downscaling during different amount of load. [1]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scalability Testing vs Load Testing<br><\/h3>\n\n\n\n<p>The term \u201cLoad Testing\u201d might be better known for some people. Performing load tests on an application means, that the entire system is tested under maximum load, to figure out the point at that the application is not usable anymore. [2]<br>This point indicates how much load the application can just about handle before the response times become too long or the system even crashes.<br><\/p>\n\n\n\n<p>So what\u2019s the difference to Scalability Testing?<\/p>\n\n\n\n<p>When testing for scale, unlike load tests, now the minimum and maximum load for all levels of a system is measured, which includes software, hardware and database levels.<br>When there is more traffic, the system should scale up the specific layer in order to prevent large response times. The goal of scalability testing is to ensure that the application performs these scaling functions correctly. Measuring performance always means defining metrics or parameters to be able to produce results which can be compared later on. [3]<br>These parameters can be different, depending on the type of the application. For example in a web frontend application one would most likely measure the number of users or the network usage, while when testing a web server, the amount of processed requests is more important.<br><\/p>\n\n\n\n<p>As you might have seen, testing in general is closely linked to another topic when dealing with large scale systems, which is <strong>monitoring<\/strong>.<br>You can get a good introduction into this topic by reading this blog post: <a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/26\/end-to-end-monitoring-of-modern-cloud-applications\/\">https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/26\/end-to-end-monitoring-of-modern-cloud-applications\/<\/a>.<\/p>\n\n\n\n<p>For the purpose of testing it is important to know, that results can only be compared, if a correct monitoring environment is set up, on which the specific parameters can be can be viewed independently.<br>I have talked a lot about different parameters for different types of applications, so let\u2019s take a look at some examples: [4], [5]<br><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Response time<\/strong><ul><li>Response time is defined as the time between the user request and the application\u2019s response.<\/li><li>The expected behaviour would be, that the response time stays the same, no matter the load level. Although it is quite normal, that the response time is larger at high load, everybody will have to define his own threshold, which he thinks is tolerable for his users.&nbsp;<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Throughput<\/strong><ul><li>Throughput defines the amount of processed requests by the application.<\/li><li>It is important to differentiate between system levels: On database level, the amount of queries would be relevant, whereas in a typical web application, it would be the number of user requests.<\/li><li>The expected behaviour would be the same throughput for all levels of load.<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>CPU\/memory usage<\/strong><ul><li>Here, the CPU utilization and consumed memory while executing a task in the application is measured.<\/li><li>The more the application scales, the more CPU and memory will be used. In order to minimize this, one should stick to standard programming practices like caching or optimizing database queries.<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Network usage<\/strong><ul><li>Monitoring network usage is done by measuring the bandwidth consumed by an application.<\/li><li>Ultra scaling systems should try to minimize their network usage as much as possible in order to avoid network congestion. This can be done by following typical programming practices like compression techniques.<\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to test<\/h3>\n\n\n\n<p>In order to perform scalability testing, a scenario for the parameter that should be tested, needs to be defined. This scenario should stay the same during the tests, so that the results can be compared afterwards. <br>After setting up a test environment, the tests can be carried out by repeating the scenario under different load in order to test application scaling. By monitoring the chosen parameter, potential issues can be verified. [3]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Netflix way of testing<\/h2>\n\n\n\n<p>The engineers of Netflix created their own testing style: As their systems grew bigger and bigger, they soon discovered two things: First, failures are unavoidable and second, they can\u2019t set up a testing environment which reflects their production environment because it would be way too expensive. To improve confidence in their systems, they introduced a concept called <strong>Chaos Engineering. <\/strong>[6]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">About Chaos Engineering<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system\u2019s capability to withstand turbulent conditions in production.<\/p><cite>[6]<\/cite><\/blockquote>\n\n\n\n<p>The principle behind Chaos engineering is, that you have to be aware, that large scale distributed systems are \u201cchaotic\u201d, which means various events will unavoidable lead to unpredictable outcome. Chaos testing deals with these kind of problems with the goal to reduce unpredicted behaviour in production. [7]<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chaos testing<\/h3>\n\n\n\n<p>Chaos testing is similar to scalability testing: First, a \u201csteady state\u201d of the system needs to be defined, which means measuring parameters when the system is in a normal behaviour. It should be assumed, that this steady state will continue the same way, even if the behaviour of the system changes.<br>Now let\u2019s bring in some chaos: By faking real world events like a server crash or a network connection that is suddenly disconnected, the system\u2019s behaviour is going to change as it should adapt to the event that has occurred, like for example launching a new instance of the server. After the tests, the measured test results can be compared with the original steady state, which can discover weaknesses in the system.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>The harder it is to disrupt the steady state, the more confidence we have in the behavior of the system.<\/p><cite>[6] chapter: CHAOS IN PRACTICE<\/cite><\/blockquote>\n\n\n\n<p>The experiments should ideally reflect real world events, which can be hardware or software failures or simply peaks in traffic. Netflix\u2019 recommendation is to run tests in the <strong>production<\/strong> environment, as this is the only reliable way to prove confidence in a system. Another point is, that it\u2019s nearly impossible to build up a separate environment only for testing, as this would be way too expensive for a large, distributed system. When testing in production, there will always be the risk of causing trouble for  customers, as the system is under extreme stress. Therefore it should be considered running these tests at a time, in which less traffic is expected. As an example, Amazon would never run various chaos tests short before christmas, as they know there will be a lot of traffic and a potential failure of their system could damage the entire company, not to mention the enormous loss of money. [6], [8], [9]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Netflix Simian Army<\/h3>\n\n\n\n<p>Netflix first introduced the concept of Chaos Engineering and released an open-source tool called <strong>Chaos Monkey <\/strong>which provides the ability to run chaos tests on a system, by \u201crandomly terminating virtual machine instances and containers that run inside of your production environment\u201d. [10]<br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/H2vK15IgkvpQTIUuFPbqPZUaq4nIdMHkKVobcfkAafWQz_s7MkgWsg_OmWen_Rx9w_ENrYG0mbZMa1Nt5HQ5vp5uzB9_bkwV8yg_P9IfsWmryqq6U2fHeaRP-6Ibysd6ODNMAj5P\" alt=\"\" \/><\/figure><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>The name comes from the idea of unleashing a wild monkey with a weapon in your data center (or cloud region) to randomly shoot down instances and chew through cables<\/p><cite>[11]<\/cite><\/blockquote>\n\n\n\n<p>To improve the stability and learn about weaknesses of their system, Netflix started running chaos monkey during a normal business day, having developers ready to instantly react on possible problems. The outcome was very successful which motivated them to develop more \u201cmonkeys\u201d for different kinds of failures. They ended up with a \u201cvirtual Simian Army\u201d: [7], [11]<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Some examples<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Latency Monkey <\/strong>focuses on making very large delays in order to simulate service degradation or even an entire service downtime.<\/li><li><strong>Doctor Monkey <\/strong>runs health checks on the instances and shuts down unhealthy instances to give the owner the possibility to fix the issues and relaunch them.<\/li><li><strong>10-18 Monkey <\/strong>is short for Localization-Interlocalization and detects language problems for different geographic regions, like the usage of different character sets.<\/li><li><strong>Janitor Monkey <\/strong>checks the cloud environment for unused resources and disposes them.<\/li><li><strong>Conformity Monkey <\/strong>is able to detect instances, which do not follow best-practices and shuts them down. For example, it would detect and shut down an instance which does not auto.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/8h_z-5W6olzeJeyXw7NwIHYdRJs3FyHcLk-NSsfw_eWM-2oCE1FnZFBxC3qw2IqdnSal43O8bc5uMGFaBvbKLZjhRu4Q2nlitp7AbAeNTc3BOFW2u_6xtpR3jIEvNLDPpsrmL8c9\" alt=\"\" width=\"384\" height=\"399\" \/><\/figure><\/div>\n\n\n\n<p>By using the Simian Army, Netflix feels a lot more confident to deal with unpredictable problems arising in their production environment.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>To improve the robustness of a large scale system, scalability testing is unavoidable. The principle of Chaos Engineering shows, that there are many different events, which can\u2019t be predicted, yet a robust system should be able to survive such impacts with as less as possible drawbacks.&nbsp;<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p>[1] <a href=\"https:\/\/www.softwaretestinghelp.com\/functional-testing-vs-non-functional-testing\/\">https:\/\/www.softwaretestinghelp.com\/functional-testing-vs-non-functional-testing\/<\/a><br>[2] <a href=\"https:\/\/www.guru99.com\/load-testing-tutorial.html\">https:\/\/www.guru99.com\/load-testing-tutorial.html<\/a><br>[3] <a href=\"https:\/\/www.geeksforgeeks.org\/software-testing-scalability-testing\/\">https:\/\/www.geeksforgeeks.org\/software-testing-scalability-testing\/<\/a><br>[4] <a href=\"https:\/\/www.guru99.com\/scalability-testing.html\">https:\/\/www.guru99.com\/scalability-testing.html<\/a><br>[5]h<a href=\"https:\/\/www.tutorialspoint.com\/software_testing_dictionary\/scalability_testing.htm\">ttps:\/\/www.tutorialspoint.com\/software_testing_dictionary\/scalability_testing.htm<\/a><br>[6] <a href=\"https:\/\/principlesofchaos.org\/?lang=ENcontent\">https:\/\/principlesofchaos.org\/?lang=ENcontent<\/a><br>[7] <a href=\"https:\/\/boyter.org\/2016\/07\/chaos-testing-engineering\/\">https:\/\/boyter.org\/2016\/07\/chaos-testing-engineering\/<\/a><br>[8] <a href=\"https:\/\/blog.codecentric.de\/en\/2018\/07\/chaos-engineering\/\">https:\/\/blog.codecentric.de\/en\/2018\/07\/chaos-engineering\/<\/a><br>[9] <a href=\"https:\/\/m.heise.de\/developer\/artikel\/Chaos-Engineering-Fuer-kontrollierte-Unordnung-sorgen-4423501.html?seite=all\">https:\/\/m.heise.de\/developer\/artikel\/Chaos-Engineering-Fuer-kontrollierte-Unordnung-sorgen-4423501.html?seite=all<\/a><br>[10] <a href=\"https:\/\/github.com\/Netflix\/chaosmonkey\/\">https:\/\/github.com\/Netflix\/chaosmonkey\/<\/a><br>[11] <a href=\"https:\/\/netflixtechblog.com\/the-netflix-simian-army-16e57fbab116\">https:\/\/netflixtechblog.com\/the-netflix-simian-army-16e57fbab116<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When a distributed software system grows bigger and bigger, one will end up with a big amount of various components which all need to scale independently. In order to achieve these components working smooth together, it is necessary to figure out at which time a component needs to be scaled, to avoid having one component [&hellip;]<\/p>\n","protected":false},"author":945,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,650,223],"tags":[149,217],"ppma_author":[789],"class_list":["post-9663","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-scalable-systems","category-ultra-large-scale-systems","tag-testing","tag-uls"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":23961,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/10\/microservices-any-good\/","url_meta":{"origin":9663,"position":0},"title":"Microservices &#8211; any good?","author":"Kim Bastiaanse","date":"10. February 2023","format":false,"excerpt":"As software solutions continue to evolve and grow in size and complexity, the effort required to manage, maintain and update them increases. To address this issue, a modular and manageable approach to software development is required.\u00a0Microservices architecture provides a solution by breaking down applications into smaller, independent services that can\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Microservice.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":36,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/11\/26\/systems-engineering-and-management-ws-20152016\/","url_meta":{"origin":9663,"position":1},"title":"Systems Engineering and Management WS 2015\/2016","author":"Thomas Pohl","date":"26. November 2015","format":false,"excerpt":"The course Systems Engineering and Management is designed to bridge the gap between theoretical studies in Ultra Large\u00a0Scale Systems\u00a0and\u00a0professional state of the art development. Students should find a platform to explore modern tooling and environments for building, integrating, testing and scaling their applications. It turned out as a good idea\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":24490,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/03\/06\/how-to-scale-an-iot-platform\/","url_meta":{"origin":9663,"position":2},"title":"How to scale an IoT-Platform","author":"Simon Janik","date":"6. March 2023","format":false,"excerpt":"Written by Marvin Blessing, Michael Partes, Frederik Omlor, Nikolai Thees, Jan Tille, Simon Janik, Daniel Heinemann - for System Engineering And Management IntroductionArchitectureScaling & Load TestEstimations and predicted bottlenecksMonitoringLoad TestScalingLessons LearnedMonitoring & Error searchDevelopment ProcessIdentifying and improving bottlenecks Introduction The aim of the project was to develop a system with\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/lh6.googleusercontent.com\/Gsjx91zLxbPn2Uer_-kXHZ68xbA2YmKIrqreIyWNPF9MwowChC5IHi1wx6G6Ctj2MKTRA1n-uZHlwfjxk-dYkjGrzGY10KbnOLN1UKQVbMNaO-RIvm3c7cBFVZQEy5lqi33i_F5TEbln0X7C3CZfL4k","width":350,"height":200},"classes":[]},{"id":25560,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/08\/07\/high-availability-and-reliability-in-cloud-computing-ensuring-seamless-operation-despite-the-threat-of-black-swan-events\/","url_meta":{"origin":9663,"position":3},"title":"High Availability and Reliability in Cloud Computing: Ensuring Seamless Operation Despite the Threat of Black Swan Events","author":"mk306","date":"7. August 2023","format":false,"excerpt":"Introduction Nowadays cloud computing has become the backbone of many businesses, offering unparalleled flexibility, scalability and cost-effectiveness. According to O\u2019Reilly\u2019s Cloud Adoption report from 2021, more than 90% of organizations rely on the cloud to run their critical applications and services\u00a0[1]. High availability and reliability of cloud computing systems has\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/CrossRegion.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/CrossRegion.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/CrossRegion.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/CrossRegion.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":12550,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/27\/migrating-from-heroku-to-hetzner-achieving-scalability-with-docker-kubernetes-and-rancher\/","url_meta":{"origin":9663,"position":4},"title":"Migrating from Heroku to Hetzner: Achieving Scalability with Docker, Kubernetes and Rancher","author":"Mario Koch","date":"27. February 2021","format":false,"excerpt":"Dockerizing an existing application and deploying it in a Kubernetes Cluster via Rancher to achieve better scalability and cost minimization. Load Testing with Artillery, Monitoring with Prometheus & Grafana and GitHub Actions for CI\/CD were used in the process.","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/vidar-nordli-mathisen-y8TMoCzw87E-unsplash-1-scaled.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":28408,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/02\/18\/evaluation-of-ai-driven-software-testing-methods-applied-to-a-microservice\/","url_meta":{"origin":9663,"position":5},"title":"Evaluation of AI-Driven Software Testing Methods Applied to a Microservice","author":"Paula Schl\u00f6termann","date":"18. February 2026","format":false,"excerpt":"Abstract- In traditional Software Development Lifecycles, testing is often performed in its final phases, increasing defect resolution costs and project risks. Recent advances in Artificial Intelligence (AI) have the potential to accelerate development workflows and reduce manual effort. However, the actual capabilities of AI-driven testing tools remain unclear, particularly in\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/grafik.png?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":789,"user_id":945,"is_guest":0,"slug":"jm130","display_name":"Johannes Mauthe","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6874b65a7b7149f7b6d1ca6182c00e7a1ecc1047277e223cfa8028df9990b741?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/9663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/945"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=9663"}],"version-history":[{"count":8,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/9663\/revisions"}],"predecessor-version":[{"id":9815,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/9663\/revisions\/9815"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=9663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=9663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=9663"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=9663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}