<?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: Hypertrace</title>
    <description>The latest articles on DEV Community by Hypertrace (@hypertrace).</description>
    <link>https://dev.to/hypertrace</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%2Forganization%2Fprofile_image%2F3250%2F77beb25f-fbd2-4a89-a17a-fe5a6fd2c055.png</url>
      <title>DEV Community: Hypertrace</title>
      <link>https://dev.to/hypertrace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hypertrace"/>
    <language>en</language>
    <item>
      <title>Angular Router: Children or LoadChildren?</title>
      <dc:creator>Anand Tiwary</dc:creator>
      <pubDate>Wed, 01 Sep 2021 05:38:31 +0000</pubDate>
      <link>https://dev.to/hypertrace/angular-router-children-or-loadchildren-2igc</link>
      <guid>https://dev.to/hypertrace/angular-router-children-or-loadchildren-2igc</guid>
      <description>&lt;p&gt;&lt;em&gt;(This article assumes basic awareness of routers and routers API. For in-depth understanding, please refer to&lt;/em&gt; &lt;a href="https://angular.io/guide/router"&gt;&lt;em&gt;Angular docs&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Angular Router is one of the most useful packages in the angular ecosystem. However, if you are new to Angular and just starting to work with routers, your goal would probably be to set up few basic routes. Moreover, with new developers, I have usually seen many questions around children and loadChildren properties. Therefore, this article will focus only on the differences between these two properties and when to use what.&lt;/p&gt;

&lt;h3&gt;
  
  
  Angular Route Interface
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Route&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;component&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;loadChildren&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;LoadChildren&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="nx"&gt;few&lt;/span&gt; &lt;span class="nx"&gt;other&lt;/span&gt; &lt;span class="nx"&gt;properties&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me start by quickly explaining the above four properties of the Route interface (that are in the scope of this article):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Path&lt;/strong&gt;: The router API breaks down the entire URL into individual fragments. The path property could correspond to a combination of these fragments. It is mainly used to identify the angular component that should be instantiated and loaded in the parent's router outlet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component&lt;/strong&gt;: This property refers to the angular component that should instantiate for this route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Children&lt;/strong&gt;: This property defines nested routes, and angular would load them upfront.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LoadChildren&lt;/strong&gt;: It is also used to define nested routes, but Angular Router would lazily load them. You see the advantage here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that we have defined relevant Route properties, let's take a look at when we should choose between &lt;code&gt;children&lt;/code&gt;and &lt;code&gt;loadChildren&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Children:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To add nested routes.&lt;/li&gt;
&lt;li&gt;Angular would load all child components upfront.&lt;/li&gt;
&lt;li&gt;Make sure you import all NgModules for each component defined in the nested route table. Otherwise, your code would not work.&lt;/li&gt;
&lt;li&gt;To help with the readability and maintainability of your code, avoid this property if your route table's nesting is getting too long. My personal preference is &amp;lt; 3 levels max.&lt;/li&gt;
&lt;li&gt;Ideal for simple routes.&lt;/li&gt;
&lt;li&gt;Code example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApplicationFrameComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HomeDashboardComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
                    &lt;span class="p"&gt;{&lt;/span&gt; 
                        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiHomeDashboardComponent&lt;/span&gt; 
                    &lt;span class="p"&gt;}]&lt;/span&gt; 
            &lt;span class="p"&gt;},&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-list&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiListComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
                    &lt;span class="p"&gt;{&lt;/span&gt; 
                        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;internal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InternalApisListComponent&lt;/span&gt; 
                    &lt;span class="p"&gt;},&lt;/span&gt; 
                    &lt;span class="p"&gt;{&lt;/span&gt; 
                        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;external&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ExternalApisListComponent&lt;/span&gt; 
                    &lt;span class="p"&gt;}]&lt;/span&gt; 
            &lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use LoadChildren:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For lazy loading. Using this property will optimize your application's performance by only loading the nested route subtree when a user navigates to a particular URL that matches the current route path.&lt;/li&gt;
&lt;li&gt;It helps in keeping the nested routes table separate.&lt;/li&gt;
&lt;li&gt;You must specify a routing module for loadChildren. This module must define the routes and should import all relevant ng modules&lt;/li&gt;
&lt;li&gt;If you use &lt;code&gt;import(&amp;lt;module-path&amp;gt;).then(module =&amp;gt; module.&amp;lt;routing-module&amp;gt;)&lt;/code&gt;, Angular will create a separate js bundle that will be loaded only when a child route is activated. And you get better performance, code readability, and maintainability.&lt;/li&gt;
&lt;li&gt;If you use &lt;code&gt;() =&amp;gt; &amp;lt;routing-module&amp;gt;&lt;/code&gt;, angular will not create a separate js bundle, but the routes table would be kept separate. The result is better code readability and maintainability. Performance would be the same as the &lt;code&gt;children&lt;/code&gt; approach.&lt;/li&gt;
&lt;li&gt;Code example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rootRoutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApplicationFrameComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;loadChildren&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;HomeDashboardRoutingModule&lt;/span&gt; 
            &lt;span class="p"&gt;},&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-list&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;loadChildren&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./api-list.module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ApiListRoutingModule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
            &lt;span class="p"&gt;}]&lt;/span&gt; 
    &lt;span class="p"&gt;}];&lt;/span&gt;

&lt;span class="c1"&gt;// In HomeDashboardRoutingModule&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;homeRoutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HomeDashboardComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-dashboard&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiHomeDashboardComponent&lt;/span&gt; 
            &lt;span class="p"&gt;}]&lt;/span&gt; 
    &lt;span class="p"&gt;}];&lt;/span&gt; 

&lt;span class="c1"&gt;// In ApiListRoutingModule &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiListRoutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiListComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;internal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InternalApisListComponent&lt;/span&gt; 
            &lt;span class="p"&gt;},&lt;/span&gt; 
            &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;external&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ExternalApisListComponent&lt;/span&gt; 
            &lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope this article was helpful! A quick question for my audience. What would happen if we pass a &lt;code&gt;component&lt;/code&gt; for a route with loadChildren property?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;home&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HomeDashboardComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;loadChildren&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;HomeDashboardRoutingModule&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Would you please reply in the comments section below?&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>router</category>
    </item>
    <item>
      <title>Getting started with Observability</title>
      <dc:creator>Jayesh Bapu Ahire</dc:creator>
      <pubDate>Mon, 09 Aug 2021 13:12:06 +0000</pubDate>
      <link>https://dev.to/hypertrace/getting-started-with-observability-3lee</link>
      <guid>https://dev.to/hypertrace/getting-started-with-observability-3lee</guid>
      <description>&lt;p&gt;Most of the tech giants including companies like Amazon, Netflix, started to build their systems using a monolithic architecture because back in the time it was much faster to set up a monolith and get the business moving. But over time as the product matures or fat growth happens, with growing systems the code gets more and more complicated. They all faced this problem and looked at microservices as a solution. One of the biggest benefits of microservices is that each microservice can be developed, scaled, and deployed independently. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hWFr4Dhr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://thumbs.gfycat.com/SpicySpecificArrowcrab-small.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hWFr4Dhr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://thumbs.gfycat.com/SpicySpecificArrowcrab-small.gif" alt="space-1.jpg" width="544" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;With great power comes great responsibility&lt;/em&gt; and that’s what happened when organizations switched to microservices from more monolithic application architectures, they got significant benefits in delivery speed and scalability but on the flip side now they have to deal with the operational complexity in managing, monitoring and securing the new distributed architecture. &lt;/p&gt;

&lt;p&gt;One of the benefits of working with older technologies was the limited set of defined failure modes. Yes, things broke, but you would pretty much know what broke at any given time, or you could find out quickly because a lot of older systems failed in pretty much the same three ways over and over again.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O4EE5h1k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/practicaldev/image/fetch/s--ql9tvPuO--/c_limit%252Cf_auto%252Cfl_progressive%252Cq_auto%252Cw_880/https://divante.com/blog/wp-content/uploads/2019/07/Frame-25.png" alt="space-1.jpg" width="800" height="419"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Microservice interactions at Amazon and Netflix (Image by divante.com)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Adopting a single deployment platform can address some of the concerns regarding operational complexity but it goes against the philosophy that makes microservice architectures effective. Using APIs to expose core business functionality and facilitate service-to-service communication gives us several control points and makes it easier to deal with complex modern applications. API-driven applications come with their issues like design complexity, visibility, communication, security, etc. which we discussed in detail in &lt;a href="https://dev.to/hypertrace/challenges-with-microservice-and-api-ecosystem-435l"&gt;this blog post&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;In a nutshell, Operating distributed systems is hard, not only because of their inherent complexity of the number of components and their distribution but also because of the unpredictability of their failure modes: there are plenty of unknown unknowns. We are left with an imperative to build systems that can be debugged, armed with evidence instead of conjectures.&lt;/p&gt;

&lt;p&gt;With the growing complexity of systems and fast-moving software delivery trains due to modern cloud-native architectures, the possible failure modes became more abundant. Monitoring tools helped us for a while in keeping track of application and infrastructure performance analytics but it isn’t very suitable for modern distributed applications. As we discussed above, developers these days don’t know what their software failure modes are and more unknown unknowns means we won’t put any effort into fixing something because we don’t know the problem exists in the first place. Standard monitoring can only help you with tracking known unknown and it’s very relative. Your monitoring is only as useful as your system is monitorable. &lt;/p&gt;

&lt;p&gt;This monitor-ableness of your modern applications is what we call "&lt;strong&gt;Observability&lt;/strong&gt;". &lt;/p&gt;

&lt;p&gt;In control theory, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Observability is defined as a measure of how well internal states of a system can be inferred from knowledge of that system’s external outputs. Simply put, observability is how well you can understand your complex system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Metrics, events, logs, and traces—or MELT—are at the core of Observability. But, Observability is about a whole lot more than just data.&lt;/p&gt;

&lt;p&gt;Observability is all about the ability to ask abstract questions to your system and find the answer without the need of opening a black box. Like, consider your process of placing an order on Amazon failed due to query timeout so What characteristics did the queries that timed out at 500ms share in common? Service versions? Browser plugins? Here, Instrumentation produces data which is what we call telemetry, and querying that data answers our questions.&lt;/p&gt;

&lt;p&gt;Whenever we talk about Observability, we also talk about metrics, logs, and traces which are three pillars of Observability. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: Aggregated summary statistics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs&lt;/strong&gt;: Detailed debugging information emitted by processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Tracing&lt;/strong&gt;: Provides insights into the full lifecycles, aka traces of requests to a system, allowing you to pinpoint failures and performance issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We will discuss all three of these in detail in the upcoming articles in this series. &lt;/p&gt;

&lt;h3&gt;
  
  
  In a nutshell,
&lt;/h3&gt;

&lt;p&gt;This blog post was about giving you a brief overview of Observability and help you understand why you need Observability. In the upcoming blog posts, we will talk about metrics, logs, and traces and also see different applications of modern Observability for modern distributed applications. &lt;/p&gt;

&lt;p&gt;Until then, if your organization is using microservice architecture and exploring Observability solutions, feel free to check out &lt;a href="https://github.com/hypertrace/hypertrace"&gt;Hypertrace&lt;/a&gt;, which is a modern API Observability platform. &lt;a href="https://bit.ly/hypertrace-community-slack"&gt;join our slack community&lt;/a&gt; to interact with folks who are on the same microservice transition journey and are exploring Observability. &lt;/p&gt;

&lt;h4&gt;
  
  
  References
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.bmc.com/blogs/observability-vs-monitoring/"&gt;https://www.bmc.com/blogs/observability-vs-monitoring/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.infoworld.com/article/3607980/what-is-observability-software-monitoring-on-steroids.html"&gt;https://www.infoworld.com/article/3607980/what-is-observability-software-monitoring-on-steroids.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Observability"&gt;https://en.wikipedia.org/wiki/Observability&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.brighttalk.com/webcast/18765/499011"&gt;https://www.brighttalk.com/webcast/18765/499011&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://anchor.fm/talkin-observability"&gt;https://anchor.fm/talkin-observability&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>monitoring</category>
      <category>discuss</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>Challenges with Microservice and API ecosystem</title>
      <dc:creator>Jayesh Bapu Ahire</dc:creator>
      <pubDate>Tue, 01 Jun 2021 10:59:34 +0000</pubDate>
      <link>https://dev.to/hypertrace/challenges-with-microservice-and-api-ecosystem-435l</link>
      <guid>https://dev.to/hypertrace/challenges-with-microservice-and-api-ecosystem-435l</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/hypertrace/evolution-of-api-and-microservice-ecosystem-part-1-399a"&gt;last post of this series&lt;/a&gt;, we discussed the evolution of microservices and API ecosystems and what are the different benefits microservices and APIs offer when it comes to building large, scalable, and efficient systems. As I said in the last part (actually as uncle Ben said this), with great power comes great responsibility and the same thing applies to microservices and API architectures. These complex systems bring a lot of challenges with them and we will discuss those challenges in this part. &lt;/p&gt;

&lt;p&gt;There are many challenges when it comes to adopting microservices or dealing with microservice architectures. We will be discussing a few of the important ones in this blog post. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Complexity:&lt;/strong&gt; Complexity comes in different forms, either it can be design complexity or operational complexity. In the case of microservice architecture design, you have to deal with both of those. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Design:&lt;/strong&gt; When it comes to distributed systems, complexity is given. But, one way to mitigate this complexity is to create optimal abstractions. The effective modularization of the complex monolith can be done with proper and accurate service boundary definitions but creating those service boundary definitions is hard as well. That’s where design thinking comes into the picture. 
Defining clear boundaries and responsibility for each service is complicated and developers have to use a data-centric approach to arrive at a proper conclusion here. 
As compared to microservice design, API design is mature and has defined standard practices. API design thinking helps to identify the right service boundaries and helps to establish loose coupling between services so that implementation details don’t leak through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational:&lt;/strong&gt; The main benefit of using microservices is you can develop, deploy and upgrade every service independently. This same benefit becomes the biggest pain point for many small teams who are trying to adopt microservice architectures as now there are maybe 60 services to be managed by 10 people and that operational load is very high. Maintaining, and continuously monitoring these complex architectures becomes very hard after some point. Some of the major pain points in operations management are:

&lt;ul&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Optimizations and scaling&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication:&lt;/strong&gt; Microservices have to communicate with each other to get desired things done. There need to be some infrastructure layer configs to enable resource sharing across services which ultimately enables these microservices to talk to each other. These configurations, if not optimized properly can result in high latency and error rate. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; As discussed in the above point, microservices use infrastructure layer configs to talk to each other. This along with multi-environment (multi-cloud as well as on-prem) deployments, results in even less visibility and creates many vulnerable points. This collectively increases the risk of a security attack. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microservice frameworks in general come with many challenges when it comes to security, some of them are as follows:&lt;br&gt;
    - Data is distributed so maintain privacy, confidentiality, and integrity is hard.&lt;br&gt;
    - Setting up access control and service level authentication is tricky and makes services more prone to attack sometimes.&lt;br&gt;
    - Finding the origin of the attack and affected services can be tricky depending on the size of the architecture. &lt;/p&gt;

&lt;p&gt;Most of the challenges we discussed above have some common origins and the most common one being less visibility in the system due to complex architectures and infrastructure. Observability into these microservice architectures and APIs can help us to understand these complex interactions better and help us solve design issues, operational issues, communication issues as well as security issues. &lt;/p&gt;

&lt;p&gt;How? Going forward in this series, we will discuss API Observability and how we can use it to solve these complex but very important issues in API and Microservices ecosystem. &lt;/p&gt;

&lt;p&gt;Until then, if your organization is using microservice architecture and exploring Observability solutions, feel free to check out &lt;a href="https://github.com/hypertrace/hypertrace"&gt;Hypertrace&lt;/a&gt;, which is a modern API Observability platform. If you are in transition and want to learn more about Observability and instrumentation, &lt;a href="https://bit.ly/hypertrace-community-slack"&gt;join our slack community&lt;/a&gt; to interact with folks who have been through this transition or going through this transition. &lt;/p&gt;

&lt;h3&gt;
  
  
  References:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mertech.com/blog/7-api-management-challenges-and-how-to-solve-them"&gt;https://www.mertech.com/blog/7-api-management-challenges-and-how-to-solve-them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bmc.com/blogs/microservices-challenges-when-to-avoid/"&gt;https://www.bmc.com/blogs/microservices-challenges-when-to-avoid/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/documents/302868"&gt;https://www.gartner.com/en/documents/302868&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.broadcom.com/doc/microsurfaces-the-role-of-apis-in-a-microservice-architecture"&gt;https://docs.broadcom.com/doc/microsurfaces-the-role-of-apis-in-a-microservice-architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thoughtworks.com/insights/blog/microservices-nutshell"&gt;https://www.thoughtworks.com/insights/blog/microservices-nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dzone.com/articles/challenges-in-implementing-microservices"&gt;https://dzone.com/articles/challenges-in-implementing-microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html"&gt;https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>cloud</category>
      <category>discuss</category>
      <category>architecture</category>
    </item>
    <item>
      <title>4 Easy Ways to Contribute to an Open Source Project</title>
      <dc:creator>Jayesh Bapu Ahire</dc:creator>
      <pubDate>Thu, 20 May 2021 10:35:30 +0000</pubDate>
      <link>https://dev.to/hypertrace/4-easy-ways-to-contribute-to-an-open-source-project-3f0d</link>
      <guid>https://dev.to/hypertrace/4-easy-ways-to-contribute-to-an-open-source-project-3f0d</guid>
      <description>&lt;p&gt;Want to contribute to an Open Source project but don't know where to start? You're in luck! This article will explain 4 easy ways you can contribute to an Open Source project as well as a few Hypertrace contributions you can make as examples.&lt;/p&gt;

&lt;p&gt;Let's get started, shall we?&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&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%2Fi0.wp.com%2Fmedia2.giphy.com%2Fmedia%2FxT4uQwLt2AyurOGWFW%2Fgiphy.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%2Fi0.wp.com%2Fmedia2.giphy.com%2Fmedia%2FxT4uQwLt2AyurOGWFW%2Fgiphy.gif" alt="documenting for OSS project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do you like to write. Do you like to share with people? As the face of an open source project, documentation is one of the most important contributions. Every open source project welcomes contributions to documentation. If you are just getting started with Distributed Tracing or Hypertrace and felt that we were missing some documentation details especially on our Getting Started page, you can go ahead and raise a pull request in &lt;a href="https://github.com/hypertrace/hypertrace-docs-website" rel="noopener noreferrer"&gt;Hypertrace-docs&lt;/a&gt;. We will be more than happy to review and add your suggestions.&lt;/p&gt;

&lt;p&gt;Here are few important documentation categories you can contribute to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting Started and Installation&lt;/li&gt;
&lt;li&gt;FAQs&lt;/li&gt;
&lt;li&gt;UI &amp;amp; Platform Overview&lt;/li&gt;
&lt;li&gt;Anything else users can see&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code/ Features/ Bug fixes
&lt;/h2&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%2Fsteamcdn-a.akamaihd.net%2Fsteamcommunity%2Fpublic%2Fimages%2Fclans%2F32755091%2F4756e5ee81cd570346e2cc9ff9d08af36e51518f.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%2Fsteamcdn-a.akamaihd.net%2Fsteamcommunity%2Fpublic%2Fimages%2Fclans%2F32755091%2F4756e5ee81cd570346e2cc9ff9d08af36e51518f.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You like to code and would love to contribute code to an open source project? Here are the few ways to find an issue you want to fix or a feature you want to add.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the GitHub &lt;code&gt;Issues&lt;/code&gt; tab of the open source project repository you would like to contribute to. For Hypertrace, you can find open issues &lt;a href="https://github.com/hypertrace/hypertrace/issues" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;If you are contributing for the first time,, look for issues with the &lt;code&gt;good first issue&lt;/code&gt; label. Otherwise just find something that interests you and start working on it.&lt;/li&gt;
&lt;li&gt;Do you have a feature/enhancement idea that you want to work on? Open an issue or start a &lt;a href="https://github.com/hypertrace/hypertrace/discussions/categories/ideas" rel="noopener noreferrer"&gt;discussion&lt;/a&gt; thread. Once you get some feedback, then start working!&lt;/li&gt;
&lt;li&gt;If you can't find something then you can also write unit tests if  they are missing. No maintainer will say no to more/better tests in the suite. Here's an article to help you get started: &lt;a href="https://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters" rel="noopener noreferrer"&gt;https://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;While trying the project, if you find a bug, report them right away as that itself is a nice contribution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are first time contributor, here are few articles which might help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://towardsdatascience.com/five-tips-for-contributing-to-open-source-software-8fd3d6f5606f" rel="noopener noreferrer"&gt;Five Tips for Contributing to Open Source&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/@kevinjin/contributing-to-open-source-walkthrough-part-0-b3dc43e6b720" rel="noopener noreferrer"&gt;Contributing to Open Source&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;H&lt;a href="https://css-tricks.com/how-to-contribute-to-an-open-source-project" rel="noopener noreferrer"&gt;ow to Contribute to Open Source&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.freecodecamp.org/news/the-definitive-guide-to-contributing-to-open-source-900d5f9f2282" rel="noopener noreferrer"&gt;The Definitive Guide to Contributing to Open Source&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Evangelism
&lt;/h2&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%2Fmiro.medium.com%2Fmax%2F720%2F1%2A4oAYsSrlX9nXALxkKG9ZNA.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%2Fmiro.medium.com%2Fmax%2F720%2F1%2A4oAYsSrlX9nXALxkKG9ZNA.gif" alt="Evangelising OSS projects"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would you like to share your experience using an open source project? Enterprise products use marketing teams to get the word out about themselves but open source projects depend upon users. You can join the Hypertrace user community &lt;a href="https://hypertrace.org/get-started" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Once you join the community, you can talk with other users about their experience and perhaps even chat with the creators of the project. Once you are comfortable, you can write a blog post explaining how the project helped you and what problems it solved.&lt;/p&gt;

&lt;p&gt;Similarly, you can also share your experience in a meetup or online event or create a tutorial video which will help others learn about the project.&lt;/p&gt;

&lt;p&gt;If you want to write a blog post about Hypertrace, take a look at blog.hypertrace.org and let us know what you are interested in writing about. You can reach in the Welcome channel on Slack &lt;/p&gt;

&lt;h2&gt;
  
  
  Helping others
&lt;/h2&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%2Fmedia0.giphy.com%2Fmedia%2F6yxIP39EMwP7IlIA28%2F200.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%2Fmedia0.giphy.com%2Fmedia%2F6yxIP39EMwP7IlIA28%2F200.gif" alt="Always help each other"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Are you experienced but don't have time to invest? Be a part of Slack and GitHub communities and answer questions there. Or share your thoughts on open issues and feature ideas.&lt;/p&gt;

&lt;p&gt;You can also help in reviewing PRs, moderating discussions or reporting bugs.&lt;/p&gt;

&lt;p&gt;Videos are very popular these days. A short tutorial or sample app can help others build deeper understanding about the project. Even your smallest contribution can have a bigger impact on an open source project.&lt;/p&gt;

&lt;p&gt;So, what are you waiting for? Pick up any of these ideas and dive into the world of Open Source. If you ask me, I will tell you to get started with documentation as it will give you a deeper understanding of the project and help you build confidence too.&lt;/p&gt;

&lt;h3&gt;
  
  
  On that note,
&lt;/h3&gt;

&lt;p&gt;We are looking for contributors to help us build &lt;a href="https://github.com/hypertrace/hypertrace" rel="noopener noreferrer"&gt;Hypertrace&lt;/a&gt;, an Open Source distributed tracing and Observability platform. And any contributions you make are greatly appreciated. Feel free to reach out to us on &lt;a href="https://github.com/hypertrace/hypertrace/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt; or &lt;a href="https://join.slack.com/t/hypertrace/shared_invite/zt-oln0psj9-lm1CSkXE1vsWdcw6YKWGDg" rel="noopener noreferrer"&gt;join us on slack&lt;/a&gt; to learn more. &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>contributorswanted</category>
      <category>codenewbie</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Evolution of API and Microservice ecosystem</title>
      <dc:creator>Jayesh Bapu Ahire</dc:creator>
      <pubDate>Tue, 18 May 2021 14:30:04 +0000</pubDate>
      <link>https://dev.to/hypertrace/evolution-of-api-and-microservice-ecosystem-part-1-399a</link>
      <guid>https://dev.to/hypertrace/evolution-of-api-and-microservice-ecosystem-part-1-399a</guid>
      <description>&lt;p&gt;In this first installment in a series on the evolution of API and microservices ecosystem, we will learn about how microservices and APIs became industry standards and what are different benefits microservices offer. We will explore different challenges with this ecosystem and how to solve them in the second part of this series. &lt;/p&gt;

&lt;p&gt;Most of the tech giants including companies like Amazon, Netflix, started to build their systems using a monolithic architecture because back in the time it was much faster to set up a monolith and get the business moving. But over time as the product matures or fat growth happens, with growing systems the code gets more and more complicated. They all faced this problem and looked at microservices as a solution. One of the biggest benefits of microservices is that each microservice can be developed, scaled, and deployed independently. You can replace or upgrade any part of the system without affecting the whole system. &lt;/p&gt;

&lt;p&gt;But, &lt;em&gt;what is microservice architecture?&lt;/em&gt; &lt;a href="https://www.martinfowler.com/articles/microservices.html"&gt;As called out by James Lewis and Martin Fowler&lt;/a&gt;, The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data. &lt;br&gt;
I hope it’s not that hard to guess but these microservices talk to each other via APIs and two of the most commonly used protocols are HTTP request-response with resource APIs and lightweight messaging. Although as I mentioned above, companies like Netflix and Amazon have been using microservices for quite a long time, many small organizations have also started adopting API first or microservice driven architectures recently, because &lt;a href="https://www.infoq.com/articles/web-apis-business-perspective/"&gt;APIs have become the heart of the global tech industry in the past decade.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rise of Microservices
&lt;/h2&gt;

&lt;p&gt;Let’s dive more into the origins of APIs and Microservices as they share a common origin story. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rise of service-oriented architectures&lt;/li&gt;
&lt;li&gt;Rise of cloud computing and managed services&lt;/li&gt;
&lt;li&gt;Rise of decentralization movement&lt;/li&gt;
&lt;li&gt;Rise of Agile movement&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rise of service-oriented architectures
&lt;/h3&gt;

&lt;p&gt;As we all know, building distributed systems is hard and managing them is even harder. The rise of the web back in the days opened the doors to innovate the way we build distributed systems and that’s where Service based architecture came into the picture. SOA was defined as a style of multi-tier computing that helps organizations share logic and data among multiple applications and usage modes. [as defined by &lt;a href="https://www.gartner.com/en/documents/302868"&gt;Gartner&lt;/a&gt; ]&lt;/p&gt;

&lt;p&gt;Though a failed movement back in the time, SOA surely helped a lot in initiating microservice movements, and even organizations like Netflix and Amazon were calling their architectures SOAs before the microservice movement. Due to the centralized nature of ESB topology and some other reasons, SOAs increased complexity and introduced bottlenecks, and the costs of implementing an SOA infrastructure (based on the ESB, registry, and service platform template) were excessive.  &lt;/p&gt;

&lt;p&gt;Due to these problems, people started looking for better alternatives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rise of cloud computing and managed services
&lt;/h3&gt;

&lt;p&gt;The rise of RESTful Web APIs arose as a lighter-weight alternative to SOAP services. -- a style of interconnecting applications that had evolved organically on the Web --. The distributed nature of cloud infrastructure challenged the placement of the centralized ESB topology.&lt;br&gt;
Everyone started adopting microservices due to the benefits they provided and here we are today looking at complex modern architectures. Cloud computing helped in removing barriers for deployment and provided a variety of new use-cases for APIs. It worked out as a novel platform for deploying more granular API-fronted application components. Cloud services provided another reason to move towards more service-oriented and modular deployment architectures. &lt;/p&gt;

&lt;h3&gt;
  
  
  Rise of decentralization movement
&lt;/h3&gt;

&lt;p&gt;As we discussed earlier, at one point in time, service-oriented computing became an increasingly popular paradigm for modeling and building distributed systems in open and heterogeneous environments. However, proposed service-oriented architectures are typically based on centralized components, such as service registries or service brokers, that introduce reliability, management, and performance issues. &lt;/p&gt;

&lt;p&gt;During this whole time, the capabilities and scale of distributed systems have increased. The trend towards decentralization in both the system itself as well as the supporting organization started to catch up and the decentralization moment started. &lt;/p&gt;

&lt;h3&gt;
  
  
  Rise of Agile movement
&lt;/h3&gt;

&lt;p&gt;In his blog post titled “&lt;a href="http://www.codingthearchitecture.com/2013/09/03/what_is_agile_software_architecture.html"&gt;Coding the Architecture&lt;/a&gt;”, &lt;a href="https://twitter.com/simonbrown"&gt;Simon Brown&lt;/a&gt; pointed out that agile architecture does not naturally emerge from agile development practices. Rather, it must be consciously sought. Note that his description of agile software architecture is a perfect match for microservice architecture. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If we look at the characteristics of agile software architecture, we tend to think of something that is built using a collection of small, loosely coupled components/services that collaborate together to satisfy an end-goal. This style of architecture provides agility in a number of ways. Small, loosely coupled components/services can be built, modified, and tested in isolation, or even ripped out and replaced depending on how requirements change. This style of architecture also lends itself well to a very flexible and adaptable deployment model, since new components/services can be added and scaled if needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agile software movement arose as a reaction to the same centralized approach to enterprise IT that hampered the SOA movement. Agile’s popularity and success in software development led to the CI/CD approach to software deployment, followed by the cultural philosophy of the DevOps movement. Between CI/CD, DevOps, agile development, and progressive delivery, the software delivery train also started speeding up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Microservices
&lt;/h2&gt;

&lt;p&gt;Now that we have gone through the reasons behind the rise of Microservices, Let’s try to understand what business value microservices provide. &lt;/p&gt;

&lt;p&gt;The main reason that drives the move to microservices in any organization is speed and agility at scale which helps in software delivery. Reducing cross-team coordination, building diverse language applications, flexible deployments, enhanced manageability are some of the additional perks that organizations with microservice architectures enjoy. &lt;/p&gt;

&lt;p&gt;Many of the benefits which come with Microservice architectures are mostly due to the API-first nature of microservices and here are a few of them: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Composability:&lt;/strong&gt; When services are published through an API, it is easier to use them in multiple business contexts to assist in various business processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testability:&lt;/strong&gt; When services are accessible over a network boundary, it is easier to isolate tests and exercise individual components of the system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Each microservice can be scaled autonomously without disrupting the other microservices that comprise the application. When demand increases, you only need to upgrade or divert more resources to the microservice affected by the increasing demands. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evolvability:&lt;/strong&gt; When services are exposed through an API, implementation details can be hidden from the consumer, making it easier to change components without impacting dependent parts of the system &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensibility:&lt;/strong&gt; When a complex system is broken down into modular APIs, it is easier to understand the overall business functionality of the system, which helps in both designing and maintaining the system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatability:&lt;/strong&gt; Along with the data plane API benefits above, control plane APIs allow automation in the deployment and management of microservices, thus increasing the velocity of software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But as we know &lt;em&gt;with great power comes great responsibility&lt;/em&gt; and the same thing applies to microservices and API ecosystems as well. These complex systems bring a lot of challenges with them and we will discuss those challenges in the next part of this blog post. &lt;/p&gt;

&lt;p&gt;Until then, if your organization is using microservice architecture and exploring Observability solutions, feel free to check out our Open Source Observability platform &lt;a href="https://github.com/hypertrace/hypertrace"&gt;Hypertrace&lt;/a&gt;. If you are in transition and want to learn more about Observability or want to contribute to Hypertrace, &lt;a href="https://bit.ly/hypertrace-community-slack"&gt;join our slack community&lt;/a&gt; to interact with folks who have been through this transition or going through this transition. &lt;/p&gt;

&lt;h3&gt;
  
  
  References:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.martinfowler.com/articles/microservices.html"&gt;https://www.martinfowler.com/articles/microservices.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/articles/web-apis-business-perspective/"&gt;https://www.infoq.com/articles/web-apis-business-perspective/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/documents/302868"&gt;https://www.gartner.com/en/documents/302868&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoworld.com/article/3080611/learning-from-soa-5-lessons-for-the-microservices-era.html"&gt;https://www.infoworld.com/article/3080611/learning-from-soa-5-lessons-for-the-microservices-era.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.broadcom.com/doc/microsurfaces-the-role-of-apis-in-a-microservice-architecture"&gt;https://docs.broadcom.com/doc/microsurfaces-the-role-of-apis-in-a-microservice-architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thoughtworks.com/insights/blog/microservices-nutshell"&gt;https://www.thoughtworks.com/insights/blog/microservices-nutshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://link.springer.com/article/10.1007/s12083-009-0062-6"&gt;https://link.springer.com/article/10.1007/s12083-009-0062-6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html"&gt;https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloud</category>
      <category>architecture</category>
      <category>kubernetes</category>
      <category>agile</category>
    </item>
    <item>
      <title>Introducing Hypertrace</title>
      <dc:creator>Shubham Jindal</dc:creator>
      <pubDate>Mon, 17 May 2021 12:00:21 +0000</pubDate>
      <link>https://dev.to/hypertrace/introducing-hypertrace-4k87</link>
      <guid>https://dev.to/hypertrace/introducing-hypertrace-4k87</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/hypertrace/hypertrace"&gt;Hypertrace&lt;/a&gt; is a distributed tracing platform which digests distributed traces from different sources, provides deep observability into your microservices, and slice-and-dices your services, endpoints, traces and attributes.&lt;/p&gt;

&lt;p&gt;A well loaded definition! And still it doesn't do it justice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microservices
&lt;/h2&gt;

&lt;p&gt;Microservices are trendy these days. But the more microservices, the more the burden of managing, monitoring and debugging them. Microservices can be like a spider web, just waiting to tangle you up in its trap.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l2O_ycjf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/6996/1%2AkAWXqX663tFvl-JWIcpMlg.png" alt="Monolithic vs Microservices"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Monolithic vs Microservices&lt;/em&gt; Source: &lt;a href="https://devopedia.org/microservices"&gt;https://devopedia.org/microservices&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Distributed Tracing
&lt;/h2&gt;

&lt;p&gt;Distributed Tracing is a way to provide Observability into your services within your microservices architecture.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Monitoring tells you whether a system is working, observability lets you ask why it isn't working&lt;br&gt;&lt;br&gt;
— Baron Schwartz&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W-0J6DlO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3624/1%2AgdzvMSWi4NfTQYFi6lNPEw.png" alt="Observability using Distributed Tracing"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Observability using Distributed Tracing&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Distributed Tracing tells a story of what's already happened in your system so you can quickly identify your problem and find a solution.&lt;br&gt;
&lt;a href="https://zipkin.io/"&gt;Zipkin&lt;/a&gt; and &lt;a href="https://www.jaegertracing.io/"&gt;Jaeger&lt;/a&gt; are currently the two most popular distributed tracing systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Hypertrace?
&lt;/h2&gt;

&lt;p&gt;Hypertrace turns distributed traces into Services, APIs and Backends using a custom pluggable architecture. Any custom logic can be plugged to discover business specific entities with simple configuration changes and surfaces the data to be slice-and-diced, instead of constrained by generic tracing platform features. &lt;br&gt;
Hypertrace supports all standard &lt;a href="https://docs.hypertrace.org/instrumentation/"&gt;instrumentation&lt;/a&gt; libraries and agents. If your application is already instrumented with OpenTelemetry, Jaeger or Zipkin, Hypertrace will work out of the box with your application telemetry data. &lt;/p&gt;

&lt;p&gt;In addition, Hypertrace provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A trace enricher which turns traces into a service dependency graph with endpoints, traces and attributes&lt;/li&gt;
&lt;li&gt;Flexibility to carefully examine transactions&lt;/li&gt;
&lt;li&gt;Observability for Services, APIs, and Backends (databases, cloud services, etc.)&lt;/li&gt;
&lt;li&gt;Metrics and Visibility into Services, APIs, and Backends&lt;/li&gt;
&lt;li&gt;Root Cause Analysis&lt;/li&gt;
&lt;li&gt;Identification of Performance Bottlenecks&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Pfz_6kH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2AhSQ9fFsM3Wt4mOWCvN5lWg.png" alt="Slicing and Dicing Transactions"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Slicing and Dicing Transactions&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6GPkbY4Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2AE9lOwH4RW0ys7KgX6NxYMg.png" alt="Distributed Tracing"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Distributed Tracing&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ND01d9N7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2400/1%2At2dXn8M-TW4K4qx5U7dq1Q.gif" alt="Services, APIs and Backends"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Services, APIs and Backends&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hypertrace boasts of features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P50, P90, P99 metrics (&lt;em&gt;Averages can be misleading&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Better data visualizations (&lt;em&gt;Waterfall, Scatter Plot, Area Chart&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Wide range of filters, search, sorting, and grouping functionalities&lt;/li&gt;
&lt;li&gt;Automatic discovery of Services, APIs, and Backends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hypertrace is for you, if you are looking for the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traces with duration &amp;gt; 5 seconds&lt;/li&gt;
&lt;li&gt;Traces with status code as 4xx or 5xx ️&lt;/li&gt;
&lt;li&gt;Number of calls made to an API&lt;/li&gt;
&lt;li&gt;APIs within a Service&lt;/li&gt;
&lt;li&gt;Performance of Services, APIs, and Backends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To learn more, visit &lt;a href="https://docs.hypertrace.org/getting-started/"&gt;Hypertrace docs&lt;/a&gt; or &lt;a href="https://docs.hypertrace.org/getting-started/"&gt;Getting Started with Hypertrace&lt;/a&gt;. &lt;br&gt;
Do check out Hypertrace on &lt;a href="https://github.com/hypertrace/hypertrace"&gt;Github&lt;/a&gt; and join Hypertrace community on &lt;a href="https://bit.ly/hypertrace-community-slack"&gt;Slack&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloudnative</category>
      <category>kubernetes</category>
      <category>contributorswanted</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
