<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcin Kaszubski</title>
    <description>The latest articles on DEV Community by Marcin Kaszubski (@mkaszub).</description>
    <link>https://dev.to/mkaszub</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F463305%2F2db3564e-98ac-4acc-879e-f24013105243.png</url>
      <title>DEV Community: Marcin Kaszubski</title>
      <link>https://dev.to/mkaszub</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mkaszub"/>
    <language>en</language>
    <item>
      <title>Chaos Middleware: where Spring Boot meets Chaos Engineering</title>
      <dc:creator>Marcin Kaszubski</dc:creator>
      <pubDate>Mon, 12 Oct 2020 05:55:28 +0000</pubDate>
      <link>https://dev.to/proofdock/chaos-middleware-where-spring-boot-meets-chaos-engineering-2874</link>
      <guid>https://dev.to/proofdock/chaos-middleware-where-spring-boot-meets-chaos-engineering-2874</guid>
      <description>&lt;p&gt;Chaos engineering tools activate features like stopping virtual machines or terminating pods in your Kubernetes cluster. The Cloud Bug Study states that neglected error handling - buggy code, timeouts, etc. - accounts for the vast majority of system malfunction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chaos Middleware&lt;/strong&gt; allows you to inject turbulent conditions into your application. It lets you delay or raise errors when handling requests, and by applying additional conditions, you can  decrease the blast radius of your attack.&lt;/p&gt;

&lt;p&gt;The following sections will guide you through: i) the installation and configuration process of &lt;strong&gt;Chaos Middleware&lt;/strong&gt; in your Spring Boot application and ii) simulation of delays and application faults.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation &amp;amp; configuration
&lt;/h2&gt;

&lt;p&gt;1. Install the Chaos Middleware by including following dependency in your spring boot application &lt;code&gt;pom.xml&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.proofdock&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-chaos-middleware&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.1.4&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2. Add an &lt;strong&gt;application name&lt;/strong&gt; to the &lt;code&gt;application.properties&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;chaos.middleware.application-name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;webshop-order&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3. Start your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simulate delays
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;delay&lt;/strong&gt; attack introduces delays to the request/response cycle. This type of the attack enables you to verify the behavior of your system in case of timeouts or slow responses.&lt;/p&gt;

&lt;p&gt;Trigger delays by setting the &lt;strong&gt;x-proofdock-attack&lt;/strong&gt; request header. The Chaos Middleware detects any value inside this header and injects appropriate turbulent conditions.&lt;/p&gt;

&lt;p&gt;To simulate delay, set the x-proofdock-attack header's value to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"delay"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"5"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;"application"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"webshop-order"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;name&lt;/strong&gt; - set delay attack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;value&lt;/strong&gt; - delay response by 5 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt; - target application name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's attack an application using Postman.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdcimff0ug86xgz94yqy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmdcimff0ug86xgz94yqy.gif" alt="chaos_panel_delay"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Simulate faults
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;fault&lt;/strong&gt; attack injects an &lt;strong&gt;exception&lt;/strong&gt; into your code.  This type of the attack enables you to verify the behavior of your application in case of an unexpected event.&lt;/p&gt;

&lt;p&gt;Trigger faults by setting the &lt;strong&gt;x-proofdock-attack&lt;/strong&gt; request header.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fault"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"java.lang.Exception"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;"application"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"webshop-order"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;name&lt;/strong&gt; - set fault attack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;value&lt;/strong&gt; - thow exception of the type &lt;code&gt;java.lang.Excpetion&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt; - the targeted application name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's attack an application using Postman.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fpmzcxcxbwspt10w3y93z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fpmzcxcxbwspt10w3y93z.gif" alt="chaos_panel_fault"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chaos Panel for Azure DevOps users
&lt;/h2&gt;

&lt;p&gt;A more convenient way to control such attacks is the usage of the &lt;strong&gt;Chaos Panel&lt;/strong&gt; provided by Proofdock's Chaos Platform. The Chaos Platform extends the Azure DevOps with chaos engineering capabilities. The Chaos Panel allows you to control application attacks via a graphical user interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3q8afxx8d2tydmmwqj0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3q8afxx8d2tydmmwqj0s.png" alt="4xs9vhcsdtmqp83tffan"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Chaos Panel in Azure DevOps&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://docs.proofdock.io/chaos/guide/" rel="noopener noreferrer"&gt;docs&lt;/a&gt;, if you are interested in the Chaos Platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you
&lt;/h2&gt;

&lt;p&gt;We hope you enjoyed reading this article and got a new perspective on resilience.&lt;/p&gt;

&lt;p&gt;We are &lt;a href="https://proofdock.io" rel="noopener noreferrer"&gt;Proofdock&lt;/a&gt;, a software tech company located in Germany, created to help engineers build more resilient and reliable software products. Check out the &lt;a href="https://marketplace.visualstudio.com/items?itemName=proofdock.chaos-platform" rel="noopener noreferrer"&gt;Chaos Platform for Microsoft Azure&lt;/a&gt; and explore your system.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Article photo by &lt;a href="https://unsplash.com/@raychelsnr?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Raychel Sanner&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/spring-weather?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>chaosengineering</category>
      <category>sre</category>
      <category>springboot</category>
      <category>java</category>
    </item>
  </channel>
</rss>
