<?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>Forem: Adarsh Anand</title>
    <description>The latest articles on Forem by Adarsh Anand (@adahanu074).</description>
    <link>https://forem.com/adahanu074</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%2F916029%2F1381b5f5-67ef-41c9-805b-690bdb57a608.jpeg</url>
      <title>Forem: Adarsh Anand</title>
      <link>https://forem.com/adahanu074</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adahanu074"/>
    <language>en</language>
    <item>
      <title>System design (Part 2)</title>
      <dc:creator>Adarsh Anand</dc:creator>
      <pubDate>Tue, 07 Mar 2023 12:57:07 +0000</pubDate>
      <link>https://forem.com/adahanu074/system-design-part-2-1hom</link>
      <guid>https://forem.com/adahanu074/system-design-part-2-1hom</guid>
      <description>&lt;p&gt;Before proceeding any further I would suggest you to go through previous page (&lt;a href="https://dev.to/adahanu074/system-design-1h4m"&gt;https://dev.to/adahanu074/system-design-1h4m&lt;/a&gt;) and get the basic understanding of what is system design and its fundamental. This part we will be focusing on non functional characteristics which describes how the system should perform rather than what it should do. We need to understand terminologies and what are required to build system before moving further in system design.&lt;/p&gt;

&lt;p&gt;Non-functional characteristics, in other words we can say Non-functional requirements(NFRs) are a set of specifications that describe the system’s operation capabilities, constraints and attempt to improve its functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Functional and non-functional requirements&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Functional and non-functional requirements describe specific characteristics that a product must have to meet the needs of the stakeholders and the business itself. But, as you can tell from the name, they focus on different things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Functional requirements&lt;/strong&gt; define what a software product must do: its features and functions. An example of functional requirement for WhatsApp will be something like "A user must be able to edit messages after they are sent"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-functional requirements&lt;/strong&gt; specify the quality attributes of the system, hence their second name — quality attributes. Continuing our WhatsApp example, a non-functional requirement can be "A user should be able to receive the message with low latency also"&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;key types of non-functional characteristics?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H199B4h---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7yv83c8dd9jhdak1dfhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H199B4h---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7yv83c8dd9jhdak1dfhz.png" alt="key types of non functional characteristics" width="814" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets look each characteristics in detail:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Performance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Performance defines how fast a software system or a particular piece of it responds to certain users’ actions under a certain workload. In most cases, this metric explains how long a user must wait before the target operation happens. But it’s not always like that. Performance requirements may describe background processes invisible to users, e.g. backup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d9OGqAoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14lirak2k48zwyyqts2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d9OGqAoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14lirak2k48zwyyqts2f.png" alt="When response time is bad" width="420" height="316"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of performance requirements:&lt;/strong&gt;&lt;br&gt;
The landing page supporting 5,000 users per hour must provide 5 second or less response time in a application, including the rendering components and over an LTE connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Scalability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Scalability assesses the highest workloads under which the system will still meet the performance requirements. There are two ways to enable your system scale as the workloads get higher: horizontal and vertical scaling.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3HDRRt3y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csu22jen3d4wml4wnj4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3HDRRt3y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csu22jen3d4wml4wnj4n.png" alt="Scaling much needed" width="453" height="339"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of scalability requirements:&lt;/strong&gt;&lt;br&gt;
The maximum user of the website must be scalable enough to support 5000 visits at the same time while maintaining optimal performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Compatibility&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Compatibility, as an additional aspect of portability, defines how a system can coexist with another system in the same environment. For instance, software installed on an operating system must be compatible with its firewall or antivirus protection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XZhUFY56--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjc58z4u300n4wf5hzbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XZhUFY56--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjc58z4u300n4wf5hzbe.png" alt="Compatibility with browser" width="460" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of compatibility requirements:&lt;/strong&gt;&lt;br&gt;
The application must support all the browser that are present in the market&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Maintainability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Maintainability measures the amount of time, effort, and money that will be required in order to change or repair your software’s code after it’s been deployed. Even though maintainability doesn’t come into play until the software has already been launched, it should be a consideration during every step of the development cycle in order to prepare for inevitable maintenance needs. Maintainability is often measured with a metric like MTTRS — the mean time to restore the system.(must not be greater than 10 minutes)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VUXurj9Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8kkssvjl2sui8967twf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VUXurj9Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8kkssvjl2sui8967twf.jpg" alt="Maintainable code" width="880" height="610"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of maintainability requirements:&lt;/strong&gt;&lt;br&gt;
After some period/days/months, check for the working of application and it should behave as it was at the time, when it went off in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Availability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Availability describes how likely the system is accessible to a user at a given point in time. While it can be expressed as an expected percentage of successful requests, you may also define it as a percentage of time the system is accessible for operation during some time period. For instance, the system may be available 98 percent of the time during a month. Availability is perhaps the most business-critical requirement, but to define it, you also must have estimations for reliability and maintainability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OmmkGo_P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/anqwrfe62tz0komg4ems.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OmmkGo_P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/anqwrfe62tz0komg4ems.png" alt="Availability calculation" width="787" height="277"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of availability requirements:&lt;/strong&gt;&lt;br&gt;
The application must be available to end users 99.9 percent of the time every month during business hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Reliability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reliability specifies how likely the system or its element would run without a failure for a given period of time under predefined conditions. Traditionally, this probability is expressed in percentages. For instance, if the system has 85 percent reliability for a month, this means that during this month, under normal usage conditions, there’s an 85 percent chance that the system won’t experience critical failure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aauc1zdd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmvs5gfbztwezlrjlduh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aauc1zdd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmvs5gfbztwezlrjlduh.jpg" alt="Reliability without reverse coding" width="538" height="538"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of reliability requirements:&lt;/strong&gt;&lt;br&gt;
The system must perform without failure in 95 percent of use cases during a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Portability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Portability determines how a system or its element can be launched within one environment or another. It usually includes hardware, software, or other usage platform specifications. Put simply, it establishes how well actions performed via one platform are run on another. Also, it prescribes how well system elements may be accessed and may interact from two different environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ilntx1p5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lim6fr03b2lpm32dr3t0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ilntx1p5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lim6fr03b2lpm32dr3t0.jpg" alt="Portable system" width="460" height="321"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of portability requirements:&lt;/strong&gt;&lt;br&gt;
A application running on Windows 10 OS must be able to run on Windows 11 OS without any change in its configuration, behaviour and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Security&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Security is a non-functional requirement assuring all data inside the system or its part will be protected against malware attacks or unauthorized access. But there’s a catch. The lion’s share of security non-functional requirements can be translated into concrete functional counterparts. If you want to protect the admin panel from unauthorized access, you would define the login flow and different user roles as system behaviour or user actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo1QdaZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hiceaw1dttbqhqfrtwnr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo1QdaZG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hiceaw1dttbqhqfrtwnr.jpg" alt="Security" width="500" height="690"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of security requirement:&lt;/strong&gt;&lt;br&gt;
The payment processing gateway must be PCI DSS compliant.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Usability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Usability is yet another classical non-functional requirement that addresses a simple question: How hard is it to use the product? Defining these requirements isn’t as easy as it seems. Application can be used by as many people as possible with ease, whether this is end-users of a website, or administrators and content editors working with a back-end system&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H80-D-mO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5eoc9t8wkzf2jerhvcdn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H80-D-mO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5eoc9t8wkzf2jerhvcdn.jpg" alt="Usability is good" width="251" height="201"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of usability requirements:&lt;/strong&gt;&lt;br&gt;
The error rate of users logging to the application mustn’t exceed 1% percent.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Localization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Localization is the process of adapting messages, imagery, brand voice, features, and products to achieve a linguistic, cultural, and geographic fit for a given audience. The goal is to make user experiences for everyone as comfortable as possible across different cultural and regional contexts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7sI1hzK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rjn2oyxsjczlr0xipq2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7sI1hzK---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rjn2oyxsjczlr0xipq2c.png" alt="Reality vs Expectation" width="600" height="624"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of a localization requirement:&lt;/strong&gt;&lt;br&gt;
The date format must be as follows: month.date.year. It should be independent of place.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Testability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Covering the levels of test coverage in place, the effectiveness and efficiency of tests, and the quality of testing reporting, the testability quality attribute requirement relates to how confident teams can be that the system will function as intended.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t0_Q3wHq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88ji9q4imma7w1rgmaz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t0_Q3wHq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88ji9q4imma7w1rgmaz9.png" alt="This idea never fails" width="600" height="337"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of testability requirement&lt;/strong&gt;&lt;br&gt;
Below cases, the system shall have at least 35% spare CPU capacity and work in normal mode.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;200 concurrently active users.&lt;/li&gt;
&lt;li&gt;Processing requests determined to be the greatest processing demand on the system. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Feasibility&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Feasibility is the process in which we must be confident that it’s possible to complete the work in the time and/or budget dictated. For this reason feasibility touches on a number of other QARs, including time-to-market, total cost of ownership, technical knowledge, and migration requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JvgGfRJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sd7hu6g5n42i7nsmgas6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JvgGfRJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sd7hu6g5n42i7nsmgas6.jpg" alt="Is it feasible" width="600" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Example of feasibility requirement:&lt;/strong&gt;&lt;br&gt;
Without cloud orchestration/services , are we able to use open source and deploy the product in production or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note : Few of the images are just to enhance the mood, don't take it seriously.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;to be continued …&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nonfunctional</category>
      <category>systemdesign</category>
      <category>functional</category>
      <category>product</category>
    </item>
    <item>
      <title>System Design</title>
      <dc:creator>Adarsh Anand</dc:creator>
      <pubDate>Sat, 04 Mar 2023 17:15:44 +0000</pubDate>
      <link>https://forem.com/adahanu074/system-design-1h4m</link>
      <guid>https://forem.com/adahanu074/system-design-1h4m</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Here’s the simple truth: you can’t innovate on products without first innovating the way you build them.” - Alex Schleifer, Airbnb&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What is system design ?&lt;/strong&gt;&lt;br&gt;
System design is the process of defining the architecture, interfaces and data for a system that satisfies specific requirements​. Once your business or organization determines its requirements, you can begin to build them into a physical system design that addresses the needs of your customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the need of system design ?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Programming without an overall architecture or design in mind is like exploring a cave with only a flashlight: You don’t know where you’ve been, you don’t know where you’re going, and you don’t know quite where you are.” – Danny Thorpe&lt;/p&gt;
&lt;/blockquote&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%2Fuploads%2Farticles%2F9zse2i3vo43t6hiotxq3.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%2Fuploads%2Farticles%2F9zse2i3vo43t6hiotxq3.png" alt="Why we require system design"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It allows us to scale applications and create efficient architectures that are resilient and performant. Enables us to communicate effectively and helps in designing an architecture that meets those requirements. &lt;/li&gt;
&lt;li&gt;We can trade-offs between scalability, cost, performance, reliability, and maintainability. It also involves understanding the best practices and architectural patterns to use in order to make the system as robust as possible.&lt;/li&gt;
&lt;li&gt;When designing a system, it is important to consider the underlying infrastructure, such as databases, networks, and other services. We always needs to consider the design for scalability, security.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;System design fundamentals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Scaling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scalability refers to an application’s ability to handle and withstand an increased workload without sacrificing latency.​&lt;br&gt;
Two types ​&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Horizontal Scaling​ = adding more hardware to the existing hardware resource pool​&lt;/li&gt;
&lt;li&gt;Vertical Scaling = adding more power to your server.&lt;/li&gt;
&lt;/ol&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%2Fuploads%2Farticles%2Fvfbxrv268o9ur82up808.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%2Fuploads%2Farticles%2Fvfbxrv268o9ur82up808.png" alt="Vertical and Horizontal Scaling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Microservice&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microservice architecture is a distinctive method of developing software systems that tries to focus on building single-function modules with well-defined interfaces and operations.&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%2Fuploads%2Farticles%2F98tsjln6xj5jypwtliy3.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%2Fuploads%2Farticles%2F98tsjln6xj5jypwtliy3.png" alt="Monolithic and Microservice comparison"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Proxy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A proxy server is a system or router that provides a gateway between users and the internet. In other words proxy server is a computer on the internet that accepts the incoming requests from the client and forwards those requests to the destination server.&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%2Fuploads%2Farticles%2Fwet5l7lrpm7gte7y66sv.jpg" 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%2Fuploads%2Farticles%2Fwet5l7lrpm7gte7y66sv.jpg" alt="Proxy server sits between client and internet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. CAP Theorem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In computer science, the CAP theorem, sometimes called CAP theorem model or Brewer’s theorem after its originator, Eric Brewer, states that any distributed system or data store can simultaneously provide only two of three guarantees: consistency, availability, and partition tolerance (CAP).&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%2Fuploads%2Farticles%2Fkotj04r4qtu3w6wlqe9c.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%2Fuploads%2Farticles%2Fkotj04r4qtu3w6wlqe9c.png" alt="Each edge defines the requirement, what you need from database"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Storage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scalability of your system design highly depends on the way you are storing the data. Different types of data storage mechanisms are suitable to manage your data for different use cases of your system, to achieve high scalability and better response time.&lt;br&gt;
Some of the factors affecting the choice of data storage mechanisms are structure of your data, query frequency, query pattern, response time required, and scale needed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Getting data from in-memory cache is much faster than getting the data from database, file system, remote call to a third party service, or generating the data from complex computation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File Storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For handling static asserts like product images for an ecommerce solution, videos for a video streaming solution, or file in an online directory service like google drive, it is ideal use a file storage or blob storage solution. The core difference between file or blob storage and databases is, in databases you can query-on and modify individual fields of database records, whereas in file storage you can query-on file’s metadata and only query or modify the file as a whole.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time Series Databases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Time Series Database (TSDB) is a database specifically designed and optimised for time-stamped sequential data. It is suitable for measurements or events data that is tracked, monitored, and aggregated sequentially over a period of time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Warehouse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data warehouse is a centralised and consolidated large amount of historical data solely intended to perform queries and analysis, this data is derived from a wide range of sources like application logs, transactions, and user events. It’s analytics capabilities allow organisations to derive valuable business insights from their data and improve decision making.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Lakes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data lakes are used when organisations need low-cost storage of unformatted, unstructured data from multiple sources that they intend to use for some purpose in the future. The structure, integrity, selection, and format of the various dataset is derived at the time of analysis by the person doing the analysis, at a later point in time in future.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relational database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a collection of data entities with pre-defined relationships between them, mostly based on their domain language. These entities are organised as tables with rows and columns. Each column holds a certain kind of data called a field or attribute about the data record, and each row represents a collection of related fields. attributes of one data record.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NoSQL database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NoSQL databases are build for flexible schemas, and are recognised for their performance at scale. Key difference between NoSQL and relational databases is that NoSQL is for unstructured storage. This means NoSQL databases do not have fixed table structures, they are schema free&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database combinations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a modern microservices based application we use a combination of data storage mechanisms. Microservices architecture fundamentally supports it as it allows you to choose different databases for different services based on the use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;to be continued …&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>hld</category>
      <category>microservices</category>
      <category>cap</category>
      <category>engineering</category>
    </item>
  </channel>
</rss>
