{"id":42844,"date":"2024-01-27T10:54:52","date_gmt":"2024-01-27T10:54:52","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=42844"},"modified":"2024-01-27T10:54:53","modified_gmt":"2024-01-27T10:54:53","slug":"what-is-toxiproxy-and-use-cases-of-toxiproxy","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/what-is-toxiproxy-and-use-cases-of-toxiproxy\/","title":{"rendered":"What is ToxiProxy and use cases of ToxiProxy?"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What is ToxiProxy?<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"387\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-416-1024x387.png\" alt=\"\" class=\"wp-image-42856\" style=\"width:728px;height:auto\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-416-1024x387.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-416-300x114.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-416-768x291.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-416.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong><em>What is ToxiProxy<\/em><\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p>ToxiProxy is an open-source tool that acts as a <strong>TCP proxy server<\/strong>. Its primary purpose is to <strong>simulate various network conditions and failures<\/strong> during testing and development. This allows you to <strong>test the resilience and behavior of your applications<\/strong> under controlled, realistic scenarios.<\/p>\n\n\n\n<p>Think of it like a <strong>stress test for your network connections<\/strong>! ToxiProxy injects controlled faults like latency, packet loss, bandwidth limitations, and even connection drops to mimic real-world network challenges. By observing how your application reacts to these simulated issues, you can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Identify single points of failure:<\/strong> Find critical dependencies on specific network aspects.<\/li>\n\n\n\n<li><strong>Validate error handling:<\/strong> Test how your application handles network errors and recovers.<\/li>\n\n\n\n<li><strong>Improve fault tolerance:<\/strong> Build applications that can gracefully handle disruptions and maintain functionality.<\/li>\n\n\n\n<li><strong>Boost confidence in production:<\/strong> Minimize the risk of outages due to unexpected network issues.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Top 10 use cases of ToxiProxy?<\/h2>\n\n\n\n<p>Top 10 Use Cases of ToxiProxy:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Testing Microservices:<\/strong> Inject network faults between microservices to assess their isolation and impact on the overall system.<\/li>\n\n\n\n<li><strong>Simulating Network Outages:<\/strong> Introduce controlled disconnections to test failover mechanisms and disaster recovery plans.<\/li>\n\n\n\n<li><strong>Stress Testing Cloud Applications:<\/strong> Simulate resource constraints and network limitations in cloud environments to optimize performance and resilience.<\/li>\n\n\n\n<li><strong>Validating API Resilience:<\/strong> Inject faults in API calls to test their responsiveness and error handling under network stress.<\/li>\n\n\n\n<li><strong>Testing Mobile Apps:<\/strong> Emulate unreliable mobile network conditions (latency, packet loss) to improve app behavior and user experience.<\/li>\n\n\n\n<li><strong>Chaos Engineering Experiments:<\/strong> Integrate ToxiProxy into chaos engineering experiments to proactively discover and address system vulnerabilities.<\/li>\n\n\n\n<li><strong>Developing Network-Aware Applications:<\/strong> Build applications that adapt their behavior based on network conditions using ToxiProxy insights.<\/li>\n\n\n\n<li><strong>Performance Benchmarking:<\/strong> Compare application performance under different network scenarios to identify bottlenecks and optimize communication.<\/li>\n\n\n\n<li><strong>Training Developers and Testers:<\/strong> Use ToxiProxy to educate teams about real-world network challenges and improve testing practices.<\/li>\n\n\n\n<li><strong>Continuous Integration\/Continuous Delivery (CI\/CD):<\/strong> Integrate ToxiProxy into CI\/CD pipelines to perform automated resilience testing at each stage of development.<\/li>\n<\/ol>\n\n\n\n<p>By proactively injecting network faults with ToxiProxy, you can build applications that are <strong>robust, adaptable, and better prepared for the unpredictable nature of real-world networks.<\/strong><\/p>\n\n\n\n<p>Alwyas keep in mind, ToxiProxy is just one tool in a broader strategy for testing and improving system resilience. It&#8217;s crucial to have well-defined objectives and metrics for your tests to gain meaningful insights and drive continuous improvement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are the feature of ToxiProxy?<\/h2>\n\n\n\n<p>ToxiProxy boasts a rich feature set designed to inject controlled chaos into your system and test its behavior under various stress conditions. Here&#8217;s a breakdown of some key functionalities:<\/p>\n\n\n\n<p><strong>Chaos Injection:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Network:<\/strong> Simulate latency, jitter, packet loss, bandwidth throttling, and even complete disconnections to test your system&#8217;s network resilience.<\/li>\n\n\n\n<li><strong>Latency:<\/strong> Introduce specific delays on requests and responses to analyze your system&#8217;s performance under increased latency.<\/li>\n\n\n\n<li><strong>Errors:<\/strong> Inject HTTP errors like timeouts, connection resets, and specific status codes to test error handling mechanisms.<\/li>\n\n\n\n<li><strong>Transformation:<\/strong> Modify request and response body content, headers, and even protocol to analyze your system&#8217;s adaptability to unexpected data.<\/li>\n\n\n\n<li><strong>Replay:<\/strong> Record real-world traffic and replay it with custom modifications to test specific scenarios.<\/li>\n<\/ul>\n\n\n\n<p><strong>Target Control:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Granular Targeting:<\/strong> Inject chaos towards specific applications, paths, protocols, or even individual requests for precise testing.<\/li>\n\n\n\n<li><strong>Whitelisting and Blacklisting:<\/strong> Exclude specific requests or resources from chaos injections to isolate testing areas.<\/li>\n\n\n\n<li><strong>Routing Control:<\/strong> Redirect traffic to different backends or simulate service outages for deeper analysis.<\/li>\n<\/ul>\n\n\n\n<p><strong>Observability and Analysis:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Real-time Statistics:<\/strong> Monitor injected chaos patterns, affected requests, and overall system behavior in real-time.<\/li>\n\n\n\n<li><strong>Logging and Recording:<\/strong> Capture detailed logs of injected chaos and system responses for further analysis and debugging.<\/li>\n\n\n\n<li><strong>Visualization Tools:<\/strong> Utilize built-in dashboards and integrations with external tools to visualize test results and gain insights.<\/li>\n<\/ul>\n\n\n\n<p><strong>Additional Features:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Docker and Kubernetes Integration:<\/strong> Seamless integration with Docker and Kubernetes environments for easy deployment and management.<\/li>\n\n\n\n<li><strong>Scripting and Automation:<\/strong> Extend ToxiProxy capabilities through scripting and automation for complex testing scenarios.<\/li>\n\n\n\n<li><strong>Open-source and Community-driven:<\/strong> Actively developed and supported by a vibrant open-source community.<\/li>\n<\/ul>\n\n\n\n<p><strong>Benefits of using ToxiProxy:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Proactive resilience testing:<\/strong> Identify and address vulnerabilities before they occur in production environments.<\/li>\n\n\n\n<li><strong>Improved fault tolerance:<\/strong> Develop systems that can gracefully handle various network issues and unexpected events.<\/li>\n\n\n\n<li><strong>Enhanced confidence and reliability:<\/strong> Ensure your systems deliver consistent performance even under challenging conditions.<\/li>\n<\/ul>\n\n\n\n<p>Whether you&#8217;re building robust microservices, testing critical infrastructure, or simply curious about simulating real-world network chaos, ToxiProxy offers a valuable toolset for pushing your systems to their limits and ensuring their resilience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How ToxiProxy works and Architecture?<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418-1024x549.png\" alt=\"\" class=\"wp-image-42858\" style=\"width:709px;height:auto\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418-1024x549.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418-300x161.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418-768x412.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418-1536x824.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-418.png 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong><em>ToxiProxy works and Architecture<\/em><\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p>ToxiProxy&#8217;s magic lies in its <strong>flexible and distributed architecture<\/strong>, designed to inject controlled chaos without impacting your production environment. Let&#8217;s explore the key components:<\/p>\n\n\n\n<p><strong>Client-side:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ToxiProxy client library:<\/strong> Integrated into your application or testing framework, it communicates with the ToxiProxy server to define and activate chaos experiments.<\/li>\n\n\n\n<li><strong>Proxy configuration:<\/strong> Specifies the desired chaos types, target paths, and injection parameters for each experiment.<\/li>\n<\/ul>\n\n\n\n<p><strong>Server-side:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ToxiProxy server:<\/strong> Runs as a standalone process or container (e.g., Docker), listening for client connections and managing chaos injections.<\/li>\n\n\n\n<li><strong>Proxy instances:<\/strong> Spawned dynamically per experiment, intercepting traffic based on the target configuration.<\/li>\n\n\n\n<li><strong>Chaos injectors:<\/strong> Built-in modules implementing various chaos types like latency, errors, and data manipulation.<\/li>\n\n\n\n<li><strong>Metrics and logging:<\/strong> Gather data on injected chaos and system responses for real-time monitoring and analysis.<\/li>\n<\/ul>\n\n\n\n<p><strong>Core Functionality:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Client sends instructions:<\/strong> The client library transmits the experiment configuration to the ToxiProxy server.<\/li>\n\n\n\n<li><strong>Server spawns a proxy:<\/strong> Based on the target, the server launches a dedicated proxy instance to handle the specific traffic.<\/li>\n\n\n\n<li><strong>Proxy intercepts traffic:<\/strong> The proxy acts as a man-in-the-middle, capturing inbound and outbound requests and responses.<\/li>\n\n\n\n<li><strong>Chaos injection:<\/strong> Relevant injectors within the proxy modify the intercepted traffic according to the experiment configuration.<\/li>\n\n\n\n<li><strong>Modified traffic forwarded:<\/strong> The altered requests and responses are forwarded to the actual backend service or client.<\/li>\n\n\n\n<li><strong>Metrics and logging:<\/strong> The server and proxy gather data on injected chaos and system behavior for analysis.<\/li>\n<\/ol>\n\n\n\n<p><strong>Key benefits of this architecture:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scalability:<\/strong> Dynamically spawns proxies based on demand, handling even large traffic volumes.<\/li>\n\n\n\n<li><strong>Isolation:<\/strong> Experiments are confined to specific proxies, protecting production environments from unintended chaos.<\/li>\n\n\n\n<li><strong>Flexibility:<\/strong> Supports various chaos types and allows fine-grained targeting for precise testing.<\/li>\n\n\n\n<li><strong>Observability:<\/strong> Provides metrics and logs for monitoring experiments and analyzing system behavior.<\/li>\n<\/ul>\n\n\n\n<p><strong>Notes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ToxiProxy integrates seamlessly with Docker and Kubernetes for easy deployment and management.<\/li>\n\n\n\n<li>Its open-source nature allows for customization and extension through scripting and plugins.<\/li>\n<\/ul>\n\n\n\n<p>ToxiProxy&#8217;s architecture empowers you to inject controlled chaos in a predictable and isolated manner, uncovering potential weaknesses and building robust systems that thrive under pressure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Install ToxiProxy it?<\/h2>\n\n\n\n<p><strong>Here&#8217;s a guide on installing ToxiProxy for different environments:<\/strong><\/p>\n\n\n\n<p><strong>1. Standalone Installation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Download:<\/strong> Grab the latest release from the GitHub repository: https:\/\/github.com\/Shopify\/toxiproxy\/releases<\/li>\n\n\n\n<li><strong>Extract:<\/strong> Unzip the downloaded file to your desired location.<\/li>\n\n\n\n<li><strong>Run:<\/strong> Execute the <code class=\"\">toxiproxy-server<\/code> binary from the extracted directory.<\/li>\n<\/ul>\n\n\n\n<p><strong>2. Docker Installation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pull the image:<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Bash<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker pull shopify\/toxiproxy\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Run the container:<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Bash<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run -p 8474:8474 shopify\/toxiproxy\n<\/code><\/span><\/pre>\n\n\n<p><strong>3. Kubernetes Installation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use a Helm chart:<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Bash<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">helm repo add toxiproxy https:<span class=\"hljs-comment\">\/\/shopify.github.io\/toxiproxy<\/span>\nhelm repo update\nhelm install toxiproxy toxiproxy\/toxiproxy\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>4. Using a Binary Package (if available):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OS-specific packages:<\/strong> Check your operating system&#8217;s package manager (e.g., <code class=\"\">apt<\/code>, <code class=\"\">yum<\/code>) for ToxiProxy packages and install using standard commands.<\/li>\n<\/ul>\n\n\n\n<p><strong>Once installed, access the ToxiProxy UI:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Point your browser to <code class=\"\">http:\/\/localhost:8474<\/code> (or the configured host and port).<\/li>\n\n\n\n<li>Start defining and running your chaos experiments!<\/li>\n<\/ul>\n\n\n\n<p><strong>Notes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Client libraries:<\/strong> Install the appropriate client library for your programming language to interact with ToxiProxy from your applications or tests.<\/li>\n\n\n\n<li><strong>Configuration:<\/strong> Customize ToxiProxy behavior using configuration files or environment variables.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Basic Tutorials of ToxiProxy: Getting Started<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419-1024x576.png\" alt=\"\" class=\"wp-image-42859\" style=\"width:663px;height:auto\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419-1024x576.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419-300x169.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419-768x432.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419-355x199.png 355w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2024\/01\/image-419.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong><em>Basic Tutorials of ToxiProxy<\/em><\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Welcome to the exciting realm of controlled chaos with ToxiProxy! These tutorials will guide you through basic injections to test your system&#8217;s resilience:<\/p>\n\n\n\n<p><strong>1. Simulating Network Latency:<\/strong><\/p>\n\n\n\n<p><strong>a. Target Selection:<\/strong><\/p>\n\n\n\n<p>Open the ToxiProxy UI and choose the &#8220;Add Proxy&#8221; button.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name:<\/strong> Provide a name for your experiment (e.g., &#8220;Latency Test&#8221;).<\/li>\n\n\n\n<li><strong>Upstream URL:<\/strong> Enter the URL of the service you want to inject latency on.<\/li>\n<\/ul>\n\n\n\n<p><strong>b. Injecting Latency:<\/strong><\/p>\n\n\n\n<p>Click the &#8220;Chaos&#8221; tab and choose &#8220;Latency&#8221; from the dropdown menu.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Delay:<\/strong> Set the desired latency delay in milliseconds (e.g., 50ms).<\/li>\n\n\n\n<li><strong>Percentage:<\/strong> Define the percentage of requests affected by the latency injection (e.g., 100% for all requests).<\/li>\n<\/ul>\n\n\n\n<p><strong>c. Start &amp; Observe:<\/strong><\/p>\n\n\n\n<p>Click the &#8220;Start&#8221; button for your proxy. Monitor your service&#8217;s behavior and response times under the induced latency.<\/p>\n\n\n\n<p><strong>d. Clean Up:<\/strong><\/p>\n\n\n\n<p>When finished, click &#8220;Stop&#8221; for your proxy. You can delete the proxy entirely for clean slate.<\/p>\n\n\n\n<p><strong>2. Introducing Network Errors:<\/strong><\/p>\n\n\n\n<p><strong>a. Target and Chaos Selection:<\/strong><\/p>\n\n\n\n<p>Repeat steps from the previous tutorial for setting up a proxy targeting your desired service.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chaos Tab:<\/strong> Navigate to the &#8220;Chaos&#8221; tab and choose &#8220;Error&#8221; from the dropdown menu.<\/li>\n<\/ul>\n\n\n\n<p><strong>b. Error Injection:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Error Type:<\/strong> Select the desired error type (e.g., &#8220;404 Not Found&#8221;, &#8220;500 Internal Server Error&#8221;).<\/li>\n\n\n\n<li><strong>Percentage:<\/strong> Define the percentage of requests triggering the error injection.<\/li>\n<\/ul>\n\n\n\n<p><strong>c. Start &amp; Observe:<\/strong><\/p>\n\n\n\n<p>Start the proxy and observe your service&#8217;s response to the injected errors. Analyze error handling mechanisms and potential application behavior.<\/p>\n\n\n\n<p><strong>d. Clean Up:<\/strong><\/p>\n\n\n\n<p>Stop and delete the proxy as needed.<\/p>\n\n\n\n<p><strong>3. Modifying Request\/Response Content:<\/strong><\/p>\n\n\n\n<p><strong>a. Targeting and Chaos Selection:<\/strong><\/p>\n\n\n\n<p>Follow steps from the first tutorial to set up a proxy targeting your service.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chaos Tab:<\/strong> Navigate to the &#8220;Chaos&#8221; tab and choose &#8220;Transform&#8221; from the dropdown menu.<\/li>\n<\/ul>\n\n\n\n<p><strong>b. Content Manipulation:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Request or Response:<\/strong> Choose whether to modify the request or response body content.<\/li>\n\n\n\n<li><strong>Matching:<\/strong> Define matching patterns for specific sections of the content you want to modify (e.g., regular expressions).<\/li>\n\n\n\n<li><strong>Replacement:<\/strong> Specify the replacement text or data for the matched content.<\/li>\n<\/ul>\n\n\n\n<p><strong>c. Start &amp; Observe:<\/strong><\/p>\n\n\n\n<p>Start the proxy and analyze how your service reacts to the modified request\/response data.<\/p>\n\n\n\n<p><strong>d. Clean Up:<\/strong><\/p>\n\n\n\n<p>Stop and delete the proxy as needed.<\/p>\n\n\n\n<p><strong>Bonus Tips:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore various chaos types offered by ToxiProxy, such as packet loss, bandwidth throttling, and service disconnections.<\/li>\n\n\n\n<li>Combine different chaos injections for more complex testing scenarios.<\/li>\n\n\n\n<li>Leverage client libraries to integrate ToxiProxy directly into your applications or test frameworks.<\/li>\n<\/ul>\n\n\n\n<p>Always remember, start with simple experiments in non-critical environments before introducing chaos to production systems. Have fun injecting controlled chaos and building resilient systems with ToxiProxy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is ToxiProxy? ToxiProxy is an open-source tool that acts as a TCP proxy server. Its primary purpose is to simulate various network conditions and failures during&#8230; <\/p>\n","protected":false},"author":41,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-42844","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/42844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=42844"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/42844\/revisions"}],"predecessor-version":[{"id":42860,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/42844\/revisions\/42860"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=42844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=42844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=42844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}