<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[EzVizi System Design Newsletter]]></title><description><![CDATA[Discover easy visuals, a design delight,
In our weekly newsletter, get insights so bright!
System design made simple, for your career's flight,
Sign up today, and make your future bright!
Download high-resolution System Design slides in PDF format]]></description><link>https://blog.ezvizi.com</link><image><url>https://substackcdn.com/image/fetch/$s_!bbsA!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc166e55-0f0c-4100-a682-c218b777b06f_1024x1024.png</url><title>EzVizi System Design Newsletter</title><link>https://blog.ezvizi.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Apr 2026 09:29:06 GMT</lastBuildDate><atom:link href="https://blog.ezvizi.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[blog.EzVizi.com]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[ildarkhanov@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[ildarkhanov@substack.com]]></itunes:email><itunes:name><![CDATA[EzVizi System Design]]></itunes:name></itunes:owner><itunes:author><![CDATA[EzVizi System Design]]></itunes:author><googleplay:owner><![CDATA[ildarkhanov@substack.com]]></googleplay:owner><googleplay:email><![CDATA[ildarkhanov@substack.com]]></googleplay:email><googleplay:author><![CDATA[EzVizi System Design]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[EZF-006. Should You Use Kubernetes?; CQRS. Command Query Responsibility Segregation; gRPC API Architecture; API Design: 51 ✔️DO's and ❌DON'Ts; Functional Requirements (FR) vs Non-functional (NFR)]]></title><description><![CDATA[Recap on system design for this week:]]></description><link>https://blog.ezvizi.com/p/ezf-006-should-you-use-kubernetes</link><guid isPermaLink="false">https://blog.ezvizi.com/p/ezf-006-should-you-use-kubernetes</guid><pubDate>Sat, 04 Nov 2023 23:59:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gkbn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>Should You Use Kubernetes?</p></li><li><p>CQRS. Command Query Responsibility Segregation</p></li><li><p>WebSockets.&nbsp;&nbsp;API Architecture style</p></li><li><p>API Design: 51 &#10004;&#65039;DO's and &#10060;DON'Ts</p></li><li><p>Functional Requirements (FR) vs Non-functional (NFR)</p></li></ul><h2>1. Should You Use Kubernetes?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gkbn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gkbn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 424w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 848w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 1272w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gkbn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png" width="1456" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2843333,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gkbn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 424w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 848w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 1272w, https://substackcdn.com/image/fetch/$s_!gkbn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2d1e953-c5d0-4d40-9f56-ebb8819ed640_5602x4044.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Kubernetes (or K8s) is an open-source system for automating the deployment, scaling, and management of containerized applications. Kubernetes is an immensely powerful tool, but whether you should use it depends on your specific needs and constraints. Here are some considerations.<br><br>Why You Should Consider Kubernetes:<br>&#128640; Automated Deployment: Enables streamlined and consistent application rollouts.<br>&#128200; Scalability: Effortlessly scale applications based on demand, ensuring efficient utilization of resources.<br>&#9937; Self-Healing: Provides automatic recovery from application or infrastructure failures.<br>&#127757; Portability: Ensures consistent deployments across various environments, be it on-premises or different clouds.<br>&#128256; Service Discovery &amp; Load Balancing: Offers efficient traffic management and container discoverability.<br>&#127793; Resource Efficiency: Ensures optimal use of infrastructure resources, potentially saving costs.<br>&#128189; Storage Orchestration: If you require seamless integration with various storage solutions.<br>&#128272; Secrets Management: Securely manage sensitive data, separate from application configurations.<br>&#128260; Batch Execution: Efficiently manage batch processing tasks, beneficial for data processing workloads.<br>&#128268; Extensibility: Adapt and customize according to specific needs using its vast ecosystem.<br><br>Why You Might Hesitate:<br>&#129300; Complexity: The steep learning curve can be intimidating and may demand significant effort and time.<br>&#128012; Resource Overhead: Might be overkill for small applications due to its resource demands.<br>&#128274; Security Concerns: Requires intricate configurations to ensure security, and mistakes can be costly.<br>&#128376;&#65039; Networking Issues: Network configurations, especially in hybrid or on-premises environments, can be challenging.<br>&#128190; Storage Challenges: Stateful applications have added complexities, even though Kubernetes has provisions for them.<br>&#9881;&#65039; Upgrade Concerns: Upgrades may introduce incompatibilities or require significant planning.<br>&#9729;&#65039; Vendor Dependencies: There's a potential for cloud-specific lock-in, especially when using provider-specific extensions.<br>&#128736;&#65039; Tool Fragmentation: The vast ecosystem can be overwhelming, making it hard to choose the right tools.<br>&#128202; Monitoring &amp; Logging: The native capabilities may not be sufficient, necessitating external tool integrations.<br>&#128372;&#65039; Operational Costs: It might demand specialized teams for management, especially at a larger scale.<br><br>Your decision should weigh the pros and cons based on your organization's specific needs, the scale of operations, and available resources.<br><br>&#10067; Does Kubernetes seem like the right fit for your current and future goals? &#129335;&#8205;&#9794;&#65039;</p><h2>2. CQRS. Command Query Responsibility Segregation</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t5XM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t5XM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 424w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 848w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 1272w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t5XM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png" width="1456" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1353346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t5XM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 424w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 848w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 1272w, https://substackcdn.com/image/fetch/$s_!t5XM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9b34de0-b669-478f-8acc-049e4f7be5c4_4676x2168.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>2.1. Definition. </p><p>CQRS (Command Query Responsibility Segregation) - a software architectural pattern that segregates operations that modify data (commands) from operations that retrieve data (queries).<br>CQRS is a powerful pattern for certain types of applications but may be an overkill for simpler ones. Its adoption should be weighed against the specific needs of the project, considering factors like system complexity, team expertise, and performance requirements. It's not a one-size-fits-all solution and is best applied when the benefits outweigh the costs and complexity.<br><br>2.2 Concepts &#128161;<br>- Command: Represents actions or changes, modifies data but does not return data, typically results in a change to the application&#8217;s state.<br>- Query: Represents data retrieval requests, returns data but does not modify it.<br><br>2.3. Benefits:<br>- Scalability: Independent scaling of read and write operations, useful for high load scenarios.<br>- Flexibility: Different data storage choices for read and write.<br>- Simplified Code: Segregation allows for a cleaner codebase.<br>- Enhanced Security: Applying distinct security measures for read and write operations.<br><br>2.4. Disadvantages:<br>- Complexity: Can be overkill for simple CRUD apps.<br>- Learning Curve: Steep for newcomers.<br>- Dev Effort: More code due to separation.<br>- Data Duplication: Risk of double storage.<br>- Misapplication: Risk without domain knowledge.<br>- Costs: Increased infrastructure expenses.<br><br>2.5. Challenges:<br>- Data Sync: Balancing data between command and query sides.<br>- Eventual Consistency: System might not be immediately consistent post-command.<br>- Testing: Ensuring data integrity during command failures.<br>- Errors: Complex error handling due to segregation.<br><br>2.6. Common Use Cases:<br>- Highly Scalable Systems. Systems needing separate read and write scaling.<br>- Complex Business Logic. Distinct domain logic for writing and reading.<br>- Event-Driven Architectures. Often combined with Event Sourcing.<br><br>2.7. Related Patterns &amp; Concepts:<br>- Event Sourcing: Storing changes as events, great with CQRS for system history.<br>- Domain-Driven Design (DDD): Focuses on modeling business domains, CQRS can be a key pattern within DDD.<br><br>&#10067; Does CQRS seem like the right fit for your current project? &#129335;&#8205;&#9794;&#65039;</p><h2>3. gRPC.&nbsp;API Architecture style</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Tz4K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tz4K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tz4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif" width="926" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:780191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Tz4K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!Tz4K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cda7e0f-1aa7-4126-be72-7e956249ff22_926x1080.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>gRPC, an exceptional open-source framework crafted by Google, is revolutionizing the realm of microservices. Let's delve into the reasons behind its rising prominence::<br><br>3.1. Message formats:<br>&#9673; Protocol Buffers<br><br>3.2. &#127775;Advantages:<br>&#9989; High Performance: Uses Protocol Buffers&nbsp;&nbsp;&nbsp;&nbsp;<br>&#9989; Language Agnostic: Supports multiple languages&nbsp;&nbsp;&nbsp;&nbsp;<br>&#9989; Bi-Directional Streaming: Real-time communication&nbsp;&nbsp;&nbsp;&nbsp;<br>&#9989; Deadlines/Timeouts: Clients set RPC wait times&nbsp;&nbsp;&nbsp;&nbsp;<br>&#9989; Pluggable: Supports authentication, load balancing&nbsp;&nbsp;&nbsp;&nbsp;<br>&#9989; Built-in Authentication: Uses SSL/TLS<br><br>3.3. &#128533;. Disadvantages:<br>&#10060; Learning Curve: Needs understanding of gRPC<br>&#10060; Browser Support: Limited without gRPC-Web<br>&#10060; HTTP/2 Dependent: Not supported everywhere<br>&#10060; Complexity: Might be overkill for simple services<br>&#10060; Tooling: Less extensive than REST<br>&#10060; Interoperability: Limited with non-gRPC systems<br><br>3.4. &#128203;Use Cases:<br>&#9673; Microservices: Efficient inter-service communication<br>&#9673; Real-time Apps: Supports real-time data exchange<br>&#9673; Mobile Clients: Optimized communication for mobile backends<br>&#9673; Point-to-Point: Direct system-to-system communication<br>&#9673; Polyglot Systems: Supports multiple programming languages<br>&#9673; Cloud-Native Apps: Integrates with cloud-native platforms<br>&#9673; Service Mesh: Used in architectures like Istio<br>&#9673; Browser Clients (gRPC-Web): Web apps communicate with gRPC services<br>&#9673; IoT Communication: Efficient server-to-IoT device communication<br><br>&#10067;&nbsp;Guys, have you integrated gRPC in your projects? How did it transform your workflow?</p><h2>4. API Design: 51 &#10004;&#65039;DO's and &#10060;DON'Ts.</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MsA0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MsA0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 424w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 848w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 1272w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MsA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png" width="1456" height="4264" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:4264,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6169950,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MsA0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 424w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 848w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 1272w, https://substackcdn.com/image/fetch/$s_!MsA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09238d6e-973a-4ac9-afd4-100319cfec18_3720x10894.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>APIs are the backbone of modern applications, enabling seamless integration and communication between systems.<br>&#10067; But how can we ensure our APIs are user-friendly, efficient, and secure?<br><br>4.1. Requirement Gathering<br>&#10004;&#65039;DO: Identify all potential users of the API. Example: E-commerce API users could be customers, administrators, and suppliers.<br>&#10060;DON'T: Assume you know all the requirements without consulting stakeholders<br><br>4.&nbsp;2. Identify the Main Objects/Entities<br>&#10004;&#65039;DO: Break down the application into core entities. Example: Users, Products, Orders, etc<br>&#10060;DON'T: Overcomplicate with too many entities initially<br><br>4.3. Define the Endpoints<br>DO: Use clear, intuitive endpoint names. Example: GET /products to retrieve products<br>&#10060;DON'T: Use ambiguous endpoint names. Bad Example: GET /getp<br><br>4.4. Resource Names (Nouns)<br>&#10004;&#65039;DO: Use nouns. GET /products @app.route('/products', methods=['GET']) def get_products():<br>&#10060;DON'T: Use verbs. Bad Example: GET /getProducts @app.route('/getProducts', methods=['GET']) def get_products():<br><br>4.5. Plurals<br>&#10004;&#65039;DO: GET /users/123<br>&#10060;DON'T: Bad Example: GET /user/123<br><br>4.6. Idempotency<br>&#10004;&#65039;DO: Ensure methods like PUT and DELETE are idempotent. Multiple identical requests should have the same effect as one request. Multiple PUT /products/123 with the same data shouldn't create multiple products.<br>&#10060;DON'T: Allow multiple identical requests to produce different outcomes. Bad Practice: Each PUT /products/123 creating a new product<br><br>4.7. Versioning<br>&#10004;&#65039;DO: GET /v1/products<br>&#10060;DON'T: Bad Example: GET /productsNew<br><br>4.8. Soft Deletion<br>&#10004;&#65039;DO: DELETE /products/123 // Marks as deleted, doesn't actually remove GET /products?includeDeleted=true<br>&#10060;DON'T: Immediately and permanently delete data without a backup or recovery option.<br><br>4.9. Pagination<br>&#10004;&#65039;DO: For endpoints that can return a large number of results, always implement pagination GET /products?page=2&amp;limit=10<br>&#10060;DON'T: Return all records without pagination. Bad Practice: GET /users returning thousands of records.<br><br>4.10. Sorting<br>&#10004;&#65039;DO: Allow sorting by different fields /products?sort=price_asc<br>&#10060;DON'T: Lack flexibility in sorting options<br><br>4.11. Filtering<br>&#10004;&#65039;DO: Allow filtering on relevant fields. /products?category=electronics<br>&#10060;DON'T: Return all data without filtering options<br><br>For additional 40 DOs and DON'Ts, refer to the slide.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>5. Functional Requirements (FR) vs Non-functional (NFR)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S3Lg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3Lg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 424w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 848w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 1272w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3Lg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png" width="1456" height="1393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1393,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2957867,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S3Lg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 424w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 848w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 1272w, https://substackcdn.com/image/fetch/$s_!S3Lg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea1b769d-a5dd-46bb-b75b-0f53a5c4b44d_5326x5096.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>5.1.&#128736; Functional Requirements:<br>&#128313; Definition: Describe the specific functionalities or tasks a system should perform.<br>&#128313; Nature: Focus on WHAT the system must do.<br>&#128313; Examples:<br>&#128221; User registration<br>&#128269; Search functionality<br>&#128179; Payment processing<br>&#128313; Focus: Features and capabilities.<br>&#128313; Documentation: Use cases, user stories, functional specifications.<br>&#128313; Validation: Through functional testing like unit testing and integration testing.<br>&#128313; Change Frequency: Can change based on business needs and user feedback.<br>&#128313; Stakeholders: Often of primary interest to users, business analysts, and developers.<br>&#128313; Measurement: Can be validated as either 'met' or 'not met'.<br><br>5.2.&#127775; Non-Functional Requirements:<br>&#128313; Definition: Define how a system should behave, setting standards for system performance, reliability, etc.<br>&#128313; Nature: Focus on HOW the system does it.<br>&#128313; Examples:<br>&#9889; Response time<br>&#128200; Scalability<br>&#128274; Security<br>&#128101; Usability<br>&#128313; Focus: Quality attributes or system properties.<br>&#128313; Documentation: Performance benchmarks, SLAs, quality attributes.<br>&#128313; Validation: Through non-functional testing like performance testing and security audits.<br>&#128313; Change Frequency: Typically remain consistent unless there's a change in system architecture or technology.<br>&#128313; Stakeholders: Typically of interest to system architects, administrators, and sometimes users.<br>&#128313; Measurement: Often quantified through metrics (e.g., 99.9% uptime, response time under 2 seconds).<br><br>For more details refer to a diagram.<br><br>&#9881;&#65039; Requirements management tools:<br><a href="https://www.linkedin.com/feed/hashtag/?keywords=jira&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#JIRA</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=accompa&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Accompa</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=enterprisearchitect&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#EnterpriseArchitect</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=innoslate&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Innoslate</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=polarion&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Polarion</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=modernrequirements&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#ModernRequirements</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=ibmdoorsnext&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#IBMDOORSNext</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=codebeamer&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Codebeamer</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=jamasoftware&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#JamaSoftware</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=visure&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Visure</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=clickup&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#ClickUp</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=spirateam&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#SpiraTeam</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=xebrio&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Xebrio</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=wrike&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Wrike</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=gatherspace&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#GatherSpace</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=irisintelligence&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#IrisIntelligence</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=aquaalm&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#AquaALM</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=aha&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Aha</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=reqtest&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#ReQtest</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=orcanos&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#Orcanos</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=perforcehelixrm&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#PerforceHelixRM</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=reqview&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7124918832359505921">#ReqView</a><br><br>&#10067; Which requirements management tools do you use in your projects or organization?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>#Agile #APIDesign #APIEndpoints #APIFramework #APIGateway #APIIntegration #APIManagement #APIOptimization #APIPerformance #APIRateLimiting #APIRequest #APIResponse #APISecurity #APITesting #APIs #APIVersioning #APIAuthentication #APIAuthorization #AWS #Azure #Backend #BackendDev #BackendDevelopment #BestPractices #BigData #CleanCode #Cloud #CloudComputing #CloudArchitecture #CodeLife #Coding #CodingTips #CommandQueryResponsibilitySegregation #ContinuousDelivery #ContinuousIntegration #CQRS #CRUD #DataModeling #DataScience #DDD #DesignPatterns #Developer #DevOps #DevTools #Docker #DomainDrivenDesign #EnterpriseArchitecture #EnterpriseSolutions #EventDriven #EventSourcing #Filtering #Frontend #gRPC #GUIDs #ITArchitecture #Integration #Java #JavaScript #Jenkins #K8s #Kubernetes #Linux #Localization #MachineLearning #Microservices #Modernizing #OWASP #Pagination #Permissions #Programming #Python #RateLimiting #RoleBasedAccess #SOLIDPrinciples #SQL #Scalability #Security #Software #SoftwareArchitecture #SoftwareDevelopment #SoftwareEngineering #SoftwarePatterns #Sorting #SystemArchitecture #SystemDesign #TechInnovation #TechStrategy #TechTalk #TechWorld #UserExperience #WebDevelopment #XML</p>]]></content:encoded></item><item><title><![CDATA[EZF-005. AWS, Azure, GCP, Cloud agnostic offerings based on data type and needs; Virtualization vs Containerization; WebSockets. API Architecture; Python List Methods; Back-of-the-envelope estimation]]></title><description><![CDATA[Recap on system design for this week:]]></description><link>https://blog.ezvizi.com/p/ezf-005-aws-azure-gcp-cloud-agnostic</link><guid isPermaLink="false">https://blog.ezvizi.com/p/ezf-005-aws-azure-gcp-cloud-agnostic</guid><pubDate>Sun, 29 Oct 2023 06:40:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Cuvq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>AWS, Azure, GCP, Cloud agnostic offerings based on data type and needs</p></li><li><p>Virtualization vs Containerization</p></li><li><p>WebSockets.&nbsp;&nbsp;API Architecture style</p></li><li><p>Python List Methods</p></li><li><p>Back-of-the-envelope estimation</p></li></ul><h2>1. AWS, Azure, GCP, Cloud agnostic offerings based on data type and needs</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cuvq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cuvq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 424w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 848w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 1272w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cuvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png" width="1456" height="2250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2250,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1690338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cuvq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 424w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 848w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 1272w, https://substackcdn.com/image/fetch/$s_!Cuvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747850b1-d9fa-4e75-ae4a-82961a970089_3352x5180.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When selecting a database or data store, it's essential to consider the nature of your data. Structured data typically requires databases that can handle defined schemas and relationships. Semi-structured data, which might include formats like JSON or geospatial data, often benefits from more flexible database solutions. Unstructured data, such as text or images, might be best stored in specialized storage solutions or data lakes. Each major cloud provider, including AWS, Azure, and GCP, offers a variety of databases tailored to these data types. Additionally, there are cloud-agnostic options available for those seeking platform-independent solutions. For a comprehensive breakdown of offerings based on data types, please refer to the provided table.</p><h2>2. Virtualization vs Containerization</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dTua!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dTua!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 424w, https://substackcdn.com/image/fetch/$s_!dTua!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 848w, https://substackcdn.com/image/fetch/$s_!dTua!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!dTua!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dTua!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png" width="1456" height="824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:284871,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dTua!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 424w, https://substackcdn.com/image/fetch/$s_!dTua!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 848w, https://substackcdn.com/image/fetch/$s_!dTua!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!dTua!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb599ecb7-147c-4420-86fb-d5c1c173cdf4_2388x1352.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>2.1. Virtualization:</h2><p>&#128313;Level: Operates at the hardware level.<br>&#128313;Technology: Uses hypervisors (Type 1 like VMware vSphere, Microsoft Hyper-V or Type 2 like Oracle VirtualBox) to create and run virtual machines (VMs).<br>&#128313;Components: Each VM has:<br>- Its own full OS instance.<br>- A virtual copy of all the hardware that the OS requires.<br>&#128313;Isolation: VMs are fully isolated from each other.<br>&#128313;Resource Overhead: Generally, VMs have more overhead due to the duplication of full OS instances and emulated hardware.<br>&#128313;Use Cases: Ideal for running multiple instances of entirely different operating systems or different configurations of the same OS.</p><h2>2.2. Containerization:</h2><p>&#128312;Level: Operates at the OS level.<br>&#128312;Technology: Uses container platforms (like Docker, containerd, or rkt) to create and run containers.<br>&#128312;Components: Containers:<br>- Share the host OS kernel.<br>- Package only the application and its dependencies.<br>&#128312;Isolation: Containers are isolated from each other but share the same OS kernel.<br>&#128312;Resource Overhead: Containers are lightweight with minimal overhead since they share the same OS kernel and avoid hardware emulation.<br>&#128312;Use Cases: Ideal for microservices, scalable cloud-native applications, and situations where you want to maintain consistent environments between development, testing, and production.</p><h2>2.3. Key Differences:</h2><p>&#128994;Efficiency: Containers are generally more resource-efficient than VMs.<br>&#128994;Startup Time: Containers start faster as they don't need to boot an entire OS.<br>&#128994;Portability: Containers encapsulate dependencies, making them highly portable across different stages of development and even between cloud environments.<br>&#128994;Management Tools: Virtualization uses tools like VMware vCenter, while containerization has orchestration tools like Kubernetes.<br><br>While both virtualization and containerization allow for environment isolation, they differ in their approach, efficiency, and use cases. The choice between them depends on the specific needs of a project or infrastructure.<br><br>How do security concerns differ between containerization, which shares an OS kernel, and virtualization with separate OS instances?<br><br>&#10067; How do security concerns differ between containerization, which shares an OS kernel, and virtualization with separate OS instances?</p><h2>3. WebSockets.&nbsp;&nbsp;API Architecture style<br></h2><p>Ever wondered how your favorite chat apps or live trading platforms update so swiftly? The magic lies in WebSockets, an API architecture style enabling real-time, two-way communication. &#128260;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JUeC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JUeC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JUeC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif" width="926" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:587749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JUeC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!JUeC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf078ca4-d4f0-45d1-a07a-fe49a89ea717_926x1080.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>3.1. Message formats:</h3><p>&#9673; Text<br>&#9673; Binary<br>&#9673; JSON<br>&#9673; XML<br>&#9673; Custom</p><h3>3.2. Advantages:</h3><p>&#9989; Full-Duplex: Bidirectional communication<br>&#9989; Real-Time: Ideal for instant data exchange<br>&#9989; Reduced Latency: Faster data transfer<br>&#9989; Efficient: No overhead of constant connections<br>&#9989; Persistent Connection: Stays open for data<br>&#9989; Standardized: Consistent across implementations</p><h3>3.3. Disadvantages</h3><p>&#10060; Complexity: More challenging than traditional HTTP<br>&#10060; Firewall Issues: Some might block WebSockets<br>&#10060; Fallback Needs: For unsupported environments<br>&#10060; Resource Use: Can consume more server resources<br>&#10060; Security: Requires careful implementation<br>&#10060; Lacks Metadata: Unlike HTTP headers</p><h3>3.4. &#128203; Use cases</h3><p>&#9673; Chat Applications: Real-time messaging between users<br>&#9673; Online Gaming: Multiplayer games with instant interactions<br>&#9673; Live Sports Updates: Real-time score and game updates<br>&#9673; Financial Trading Platforms: Live updates on stock prices and trades<br>&#9673; Collaboration Tools: Real-time document editing and collaboration<br>&#9673; Notifications: Instant alerts and updates for users<br>&#9673; Live Feeds: Streaming news, social media, or other feeds<br>&#9673; Remote Device Control: Controlling IoT devices in real-time<br>&#9673; Monitoring &amp; Dashboards: Live updates on system or data metrics<br>&#9673; Interactive Seminars &amp; Webinars: Real-time audience interaction</p><p>&#10067; With the rise of real-time applications, WebSocket has become a go-to solution for many. How do you balance the benefits of persistent connections in WebSockets with potential scalability challenges?</p><h2>4. Python List Methods</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nQsO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nQsO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 424w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 848w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 1272w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nQsO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png" width="1456" height="1391" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1391,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:597496,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nQsO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 424w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 848w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 1272w, https://substackcdn.com/image/fetch/$s_!nQsO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f622502-0cf9-4e8d-8299-b408a6e3a786_2208x2110.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Understanding these list methods is essential for efficient data manipulation in Python:<br><br>1. &#128204; append() - Adds an element to the end of the list.<br>2. &#10133; extend() - Appends elements from another list (or any iterable) to the end.<br>3. &#11013;&#65039; insert() - Inserts an element at a specified position.<br>4. &#10060; remove() - Removes the first occurrence of the specified element.<br>5. &#128165; pop() - Removes and returns the element at the specified position. If no index is specified, it removes and returns the last element.<br>6. &#128683; clear() - Removes all elements from the list.<br>7. &#128269; index() - Returns the index of the first occurrence of the specified element.<br>8. &#128290; count() - Returns the number of occurrences of the specified element.<br>9. &#128292; sort() - Sorts the list in ascending order by default. You can also specify reverse order or a custom key function.<br>10. &#128257; reverse() - Reverses the order of the list.<br>11. &#128203; copy() - Returns a shallow copy of the list.</p><p>&#10067; How do you find the index of a value's second occurrence in a Python list?</p><h2>5. Back-of-the-envelope estimation</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XqzH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XqzH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 424w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 848w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 1272w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XqzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png" width="1456" height="1976" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1976,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1205098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XqzH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 424w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 848w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 1272w, https://substackcdn.com/image/fetch/$s_!XqzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc71ff915-0446-4f85-bf59-c510edf9984d_2818x3824.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>"Back-of-the-envelope estimation" refers to a rough calculation or estimation made quickly using simplified assumptions. The term originates from the idea of jotting down a quick calculation on any available piece of paper, such as the back of an envelope. The goal is to get a ballpark figure or order of magnitude, rather than an exact number.<br><br>Here's how you can approach a back-of-the-envelope estimation:<br><br>&#128280;&nbsp;Define the Problem: Clearly state what you're trying to estimate.<br>&#128280;&nbsp;Simplify Assumptions: Make broad assumptions that simplify the problem. These assumptions should be reasonable but don't need to be precise.<br>&#128280;&nbsp;Break Down the Problem: Divide the problem into smaller, more manageable parts.<br>&#128280;&nbsp;Use Round Numbers: Instead of using precise numbers, use rounded numbers that are easier to work with.<br>&#128280;&nbsp;Calculate: Perform the calculation using the simplified assumptions and rounded numbers.<br>&#128280;&nbsp;Review &amp; Adjust: Reflect on the result. Does it seem reasonable? If not, adjust your assumptions and recalculate.<br>&#128280;&nbsp;Document Assumptions: Always note down the assumptions you made, so you (or someone else) can understand the context of your estimation.<br><br>Example 1:<br>&#128280;&nbsp;Define:<br>- Estimation Goal: Determine the Queries Per Second (QPS) our server needs to handle based on user activity.<br>&#128280;&nbsp;Simplify:<br>-User Behavior: Assume each user makes 2 queries per day.<br>- Active Users: Assume 10 million daily active users.<br>&#128280;&nbsp;Break Down:<br>- Calculate the total number of queries made by all users in a day.<br>- Convert the daily query count to a per-second rate.<br>&#128280;&nbsp;Round Numbers:<br>- For simplicity:<br>- Use the exact numbers provided: 2 queries and 10 million users.<br>- Round the number of seconds in a day from 86,400 to 100,000.<br>&#128280;&nbsp;Calculate:<br>- Total Queries Per Day: 2&#215;10,000,000=20,000,000<br>- 2&#215;10,000,000=20,000,000 QPD<br>- Convert QPD to QPS using the rounded number:<br>- 20,000,000&nbsp;QPD/100,000&nbsp;seconds/day = 200 QPS<br>&#128280;&nbsp;Review:<br>The result indicates that the server should handle approximately 200 QPS based on the given user activity and rounded seconds. This value can be cross-checked with server capabilities and real-world data.<br>&#128280;&nbsp;Document:<br>- Assumptions Made:<br>- Each user makes 2 queries per day.<br>- There are 10 million daily active users.<br>- For simplicity, we rounded 86,400 seconds in a day to 100,000 seconds.</p><p>&#10067; How would you use a back-of-the-envelope estimation to predict the number of cars passing through a busy intersection in a day, given only the traffic flow in one hour?<br><br>#systemdesign&nbsp;#softwareengineering&nbsp;#coding&nbsp;#dev&nbsp;#Webhooks&nbsp;#API&nbsp;#BackOfTheEnvelope #Estimation #SystemDesign #QuickCalculation #RoughEstimate #DesignAssumptions #InfrastructurePlanning #CapacityEstimation #SystemScaling #PerformanceEstimation #Relational&nbsp;#JSON&nbsp;#Geospatial&nbsp;#TimeSeries&nbsp;#Graph&nbsp;#KeyValue&nbsp;#BlobStorage&nbsp;#DataWarehouses&nbsp;#DataLakes&nbsp;#TextSearch&nbsp;#Ledger&nbsp;#InMemory&nbsp;#structureddata&nbsp;#SemiStructureddata&nbsp;#Unstructureddata&nbsp;#AWS&nbsp;#Azure&nbsp;#GCP&nbsp;#DataStorage&nbsp;#BigData&nbsp;#NoSQL&nbsp;#SQL&nbsp;#kubernetes&nbsp;#k8s #container #VMware</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[EZF-004. Networking & Content Delivery services in AWS, Azure, GCP, and OCI; Multi-Master Replication; SOAP API Architecture style; Linux File System structure; OAuth 2.0 and OpenID Connect (OIDC)]]></title><description><![CDATA[Recap on system design for this week:]]></description><link>https://blog.ezvizi.com/p/ezf-004-networking-and-content-delivery</link><guid isPermaLink="false">https://blog.ezvizi.com/p/ezf-004-networking-and-content-delivery</guid><pubDate>Wed, 25 Oct 2023 22:59:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xGlR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>Networking &amp; Content Delivery services in AWS, Azure, GCP, and OCI</p></li><li><p>Multi-Master Replication</p></li><li><p>SOAP API Architecture style</p></li><li><p>Linux File System Structure</p></li><li><p>OAuth 2.0 and OpenID Connect (OIDC)</p></li></ul><h2>1. Networking &amp; Content Delivery services in AWS, Azure, GCP, and OCI</h2><p>Networking &amp; Content Delivery services in AWS: Approximate match rating with corresponding services in Azure, GCP, and OCI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xGlR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xGlR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 424w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 848w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 1272w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xGlR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png" width="727.98828125" height="368.4940681876717" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:737,&quot;width&quot;:1456,&quot;resizeWidth&quot;:727.98828125,&quot;bytes&quot;:2091377,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xGlR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 424w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 848w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 1272w, https://substackcdn.com/image/fetch/$s_!xGlR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5a59b90-ce73-4665-a608-5f5310a58c6f_6560x3320.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Networking &amp; Content Delivery services play pivotal roles in ensuring seamless, secure, and efficient operations.<br><br>&#10067; How do these services align with corresponding services in Azure, Google Cloud Platform (GCP), and Oracle Cloud Infrastructure (OCI), and to what extent? </p><p>Some services have a direct equivalent, others might not have a one-to-one match, and the degree of match is based on the closest functionality.<br><br>&#128280; Amazon API Gateway:<br>A service for developers to create, secure, and manage APIs, facilitating access to back-end services.<br><br>&#128280; Amazon <a href="https://www.linkedin.com/feed/hashtag/?keywords=cloudfront&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#CloudFront</a>:<br>A global CDN delivering data and apps with low latency. Seamlessly integrated with AWS and offers flexible pricing.<br><br>&#128280; Amazon Route 53:<br>A cloud DNS service translating domain names to IP addresses, enhancing connectivity to AWS resources.<br><br>&#128280; AWS Verified Access:<br>Provides secure application access for corporate users without a VPN, based on user and device data.<br><br>&#128280; Amazon <a href="https://www.linkedin.com/feed/hashtag/?keywords=vpc&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#VPC</a>:<br>Enables creation of a private AWS Cloud segment with a customizable virtual network.<br><br>&#128280; Amazon VPC Lattice:<br>Manages service-to-service connectivity with defined policies for traffic and access.<br><br>&#128280; AWS App Mesh:<br>Standardizes and controls AWS microservices communication, ensuring application reliability.<br><br>&#128280; AWS Cloud Map:<br>Tracks and updates the location of dynamic resources, bolstering application uptime.<br><br>&#128280; AWS Direct Connect:<br>Forms a dedicated connection between user premises and AWS, optimizing costs and bandwidth.<br><br>&#128280; AWS Global Accelerator:<br>Boosts global application performance by routing traffic via the AWS network.<br><br>&#128280; AWS PrivateLink:<br>Secures data by preventing public internet exposure and offers private AWS connectivity.<br><br>&#128280; AWS Private 5G:<br>Integrates cellular technology into networks, with AWS supplying essential components.<br><br>&#128280; AWS Transit Gateway:<br>Links Amazon VPCs and on-site networks via a central gateway, streamlining operations.<br><br>&#128280; <a href="https://www.linkedin.com/feed/hashtag/?keywords=aws&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#AWS</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=vpn&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#VPN</a>:<br>Combines AWS Site-to-Site and Client VPN, ensuring secure connections across the AWS ecosystem.<br><br>Approximate Match Rating (1-5) with equivalent services in <a href="https://www.linkedin.com/feed/hashtag/?keywords=azure&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#Azure</a>, <a href="https://www.linkedin.com/feed/hashtag/?keywords=gcp&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#GCP</a>, <a href="https://www.linkedin.com/feed/hashtag/?keywords=oci&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7122071013818830848">#OCI</a>.<br>1 = "Not a Direct Match, but Closest Available"<br>2&nbsp;=&nbsp;"Somewhat Similar"<br>3&nbsp;=&nbsp;"Moderately Similar"<br>4&nbsp;=&nbsp;"Very Similar"<br>5&nbsp;=&nbsp;"Almost Identical"</p><h2>2. Multi-Master Replication</h2><p>Multi-master replication is a database replication method where multiple nodes or computers store data and can update it. All nodes can respond to data queries. The system ensures data modifications made by one node are propagated to others, maintaining data consistency. It contrasts with primary-replica replication, where only one "master" node can modify data, and failover clustering, where only one server actively interacts with clients.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yeTP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yeTP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 424w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 848w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yeTP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png" width="1456" height="969" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:969,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157039,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yeTP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 424w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 848w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 1272w, https://substackcdn.com/image/fetch/$s_!yeTP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8cbbf87-202a-40e4-a872-37ff13fc3a80_2181x1452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><br>&#127775; 2.1. <strong>Advantages:</strong> </h3><ol><li><p>&#128260; <strong>Availability:</strong> Continuous operation even if one master fails. </p></li><li><p>&#127757; <strong>Distributed Access:</strong> Nodes can be geographically distributed, reducing latency. </p></li><li><p>&#9878;&#65039; <strong>Load Sharing:</strong> Handles more write traffic than a single node. </p></li><li><p>&#128737;&#65039; <strong>No Single Point of Failure:</strong> Multiple masters ensure continuous operation. </p></li><li><p>&#9889; <strong>Low Latencies:</strong> By placing nodes closer to users, write latencies are minimized. </p></li><li><p>&#128295; <strong>Database Upgrades:</strong> Facilitates upgrades without significant downtime.</p></li></ol><h3>&#128533; 2.2. <strong>Disadvantages and Concerns:</strong> </h3><ol><li><p>&#128201; <strong>Consistency Issues:</strong> Asynchronous replication can lead to eventual consistency, compromising ACID guarantees. </p></li><li><p>&#128034; <strong>Performance Concerns:</strong> Data synchronization can strain network bandwidth, leading to sluggish performance. </p></li><li><p>&#9888;&#65039; <strong>Conflict Resolution:</strong> Simultaneous updates can lead to data conflicts. Handling these conflicts becomes crucial in a multi-master setup. </p></li><li><p>&#129513; <strong>Complexity:</strong> Setting up and managing multi-master replication can be more complex than other replication methods.</p></li></ol><h3>&#128736;&#65039; 2.3. <strong>Implementations:</strong></h3><ol><li><p>&#128194; <strong>Directory Services:</strong> Many use #LDAP and implement multi-master replication, such as Active Directory, #OpenDS/#OpenDJ, #OpenLDAP.</p></li><li><p>&#128451;&#65039; <strong>Database Management Systems:</strong> #Amazon #Aurora, #Apache #CouchDB, #ArangoDB, #Cloudant, #eXtremeDB Cluster, #Oracle, #Microsoft #SQL, #MySQL, #MariaDB, #PostgreSQL, #Ingres.</p></li></ol><h3>&#128204; 2.4. <strong>Use Cases Examples:</strong></h3><ol><li><p>&#129309; <strong>Collaborative Tools:</strong> Google Docs, where multiple users edit simultaneously.</p></li><li><p>&#128244; <strong>Offline Databases:</strong> Clients work offline and sync when online.</p></li></ol><p>Multi-master replication offers scalability, availability, and geographical distribution advantages. However, it also presents challenges like conflict resolution, consistency issues, and potential performance degradation. It's crucial to consider these factors based on specific needs and use cases.<br><br>&#10067; What challenges are you encountering with multi-master replication?</p><h2>3. SOAP API Architecture style</h2><p>SOAP, a protocol from the early days of web services, remains relevant in specific scenarios. Remember when banking systems relied heavily on SOAP for secure, reliable communication? &#127974; Financial institutions are using SOAP for transactions due to its robust security features.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MprQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MprQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MprQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif" width="926" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:705952,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MprQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!MprQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fde6f0d-210e-45d9-bf37-1bd09a7dc857_926x1080.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>3.1. Message formats:</h3><ul><li><p>XML</p></li></ul><h3>3.2. &#9989; Advantages:</h3><ol><li><p>&#128279; <strong>Standardized Protocol:</strong> Protocol-agnostic </p></li><li><p>&#128683; <strong>Error Handling:</strong> Integrated mechanisms </p></li><li><p>&#128274; <strong>Security:</strong> Adheres to WS-Security standards </p></li><li><p>&#128190; <strong>ACID Transactions:</strong> Guarantees data integrity</p></li><li><p>&#128161; <strong>Stateful Operations:</strong> Retains state </p></li><li><p>&#128269; <strong>Extensibility:</strong> Compatible with WS-* standards </p></li><li><p>&#127757; <strong>Language Neutral:</strong> Compatible across all languages.</p></li></ol><h3>3.3. &#10060; Disadvantages</h3><ol><li><p>&#128220; <strong>Verbosity:</strong> Large XML payloads </p></li><li><p>&#10060; <strong>Complexity:</strong> More challenging to implement than REST </p></li><li><p>&#128279; <strong>Tight Coupling:</strong> Modifications can disrupt integrations </p></li><li><p>&#128034; <strong>Performance:</strong> Reduced speed because of XML parsing </p></li><li><p>&#128274; <strong>Less Flexibility:</strong> Rigid standards </p></li><li><p>&#127891; <strong>Learning Curve:</strong> Not the same as REST </p></li><li><p>&#128201; <strong>Declining Popularity:</strong> Limited contemporary tools/resources.</p></li></ol><h3>3.4. &#128203; Use cases</h3><ol><li><p>&#127970; <strong>Enterprise Solutions:</strong> Integration for expansive enterprise systems. </p></li><li><p>&#128176; <strong>Financial Sector:</strong> Safe and ACID-adherent banking transactions. &#128225; <strong>Telecommunications:</strong> Management of network devices. </p></li><li><p>&#129658; <strong>Healthcare:</strong> Exchange of medical records. </p></li><li><p>&#9992;&#65039; <strong>Airline Services:</strong> Flight reservations and information systems. </p></li><li><p>&#127760; <strong>Web Solutions:</strong> Uniform public APIs. </p></li><li><p>&#128101; <strong>CRM Platforms:</strong> Integration of customer management tools. </p></li><li><p>&#128179; <strong>Payment Channels:</strong> Protected payment transactions. </p></li><li><p>&#128230; <strong>Delivery Services:</strong> Shipment tracking and details. </p></li><li><p>&#128190; <strong>Legacy System Adaptation:</strong> Contemporary interface for dated, intricate systems.</p></li></ol><p>&#10067; What API architecture style are you guys currently utilizing in your system?</p><h2>4. Linux File System structure</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_MKa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_MKa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 424w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 848w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 1272w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_MKa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png" width="1456" height="1801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1322830,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_MKa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 424w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 848w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 1272w, https://substackcdn.com/image/fetch/$s_!_MKa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe10407bb-6c89-42c0-953d-86865eb5a2ba_3750x4638.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The Filesystem Hierarchy Standard (FHS) outlines the structure for Unix-like systems. Popularized by Linux distributions, it's also adopted by other Unix-like systems and maintained by the Linux Foundation. The latest version, 3.0, was released on 3 June 2015.</p><ul><li><p>&#127795; <strong>Rooted at /</strong>, the FHS organizes files and directories, even if they reside on different devices.</p></li><li><p>&#128193; <strong>Presence of certain directories</strong> depends on specific subsystems.</p></li><li><p>&#128039; <strong>While many directories are common across Unix-like systems</strong>, the FHS descriptions are specific to Linux.</p></li></ul><p>&#10067; Following the FHS, where should Linux app binaries and user-specific config files reside?</p><h2>5. OAuth 2.0 and OpenID Connect (OIDC)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iWrR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iWrR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 424w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 848w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png" width="1456" height="1130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1130,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:246260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iWrR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 424w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 848w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!iWrR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a2d79a6-e177-4f49-b4c0-bfabf1c91630_1896x1472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>5.1. OAuth 2.0:</strong></h3><ul><li><p>&#127919; <strong>Purpose:</strong> OAuth 2.0 is primarily an authorization framework that allows third-party applications to obtain limited access to a user's resources without exposing their credentials. It's designed for token-based authorization. </p></li><li><p>&#128273; <strong>Tokens:</strong> Uses access and refresh tokens. </p></li><li><p>&#128260; <strong>Flows:</strong> Authorization Code Flow, Implicit Flow, Client Credentials Flow, Resource Owner Password Credentials Flow.</p></li></ul><h3><strong>5.2. OAuth 2.0 Authorization Code Flow (on the image):</strong></h3><p>1&#65039;&#8419; User Resource Request<br>2&#65039;&#8419;&nbsp;Client Redirect<br>3&#65039;&#8419; User Login &amp; Permission Grant<br>4&#65039;&#8419; Authorization Code Issuance<br>5&#65039;&#8419; User Provides Authorization Code<br>6&#65039;&#8419; Access Token Request<br>7&#65039;&#8419; Access Token Response<br>8&#65039;&#8419; Resource Request with Access Token<br>9&#65039;&#8419; Resource Response</p><h3><strong>5.3. OpenID Connect (OIDC):</strong></h3><ul><li><p>&#127919; <strong>Purpose:</strong> OIDC is a simple identity layer built on top of the OAuth 2.0 protocol. While OAuth 2.0 is about resource access and sharing, OIDC is about user authentication. It provides apps with a way to get basic profile information about the authenticated user.</p></li><li><p>&#127380; <strong>ID Token:</strong> OIDC introduces a new type of token - the ID Token. This token is a JWT (JSON Web Token) and contains information about the authenticated user.</p></li><li><p>&#128203; <strong>UserInfo Endpoint:</strong> OIDC provides a standard endpoint where apps can retrieve claims (user attributes) about the authenticated user.</p></li><li><p>&#128260; <strong>Flows:</strong> OIDC supports the same flows as OAuth 2.0 but adds authentication steps to them. The most commonly used flow in OIDC is the Authorization Code Flow with the addition of the ID Token.</p></li><li><p>&#128220; <strong>Standard Claims:</strong> OIDC defines a standard set of claims (user attributes). Examples include sub (subject identifier), name, email, and more.</p></li></ul><h3><strong>5.4. OAuth 2.0 + OIDC:</strong></h3><ul><li><p>&#128736;&#65039; <strong>OIDC is built on top of OAuth 2.0.</strong> In essence, while OAuth 2.0 provides the framework for access delegation, OIDC adds an identity layer on top, allowing for user authentication in addition to the OAuth 2.0 authorization functionalities.</p></li><li><p>&#127760; <strong>It's common for modern applications</strong> to use both OAuth 2.0 for authorization and OIDC for authentication. This combination allows apps to both authenticate users and request permissions to access resources on their behalf.</p></li></ul><p>&#10067; How are you implementing and utilizing OAuth 2.0 and OIDC in your applications?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Download high-resolution images from past newsletters in PDF format here.]]></title><link>https://blog.ezvizi.com/p/download-high-resolution-images-from</link><guid isPermaLink="false">https://blog.ezvizi.com/p/download-high-resolution-images-from</guid><dc:creator><![CDATA[EzVizi System Design]]></dc:creator><pubDate>Mon, 23 Oct 2023 09:41:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1da6569f-b575-4ab0-9550-eb86df156f62_6560x3320.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="file-embed-wrapper" data-component-name="FileToDOM"><div class="file-embed-container-reader"><div class="file-embed-container-top"><image class="file-embed-thumbnail-default" src="https://substackcdn.com/image/fetch/$s_!0Cy0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack.com%2Fimg%2Fattachment_icon.svg"></image><div class="file-embed-details"><div class="file-embed-details-h1">Ezvizi System Design High Resolution Slides</div><div class="file-embed-details-h2">15.9MB &#8729; PDF file</div></div><a class="file-embed-button wide" href="https://blog.ezvizi.com/api/v1/file/d0b7f055-959d-43be-a92d-c8d59973933e.pdf"><span class="file-embed-button-text">Download</span></a></div><a class="file-embed-button narrow" href="https://blog.ezvizi.com/api/v1/file/d0b7f055-959d-43be-a92d-c8d59973933e.pdf"><span class="file-embed-button-text">Download</span></a></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[EZF-003. GraphQL API Architecture style; Netflix - What it’s built on; Comparison of URI, URL, and URN; 27 Microservices Best Practices; Master-Slave Replication]]></title><description><![CDATA[Recap on system design for this week: GraphQL API Architecture style Netflix. What it&#8217;s built on Comparison of URI, URL, and URN 27 Microservices Best Practices Master-Slave Replication 1. GraphQL API Architecture style 1.1. Message formats: JSON 1.2. &#9989; Advantages:]]></description><link>https://blog.ezvizi.com/p/ezf-003-graphql-api-architecture</link><guid isPermaLink="false">https://blog.ezvizi.com/p/ezf-003-graphql-api-architecture</guid><dc:creator><![CDATA[EzVizi System Design]]></dc:creator><pubDate>Sat, 21 Oct 2023 01:31:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>GraphQL&nbsp;API Architecture style</p></li><li><p>Netflix. What it&#8217;s built on</p></li><li><p>Comparison of URI, URL, and URN</p></li><li><p>27 Microservices Best Practices</p></li><li><p>Master-Slave Replication</p></li></ul><h2>1. GraphQL&nbsp;API Architecture style</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HQ4L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HQ4L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HQ4L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif" width="926" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:764681,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HQ4L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!HQ4L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F624f259d-3612-4b47-adf7-12716cbf6487_926x1080.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1.1. Message formats:</h3><ul><li><p>JSON</p></li></ul><h3>1.2. &#9989; Advantages:</h3><ol><li><p><strong>Flexible Data</strong> &#128230;: Request only needed data, reducing network load.</p></li><li><p><strong>Strong Typing</strong> &#128269;: Clear client-server contract via a defined schema.</p></li><li><p><strong>Single Endpoint</strong> &#127919;: One endpoint for all interactions simplifies API usage.</p></li><li><p><strong>Real-time Updates</strong> &#9889;: Subscriptions support live data reflection.</p></li><li><p><strong>Introspection</strong> &#128302;: Self-documenting APIs for easier discovery.</p></li><li><p><strong>Declarative Fetching</strong> &#128203;: Describe data needs without backend specifics.</p></li><li><p><strong>Batch &amp; Cache</strong> &#128640;: Combine requests and optimize caching.</p></li><li><p><strong>Smooth Evolution</strong> &#127793;: Add features without breaking existing ones.</p></li></ol><h3>1.3. &#10060; Disadvantages</h3><ol><li><p><strong>Complexity</strong> &#127744;: Can be overkill for simple APIs.</p></li><li><p><strong>Performance</strong> &#9203;: Nested queries may slow response times.</p></li><li><p><strong>Caching</strong> &#129513;: Fine-grained queries complicate caching.</p></li><li><p><strong>Rate Limiting</strong> &#128678;: Trickier with a single endpoint.</p></li><li><p><strong>Learning Curve</strong> &#128218;: New query language to master.</p></li><li><p><strong>Over-fetching</strong> &#127890;: Risk of requesting excess data.</p></li><li><p><strong>Errors</strong> &#10071;: Ambiguous or partial failures.</p></li><li><p><strong>File Uploads</strong> &#128190;: Not natively supported.</p></li><li><p><strong>Overexposure</strong> &#128275;: Potential data security risks.</p></li></ol><h3>1.4. &#128203; Use cases</h3><ol><li><p><strong>Dynamic Data</strong> &#128241;: Tailor data for different clients (web, mobile, IoT).</p></li><li><p><strong>SPAs</strong> &#128421;&#65039;: Efficient data fetching for Single Page Applications.</p></li><li><p><strong>Real-time Apps</strong> &#9889;: Push updates for chats, scores, stocks.</p></li><li><p><strong>Microservices</strong> &#128376;&#65039;: Unified data layer across services.</p></li><li><p><strong>API Gateway</strong> &#128682;: Intermediary between clients and backends.</p></li><li><p><strong>REST Wrapper</strong> &#128260;: Add flexibility to existing REST APIs.</p></li><li><p><strong>Rapid Prototyping</strong> &#128640;: Speed up development with introspection.</p></li><li><p><strong>CMS</strong> &#128196;: Flexible content querying and management.</p></li><li><p><strong>E-commerce</strong> &#128717;&#65039;: Manage complex product and user data.</p></li><li><p><strong>Social Aggregators</strong> &#127760;: Streamline fetching from multiple sources.</p></li></ol><p>&#10067; What API architecture style are you guys currently utilizing in your system?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>2. Netflix. What it&#8217;s built on</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7F84!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7F84!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 424w, https://substackcdn.com/image/fetch/$s_!7F84!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 848w, https://substackcdn.com/image/fetch/$s_!7F84!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 1272w, https://substackcdn.com/image/fetch/$s_!7F84!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7F84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png" width="1456" height="1034" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1034,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:289928,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7F84!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 424w, https://substackcdn.com/image/fetch/$s_!7F84!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 848w, https://substackcdn.com/image/fetch/$s_!7F84!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 1272w, https://substackcdn.com/image/fetch/$s_!7F84!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47746905-72c2-40da-ad93-5281f1f9d7b7_2547x1809.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Netflix has a complex and evolving tech stack that supports its massive global streaming service.<br><br>1. Frontend<br><br>1.1. Web: <strong>Node.JS (client side), HTML 5, JS, React</strong><br>1.2. Mobile: <strong>Kotlin (Android), Swift (iOS)</strong><br><br>Communication via Federated <strong>GraphQL</strong><br><br>2. Backend.<br><br>2.1. Cloud Infrastructure: <strong>AWS</strong> - majority of Netflix's cloud infrastructure<br><br>2.2. Microservices Architecture: Microservices (1000+ microservices), <strong>Netflix ZuuL</strong> (API GW), <strong>Netflix Eureka</strong> (Service Discovery)<br><br>2.3. Data Storage &amp; Databases<br>2.3.1. Relational databases: <strong>MySQL, CockroachDB</strong><br>2.3.2. NoSQL databases: <strong>Cassandra, Amazon DynamoDB</strong><br>2.3.3. Content/Streaming: <strong>S3, Elastic Transcoder</strong><br>2.3.4. Search Engines: <strong>ElasticSearch</strong><br>2.3.5. Caching: <strong>EVCache</strong><br><br>2.4. Big Data &amp; Analytics<br>2.4.1. Stream processing systems: <strong>Kafka, Flink</strong><br>2.4.2. Batch processing systems: <strong>Apache Spark</strong><br>2.4.3. Data warehousing solutions: <strong>Amazon Redshift, Snowflake</strong><br>2.4.4. Data Visualization: <strong>Tableau</strong><br>2.4.5. Real-time analytics: <strong>Druid</strong><br>2.4.5. To enhance data performance: <strong>Iceberg</strong><br><br>2.5. Machine Learning: <strong>TensorFlow</strong><br><br>2.6. CDN: <strong>Netflix Open Connect</strong><br><br>2.7. Networking<br>2.7.1. LBs: <strong>Amazon ELB, Netflix Zuul</strong><br>2.7.2. Service Mesh: <strong>Envoy</strong><br><br>2.8. Scripting &amp; Automation: <strong>Python, Groovy</strong><br>2.9. Incident Management: <strong>PagerDuty</strong><br><br>3. DevOps.<br><br>3.1. CI/CD: <strong>Spinnaker, Jenkins</strong><br>3.2. Configuration Management: <strong>Archaius</strong><br>3.3. Monitoring &amp; Observability<br>3.3.1. Time-series monitoring: <strong>Apache Atlas</strong><br>3.3.2. Logging systems: <strong>ELK stack</strong><br>3.3.3. Tracing tools: <strong>Zipkin</strong><br>3.4. Resilience &amp; Chaos Engineering: <strong>Chaos Monkey</strong><br>3.5. Version Control: <strong>Git, GitHub</strong><br>3.6. Infrastructure as Code: <strong>Terraform</strong><br>3.7. Collaboration &amp; Communication: <strong>Slack, Jira, Confluence</strong><br>3.8. Build Automation &amp; Dependency Management: <strong>Gradle</strong><br>3.9. Enhance the build and release process: <strong>Nebula</strong><br><br>4. Sources:<br>4.1. https://netflixtechblog.com/</p><p>4.2. https://aws.amazon.com/solutions/case-studies/innovators/netflix/</p><p>4.3. https://github.com/Netflix<br><br>&#10067;Are there any components or technologies that need to be corrected?</p><h2>3. Twenty-seven (27) Microservices Best Practices</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IwjZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IwjZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 424w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 848w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 1272w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IwjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png" width="1456" height="1157" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1157,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:443072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IwjZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 424w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 848w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 1272w, https://substackcdn.com/image/fetch/$s_!IwjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0650e072-5bcc-47dc-bf76-09288aee2172_3217x2556.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Efficiently architecting, building, and maintaining microservices is vital to optimize both human and infrastructure resources. For successful microservice implementation, it's essential to adopt practices that ensure flexibility, efficiency, and scalability:<br><br><strong>1. Independent Deployment and Scalability:</strong> Deploy and scale each microservice separately.<br><strong>2. Domain-Driven Design:</strong> Model services based on business domains to ensure alignment with business capabilities.<br><strong>3. Loose Coupling &amp; High Cohesion:</strong> Minimize inter-service dependencies and group related functionalities.<br><strong>4. API Versioning &amp; Backward Compatibility:</strong> Ensure older versions of services or clients continue to function with newer releases.<br><strong>5. Service Discovery:</strong> Leverage solutions like Consul or Eureka, allowing dynamic contraction and expansion without a central agent.<br><strong>6. Centralized Configuration:</strong> Manage configurations across services centrally.<br><strong>7. Health Checks:</strong> Implement health endpoints for monitoring service health.<br><strong>8. Distributed Tracing:</strong> Trace requests across services for diagnostics.<br><strong>9. Circuit Breakers &amp; Automatic Retries:</strong> Ensure systems are fault-tolerant and can handle service interruptions.<br><strong>10. Data Consistency:</strong> Ensure data consistency across services using patterns like Saga.<br><strong>11. Centralized Logging:</strong> Centralize logs for easier debugging.<br><strong>12. API Gateway:</strong> Route requests and handle authentication centrally.<br><strong>13. Authentication &amp; Authorization:</strong> Implement access restriction protocols to ensure only authentic users access services.<br><strong>14. Rate Limiting &amp; Request Caching:</strong> Prevent excessive requests and reduce load on services.<br><strong>15. Database Per Service:</strong> Dedicate a database to each service for decoupling.<br><strong>16. Event-Driven &amp; Asynchronous Architecture:</strong> Use message queuing services like RabbitMQ and leverage asynchronous protocols for better performance.<br><strong>17. Automated Testing:</strong> Implement comprehensive testing for each service.<br><strong>18. CI/CD &amp; DevOps Practices:</strong> Automate processes and ensure development teams own and support changes from development to end-of-life.<br><strong>19. Containerization &amp; Orchestration:</strong> Use Docker and Kubernetes for deployment consistency.<br><strong>20. Single Responsibility Principle:</strong> Each service should cater to one business capability.<br><strong>21. Statelessness:</strong> Design microservices to be stateless for scalability.<br><strong>22. Security:</strong> Ensure data encryption, API, and network security.<br><strong>23. Code Maturity:</strong> Keep code within a service at a similar maturity level.<br><strong>24. Separate Builds:</strong> Each microservice should have its own build and deployment pipeline.<br><strong>25. Micro Frontends:</strong> Develop and deploy frontend components independently.<br><strong>26. Documentation:</strong> Keep API documentation up-to-date.<br><strong>27. Monitoring &amp; Alerts:</strong> Use tools like Prometheus for monitoring and set up alerts.<br><strong>28. Backup &amp; Disaster Recovery:</strong> Regularly backup data and have recovery processes in place.</p><p>&#10067; Which best practices are you implementing for your microservices architecture?</p><h2>4. Comparison of URI, URL, and URN.</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1AK1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1AK1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 424w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 848w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 1272w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1AK1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png" width="1456" height="926" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:926,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1AK1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 424w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 848w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 1272w, https://substackcdn.com/image/fetch/$s_!1AK1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0e9db57-b5a5-4edc-b01e-13bde40bfb98_2402x1527.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Comparison of URI, URL, and URN.<br><br>4.<strong>1. URI (Uniform Resource Identifier)</strong><br>-&nbsp;syntax: scheme:[//[user:password@]host[:port]][/]path[?query][<a href="https://www.linkedin.com/feed/hashtag/?keywords=fragment&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7121249463712550912">#fragment</a>]<br>- Purpose: <strong>To identify a resource</strong><br>- Persistence: Can be either persistent or transient<br>- Definition: A generic term for any type of name or address referring to a resource.<br>Example: <strong>mailto:<a href="mailto:ezvizi.com@gmail.com">ezvizi.com@gmail.com</a>?subject=Ad Placement Request?&amp;cc=<a href="mailto:ezvizi.com@gmail.com">ezvizi.com@gmail.com</a>&amp;bcc=<a href="mailto:ezvizi.com@gmail.com">ezvizi.com@gmail.com</a></strong><br><br>4.<strong>2. URL (Uniform Resource Locator)</strong><br>-&nbsp;syntax: scheme:[//[user:password@]host[:port]][/]path[?query][<a href="https://www.linkedin.com/feed/hashtag/?keywords=fragment&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7121249463712550912">#fragment</a>]<br>- Purpose: <strong>To locate a resource</strong><br>- Persistence: Typically transient; can change if the resource moves<br>- Definition: A specific type of URI that describes where a resource is located and how to access it.<br>Example: <strong><a href="https://user:password@www.ezvizi.com:8080/products/page1?item=123#section2">https://user:password@www.ezvizi.com:8080/products/page1?item=123#section2</a></strong><br><br>4.<strong>3. URN (Uniform Resource Name)</strong><br>-&nbsp;syntax: urn:&lt;namespace-identifier&gt;:&lt;namespace-specific-string&gt;<br>- Purpose: <strong>To name a resource uniquely</strong><br>- Persistence: Meant to be persistent; doesn't change even if the resource's location changes.<br>- Definition: A specific type of URI that provides a persistent identifier for a resource without implying its location or how to access it.<br>Example: <strong>urn:isbn:0451450523</strong><br><br>&#10067; Can a URI be both a URL and a URN?</p><h2>5. Master-Slave Replication</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eCry!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eCry!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 424w, https://substackcdn.com/image/fetch/$s_!eCry!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 848w, https://substackcdn.com/image/fetch/$s_!eCry!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 1272w, https://substackcdn.com/image/fetch/$s_!eCry!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eCry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png" width="423" height="246" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:246,&quot;width&quot;:423,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8259,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eCry!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 424w, https://substackcdn.com/image/fetch/$s_!eCry!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 848w, https://substackcdn.com/image/fetch/$s_!eCry!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 1272w, https://substackcdn.com/image/fetch/$s_!eCry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e73d7f8-6c89-4f77-8f41-16a565d54fe9_423x246.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The master handles both reads and writes, sending write replicas to its slaves, which are read-only. Slaves can further replicate in a hierarchical manner. If the master fails, the system shifts to read-only until a slave becomes the master or a new master is set up.<br><br>&#127775; <strong>Advantages</strong>:<br>&#9989; Reading from slaves doesn't impact the master.<br>&#9989; Backups don't heavily affect the master.<br>&#9989; Slaves can resync to the master without downtime.<br><br>&#128533; <strong>Disadvantages</strong>:<br>&#10060;Additional hardware and complexity due to replication.<br>&#10060;All writes must go through the master.<br>&#10060;Potential data loss and downtime if the master fails.<br>&#10060;More read slaves can lead to increased replication delays.<br><br>&#10067;&nbsp;In a master-slave replication setup, if the master becomes isolated from the network due to a network partition but remains operational, and one of the slaves is promoted to a master, what strategies can be employed to handle data inconsistencies when the original master is reconnected?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi System Design Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🚀 Share Your Expertise with Our Growing Community! 🌟]]></title><description><![CDATA[If you possess insights or educational content on the following topics:]]></description><link>https://blog.ezvizi.com/p/share-your-expertise-with-our-growing</link><guid isPermaLink="false">https://blog.ezvizi.com/p/share-your-expertise-with-our-growing</guid><dc:creator><![CDATA[EzVizi System Design]]></dc:creator><pubDate>Sat, 14 Oct 2023 20:26:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KBvN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KBvN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KBvN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KBvN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1278224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KBvN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KBvN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F174cb944-4c7e-4e4e-93f1-395ad895df4d_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you possess insights or educational content on the following topics:</p><ul><li><p><strong>Scalability</strong></p></li><li><p><strong>Distributed Systems</strong></p></li><li><p><strong>Architecture of Scalable Applications</strong></p></li><li><p><strong>System Design Essentials</strong></p></li><li><p><strong>Design Problems</strong></p></li><li><p><strong>Machine Learning System Design</strong></p></li></ul><p>We would be honored to showcase your expertise to our audience!</p><p><strong>Submission Guidelines:</strong></p><ul><li><p>Content Length: Between 600-2000 characters.</p></li><li><p>Attach 1 relevant image/animation/video link.</p></li><li><p>Don't forget to include your LinkedIn link for proper attribution.</p></li></ul><p>Please forward your submissions to <a href="mailto:ezvizi.com@gmail.com">ezvizi.com@gmail.com</a>. It's a fantastic opportunity to engage with our community, which is currently in the double digits and growing steadily. Let's collaborate and enrich the knowledge pool together!</p><p>Please note, not all submissions will be published; only approved content will be featured.</p>]]></content:encoded></item><item><title><![CDATA[SP-001 Sponsorship Opportunity with EZVIZI System Design Newsletter! 🚀]]></title><description><![CDATA[Looking to showcase your brand to a dedicated audience of system design enthusiasts?]]></description><link>https://blog.ezvizi.com/p/sp-001-sponsorship-opportunity-with</link><guid isPermaLink="false">https://blog.ezvizi.com/p/sp-001-sponsorship-opportunity-with</guid><dc:creator><![CDATA[EzVizi System Design]]></dc:creator><pubDate>Wed, 11 Oct 2023 00:46:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_pg9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Looking to showcase your brand to a dedicated audience of system design enthusiasts? We have an exclusive offer for you! At EZVIZI System Design, we have just <strong>one ad placement available per week</strong> ensuring your brand gets the spotlight it deserves.</p><p><strong>What you get</strong>:</p><ul><li><p>A dedicated sponsor section in our weekly email.</p></li><li><p>Permanent placement in our archive, ensuring long-term visibility.</p></li><li><p>A catchy title (up to 88 characters)</p><ul><li><p>Ex.:  Win a Free Pass: Dive into the Future of Software Engineering!</p></li></ul></li><li><p>Engaging body text (less than 700 characters).</p><ul><li><p>Ex.: Exciting times ahead for software enthusiasts! Join us at the premier Software Engineering Conference of the year. Dive deep into the latest trends, innovations, and breakthroughs in the tech world. Engage in enlightening discussions with industry leaders, witness hands-on demos, and network with peers who share your passion. Whether you're a seasoned developer or just starting out, this is the place to be for all things software. Don't miss out on this opportunity to elevate your skills, expand your horizons, and be part of the future of software engineering!</p></li></ul></li><li><p>A vibrant image with your logo included (max dimensions: 1600 x 800). Ex.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_pg9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_pg9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 424w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 848w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 1272w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_pg9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png" width="1024" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/262d1989-cb90-4605-bc51-627574906053_1024x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:725571,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_pg9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 424w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 848w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 1272w, https://substackcdn.com/image/fetch/$s_!_pg9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F262d1989-cb90-4605-bc51-627574906053_1024x512.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>A compelling call to action link and text to drive engagement.</p><ul><li><p>Ex. call to action text: Secure Your Spot Now! Unleash the Future of Tech!</p></li><li><p>Ex. call to action link: [Link goes here]</p></li></ul></li></ul><p>This is a unique opportunity to position your brand front and center to our engaged readership. Interested? Reach out to us at <a href="mailto:ezvizi.com@gmail.com">ezvizi.com@gmail.com</a> for more details.</p>]]></content:encoded></item><item><title><![CDATA[EZF-002 Webhooks API Architecture Style, Load Balancing Methods, HTTP Status Codes, Fundamental Latency Metrics to Remember, Git commands Part 1 (21 commands)]]></title><description><![CDATA[Recap on system design for this week:]]></description><link>https://blog.ezvizi.com/p/draft-ezf-002-webhooks-api-architecture</link><guid isPermaLink="false">https://blog.ezvizi.com/p/draft-ezf-002-webhooks-api-architecture</guid><pubDate>Tue, 10 Oct 2023 09:16:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>Webhooks API Architecture style</p></li><li><p>Load Balancing Methods. Part 1 (7 Methods)</p></li><li><p>HTTP Status Codes</p></li><li><p>Fundamental Latency Metrics to Remember</p></li><li><p>Git commands. Part 1 (21 commands)</p></li></ul><div><hr></div><h2>1. Webhooks API Architecture style</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vMD6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vMD6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vMD6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif" width="926" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:926,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:798698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vMD6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 424w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 848w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 1272w, https://substackcdn.com/image/fetch/$s_!vMD6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2f2567-80c9-4d99-88d5-650697522e45_926x1080.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>1.1. Message formats: </h3><ul><li><p>JSON</p></li></ul><h3>1.2. &#9989; Advantages:</h3><ul><li><p><strong>Real-Time Notifications</strong> &#128680;: Immediate alerts without polling.</p></li><li><p><strong>Event-Driven</strong> &#9889;: Supports dynamic, event-based interactions.</p></li><li><p><strong>Reduced Server Load</strong> &#128201;: Sends data only on events.</p></li><li><p><strong>Configurable</strong> &#128295;: Tailored to specific events.</p></li><li><p><strong>Simple to Use</strong> &#128994;: Generally straightforward implementation.</p></li><li><p><strong>Asynchronous Operations</strong> &#128260;: Non-blocking data transfers.</p></li><li><p><strong>Scalable</strong> &#128200;: Adapts easily with growing needs.</p></li></ul><h3>1.3. &#10060; Disadvantages</h3><ul><li><p><strong>Security Concerns</strong> &#128274;: Public endpoints may pose risks if not secured.</p></li><li><p><strong>Error Handling</strong> &#10060;: Challenges with endpoint failures or errors.</p></li><li><p><strong>Latency Issues</strong> &#128034;: Network delays can affect real-time nature.</p></li><li><p><strong>Resource Use</strong> &#128260;: Each call consumes server resources.</p></li><li><p><strong>Debugging</strong> &#128269;: Complexity increases with third-party services.</p></li><li><p><strong>Limited Filtering</strong> &#128683;: Some providers may lack detailed options.</p></li><li><p><strong>Ordering</strong> &#128230;: No guaranteed sequence for events.</p></li></ul><h3>1.4. &#128203; Use cases</h3><ul><li><p><strong>Real-Time Notifications</strong> &#128680;: Immediate alerts for events like new posts.</p></li><li><p><strong>CI/CD</strong> &#128736;: Trigger builds, tests, and deployments on code changes.</p></li><li><p><strong>E-Commerce Updates</strong> &#128717;: Notify on order placements, payments, or stock changes.</p></li><li><p><strong>CMS</strong> &#128221;: Alerts on content changes.</p></li><li><p><strong>Social Media Integration</strong> &#128242;: Updates on posts and interactions.</p></li><li><p><strong>Monitoring &amp; Analytics</strong> &#128202;: Alerts for system or security issues.</p></li><li><p><strong>Chatbots</strong> &#128172;: Notifications for new messages.</p></li><li><p><strong>Payments</strong> &#128179;: Status updates on transactions.</p></li><li><p><strong>IoT Device Communication</strong> &#127760;: Send data when specific conditions are met by IoT devices.</p></li><li><p><strong>Collaboration Tools Integration</strong> &#129309;: Notify on task updates or new messages in collaboration apps.</p></li></ul><p>&#10067; What API architecture style are you guys currently utilizing in your system?</p><div><hr></div><h2>2. Load Balancing Methods: <strong>Round Robin, Sticky Round Robin, Weighted Round Robin, IP Hash, Generic Hash, Least Connections, Least Time</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kzsy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kzsy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 424w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 848w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 1272w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kzsy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif" width="1456" height="260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:260,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1558972,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kzsy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 424w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 848w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 1272w, https://substackcdn.com/image/fetch/$s_!Kzsy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5056425c-b107-4cc8-9b30-5270a7ddfd6d_2688x480.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>More detailed:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O3Gz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O3Gz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 424w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 848w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 1272w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O3Gz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png" width="1456" height="698" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4718356,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O3Gz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 424w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 848w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 1272w, https://substackcdn.com/image/fetch/$s_!O3Gz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bf9c668-e396-4a8a-a300-44d0e1058b87_7400x3548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>2.1.&nbsp;&#128257;Round Robin</strong></h3><ul><li><p><strong>Distributes requests sequentially across all servers in the pool. Simple and predictable.</strong></p></li><li><p>Static</p></li><li><p><strong>Pros</strong>:</p><ul><li><p><strong>Easy Setup</strong> &#128994;: Minimal configuration</p></li><li><p><strong>Even Distribution</strong> &#128257;: Suitable for testing.</p></li><li><p><strong>No Monitoring Needed</strong> &#128202;: Rotates through servers.</p></li><li><p><strong>Predictable</strong> &#128260;: Can anticipate server handling.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p><strong>Server Overload Risk</strong> &#9888;&#65039;: Can push servers to overload if they're already heavily loaded.</p></li><li><p><strong>Requires Similar Server Capacity</strong> &#128207;: Best when all servers have roughly the same capacity.</p></li><li><p><strong>Content Uniformity Needed</strong> &#128203;: Requires all servers to host the same content.</p></li></ul></li><li><p><strong>Use Cases:</strong></p><ul><li><p><strong>Testing Environments</strong> &#129514;: Balanced request distribution for testing.</p></li><li><p><strong>Stateless Applications</strong> &#128260;: For independent, session-less requests.</p></li><li><p><strong>Uniform Server Capacities</strong> &#128207;: When all servers have similar resources.</p></li><li><p><strong>Microservices</strong> &#128640;: Even distribution across stateless services.</p></li></ul></li><li><p><strong>Example (NGINX):</strong></p><ul><li><p><code>upstream backend {</code></p><p><code>&nbsp;&nbsp; server s1.dmn.com;</code></p><p><code>&nbsp; &nbsp;server&nbsp;s2.dmn.com;</code></p><p><code>&nbsp; &nbsp;server&nbsp;s3.dmn.com;</code></p><p><code>}</code></p></li></ul></li></ul><h3><strong>2.2.  &#128994;&#128257;&nbsp;&nbsp;Sticky Round Robin</strong></h3><ul><li><p><strong>Distributes requests sequentially but ensures a user's subsequent requests stick to the initially assigned server, maintaining session persistence.</strong></p></li><li><p><strong>Static</strong></p></li><li><p><strong>Pros</strong>:</p><ul><li><p><strong>Session Persistence</strong> &#128204;: Maintains user session data.</p></li><li><p><strong>Better User Experience</strong> &#128640;: No session timeouts or data loss.</p></li><li><p><strong>Simpler App Design</strong> &#128736;&#65039;: Assumes user requests hit the same server.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p><strong>Potential Imbalance</strong> &#9878;&#65039;: Uneven load distribution.</p></li><li><p><strong>Scaling Issues</strong> &#128200;: Challenges when adding new servers.</p></li><li><p><strong>Server Failure Impact</strong> &#128293;: Disruptions if a sticky server fails.</p></li></ul></li><li><p><strong>Use Cases:</strong></p><ul><li><p><strong>Web Apps with Sessions</strong> &#128722;: Maintains user carts and preferences.</p></li><li><p><strong>Authentication Systems</strong> &#128272;: Keeps users logged in across requests.</p></li><li><p><strong>Multi-step Forms</strong> &#128221;: Remembers data across form pages.</p></li><li><p><strong>Streaming Services</strong> &#127909;: Consistent server connection during streams.</p></li><li><p><strong>Online Gaming</strong> &#127918;: Tracks player states and scores consistently.</p></li></ul></li><li><p><strong>Example (NGINX+):</strong></p><ul><li><p><code>upstream backend {</code></p><p><code>server s1.dmn.com;</code></p><p><code>server s2.dmn.com;</code></p><p><code>server s3.dmn.com;</code></p><p><code>sticky&nbsp;cookie&nbsp;srv_id expires=2h<br>domain=.dmn.com path=/;</code></p><p><code>}</code></p></li></ul></li></ul><h3><strong>2.3.&nbsp;&#9878;&#65039;&#128257;Weighted Round Robin</strong></h3><ul><li><p><strong>Distributes requests based on assigned server weights, favoring servers with higher capacities or priorities.</strong></p></li><li><p><strong>Static</strong></p></li><li><p><strong>Pros</strong>:</p><ol><li><p><strong>Adaptive Distribution</strong> &#128202;: Suits servers with different capacities.</p></li><li><p><strong>Flexibility</strong> &#128260;: Adjusts weights as server performance changes.</p></li><li><p><strong>Efficient</strong> &#9881;&#65039;: Maximizes resource utilization without overloading.</p></li></ol></li><li><p><strong>Cons</strong>:</p><ol><li><p><strong>Complexity</strong> &#129513;: Requires monitoring and weight adjustments.</p></li><li><p><strong>Potential Imbalance</strong> &#9888;&#65039;: Incorrect weights can lead to overloads.</p></li></ol></li><li><p><strong>Use Cases:</strong></p><ol><li><p><strong>Mixed Server Capacities</strong> &#127970;: When servers have varying resources.</p></li><li><p><strong>Dynamic Environments</strong> &#127786;&#65039;: Adapting to changing server performance.</p></li><li><p><strong>Traffic Prioritization</strong> &#128678;: Directing more traffic to higher-performing servers.</p></li></ol></li><li><p><strong>Example (NGINX):</strong></p><ul><li><p><code>upstream backend {&nbsp;&nbsp; </code></p><p><code>server s1.dmn.com weight=3;&nbsp; &nbsp;</code></p><p><code>server&nbsp;s2.dmn.com weight=2;<br>server&nbsp;s3.dmn.com&nbsp;weight=1;</code></p><p><code>}</code></p></li></ul></li></ul><h3><strong>2.4. &#128279;#&#65039;&#8419;IP Hash </strong></h3><ul><li><p><strong>Distributes requests based on a hash of the client's IP address, ensuring consistent routing to the same server for a specific IP.</strong></p></li><li><p><strong>Static</strong></p></li><li><p><strong>Pros</strong>:</p><ul><li><p><strong>Session Persistence</strong> &#128204;: Clients consistently directed to the same server.</p></li><li><p><strong>Predictable Distribution</strong> &#128256;: Based on client IP hash, ensuring even load.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p><strong>Limited Flexibility</strong> &#9939;&#65039;: Hard to adjust once set up.</p></li><li><p><strong>Imbalance Risk</strong> &#9888;&#65039;: Some servers might get more traffic if certain IP ranges are more active.</p></li></ul></li><li><p><strong>Use Cases:</strong></p><ul><li><p><strong>Stateful Applications</strong> &#128722;: Where session data needs to be retained.</p></li><li><p><strong>Geo-specific Content</strong> &#127757;: Serving content based on client's geographic location.</p></li><li><p><strong>Security &amp; Monitoring</strong> &#128737;&#65039;: Easier tracking and management of client sessions.</p></li></ul></li><li><p><strong>Example (NGINX)</strong>:</p><ul><li><p><code>upstream backend {</code></p><p><code>ip_hash;&nbsp;&nbsp; </code></p><p><code>server s1.dmn.com weight=3;<br>server&nbsp;s2.dmn.com weight=2;<br>server&nbsp;s3.dmn.com&nbsp;weight=1;</code></p><p><code>}</code></p></li></ul></li></ul><h3><strong>2.5. &#128307;#&#65039;&#8419;Generic&nbsp;Hash </strong></h3><ul><li><p><strong>Distributes requests using a hash of customizable inputs, offering flexible and consistent routing based on various data points.</strong></p></li><li><p><strong>Static</strong></p></li><li><p><strong>Pros</strong>:</p><ul><li><p><strong>Versatility &#127760;</strong>: Hashes on diverse inputs, including text, variables, or combinations like IP-port pairs or URIs.</p></li><li><p><strong>Uniform Distribution &#128256;</strong>: Aims for even distribution across servers.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p><strong>Complexity</strong> &#129513;: Requires careful selection of hash function.</p></li><li><p><strong>Potential Imbalance</strong> &#9888;&#65039;: Hash collisions or poor hash functions can skew distribution.</p></li></ul></li><li><p><strong>Use Cases:</strong></p><ul><li><p><strong>Custom Inputs</strong> &#128736;&#65039;: Hash based on specific application data or headers.</p></li><li><p><strong>Dynamic Environments</strong> &#127786;&#65039;: Where inputs for distribution change frequently.</p></li><li><p><strong>Cache Distribution</strong> &#128190;: Ensuring cached content is evenly distributed.</p></li></ul></li><li><p><strong>Example (NGINX)</strong>:</p><ul><li><p><code>upstream backend {</code></p><p><code>hash $request_uri;&nbsp;&nbsp; </code></p><p><code>server s1.dmn.com weight=3;<br>server&nbsp;s2.dmn.com weight=2;<br>server&nbsp;s3.dmn.com&nbsp;weight=1;</code></p><p><code>}</code></p></li></ul></li></ul><h3><strong>2.6.&nbsp;&#128268;&#128317;Least Connections</strong></h3><ul><li><p><strong>Directs traffic to servers with the fewest active connections, optimizing for server availability.</strong></p></li><li><p><strong>Dynamic</strong></p></li><li><p><strong>Pros</strong>:</p><ol><li><p><strong>Adaptive</strong> &#127760;: Directs traffic to less-busy servers.</p></li><li><p><strong>Efficiency</strong> &#9881;&#65039;: Maximizes server utilization without overburdening.</p></li></ol></li><li><p><strong>Cons</strong>:</p><ol><li><p><strong>Delayed Reaction</strong> &#9201;&#65039;: Might not account for sudden server load spikes.</p></li><li><p><strong>Potential Overhead</strong> &#128202;: Requires monitoring of active connections.</p></li></ol></li><li><p><strong>Use Cases</strong>:</p><ol><li><p><strong>Varying Server Capacities</strong> &#127970;: Balances load in mixed-capacity environments.</p></li><li><p><strong>High Traffic Sites</strong> &#128678;: Distributes large volumes of requests effectively.</p></li><li><p><strong>Real-time Applications</strong> &#127918;: Where quick response times are crucial.</p></li></ol></li><li><p><strong>Example (NGINX)</strong>:</p><ul><li><p><code>upstream backend {</code></p><p><code>least_conn;</code></p><p><code>server s1.dmn.com;</code></p><p><code>server s2.dmn.com;</code></p><p><code>server s3.dmn.com;}</code></p></li></ul></li></ul><h3><strong>2.7.&nbsp;</strong>&#9201;&#65039;&#128317;Least Time</h3><ul><li><p><strong>Routes traffic to servers with the quickest response times, ensuring faster user experiences.</strong></p></li><li><p><strong>Dynamic</strong></p></li><li><p><strong>Pros</strong>:</p><ol><li><p><strong>Fast Responses</strong> &#128640;: Prioritizes quickest servers.</p></li><li><p><strong>Dynamic Adaptation</strong> &#127760;: Adjusts based on server response times.</p></li></ol></li><li><p><strong>Cons</strong>:</p><ol><li><p><strong>Monitoring Overhead</strong> &#128202;: Requires continuous tracking of server latencies.</p></li><li><p><strong>Fluctuation Risk</strong> &#9888;&#65039;: Rapid changes in response times can lead to frequent server switches.</p></li></ol></li><li><p><strong>Use Cases</strong>:</p><ol><li><p><strong>User Experience</strong> &#128717;&#65039;: Ensures users get the fastest server response.</p></li><li><p><strong>High Demand Applications</strong> &#127909;: For services like video streaming where latency matters.</p></li><li><p><strong>Variable Server Performance</strong> &#128201;: Balances in environments with fluctuating server speeds.</p></li></ol></li><li><p><strong>Example (NGINX+)</strong>:</p><ul><li><p><code>upstream backend {</code></p><p><code>least_time header;</code></p><p><code>server s1.dmn.com;</code></p><p><code>server s2.dmn.com;</code></p><p><code>server s3.dmn.com;</code></p><p><code>}</code></p></li></ul></li></ul><p>&#10067; What combination of load balancing methods are you guys currently implementing in your system?</p><div><hr></div><h2>3. HTTP Status Codes</h2><p>HTTP status codes are three-digit responses sent by servers to indicate the outcome of a request. They categorize the result into five broad classes: informational (1xx), successful (2xx), redirection (3xx), client errors (4xx), and server errors (5xx). Understanding these codes is crucial as they provide insight into the success or failure of an HTTP request, helping diagnose issues, optimize user experience, and ensure smooth communication between client and server.</p><p>Short version:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9h1P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9h1P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 424w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 848w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 1272w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9h1P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png" width="1456" height="1602" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1602,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2948345,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9h1P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 424w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 848w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 1272w, https://substackcdn.com/image/fetch/$s_!9h1P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6b4d17a-7a6d-4ffe-bd75-40b83ef96de3_4116x4528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>and more detailed:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cmrv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cmrv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 424w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 848w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 1272w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cmrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png" width="1456" height="1324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1324,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3678196,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cmrv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 424w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 848w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 1272w, https://substackcdn.com/image/fetch/$s_!cmrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fd992b8-3cff-435a-8110-03620765e440_4096x3724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>1xx: Informational &#128260;</strong></h3><ul><li><p><code>100 Continue</code> &#128228;</p></li><li><p><code>101 Switching Protocols</code> &#128260;</p></li><li><p><code>102 Processing</code> &#9203;</p></li><li><p><code>103 Early Hints</code> &#128161;</p></li></ul><h3><strong>2xx: Successful &#9989;</strong></h3><ul><li><p><code>200 OK</code> &#127383;</p></li><li><p><code>201 Created</code> &#127381;</p></li><li><p><code>202 Accepted</code> &#128260;</p></li><li><p><code>203 Non-Authoritative Information</code> &#8505;&#65039;</p></li><li><p><code>204 No Content</code> &#128683;</p></li><li><p><code>205 Reset Content</code> &#128260;</p></li><li><p><code>206 Partial Content</code> &#9203;</p></li><li><p><code>207 Multi-Status</code> &#128202;</p></li><li><p><code>208 Already Reported</code> &#128226;</p></li><li><p><code>226 IM Used</code> &#128260;</p></li></ul><h3><strong>3xx: Redirection &#10145;&#65039;</strong></h3><ul><li><p><code>300 Multiple Choices</code> &#129300;</p></li><li><p><code>301 Moved Permanently</code> &#10145;&#65039;</p></li><li><p><code>302 Found</code> &#128260;</p></li><li><p><code>303 See Other</code> &#128064;</p></li><li><p><code>304 Not Modified</code> &#128260;</p></li><li><p><code>305 Use Proxy</code> &#128679;</p></li><li><p><code>307 Temporary Redirect</code> &#10145;&#65039;</p></li><li><p><code>308 Permanent Redirect</code> &#10145;&#65039;</p></li></ul><h3><strong>4xx: Client Errors &#10060;</strong></h3><ul><li><p><code>400 Bad Request</code> &#128683;</p></li><li><p><code>401 Unauthorized</code> &#128274;</p></li><li><p><code>402 Payment Required</code> &#128176;</p></li><li><p><code>403 Forbidden</code> &#128695;</p></li><li><p><code>404 Not Found</code> &#128371;&#65039;</p></li><li><p><code>405 Method Not Allowed</code> &#10060;</p></li><li><p><code>406 Not Acceptable</code> &#128683;.</p></li><li><p><code>407 Proxy Auth Required</code> &#128274;</p></li><li><p><code>408 Request Timeout</code> &#9200;</p></li><li><p><code>409 Conflict</code> &#9888;&#65039;</p></li><li><p><code>410 Gone</code> &#128371;&#65039;</p></li><li><p><code>411 Length Required</code> &#10071;</p></li><li><p><code>412 Precondition Failed</code> &#10060;</p></li><li><p><code>413 Payload Too Large</code> &#128230;</p></li><li><p><code>414 URI Too Long</code> &#128207;</p></li><li><p><code>415 Unsupported Media Type</code> &#10060;</p></li><li><p><code>416 Range Not Satisfiable</code> &#128683;</p></li><li><p><code>417 Expectation Failed</code> &#10060;</p></li><li><p><code>418 I'm a Teapot</code> &#9749;: April Fools' joke</p></li><li><p><code>419 Page Expired</code> &#9203;</p></li><li><p><code>420 Method Failure/Enhance Your Calm</code> &#128683;</p></li></ul><ul><li><p><code>421 Misdirected Request</code> &#10071;<strong>&#9;&#9;&nbsp; &nbsp;&nbsp;</strong></p></li></ul><ul><li><p><code>422 Unprocessable Entity</code> &#10060;(WebDAV)</p></li></ul><ul><li><p><code>423 Locked</code> &#128274;&nbsp;(WebDAV)</p></li><li><p><code>424 Failed Dependency</code> &#10060;(WebDAV)</p></li></ul><ul><li><p><code>425 Too Early</code> &#9200;</p></li><li><p><code>426 Upgrade Required</code> &#11014;&#65039;</p></li><li><p><code>428 Precondition Required</code> &#10071;</p></li><li><p><code>429 Too Many Requests</code> &#128683;</p></li><li><p><code>430 HTTP Status Code</code> &#128683;</p></li><li><p><code>431 Headers Too Large</code> &#128207;</p></li><li><p><code>440 Login Time-Out</code> &#9200;</p></li><li><p><code>444 No Response</code> &#128683;</p></li><li><p><code>449 Retry With</code> &#128257;</p></li><li><p><code>450 Blocked by Parental Controls</code> &#128274;<strong>&#9;&#9;&nbsp;</strong></p></li></ul><ul><li><p><code>451 Legal Reasons</code> &#9878;&#65039;</p></li><li><p><code>460 Client Closed Connection Prematurely</code> &#128683;</p></li></ul><ul><li><p><code>463 Too Many Forwarded IP Addresses</code> &#128683;<strong>&#9;&#9;&nbsp;</strong></p></li></ul><ul><li><p><code>494 Request Header Too Large</code> &#128207;</p></li><li><p><code>495 SSL Certificate Error</code> &#10060;</p></li><li><p><code>496 SSL Certificate Required</code> &#128274;</p></li><li><p><code>497 HTTP to HTTPS</code> &#10060;</p></li><li><p><code>498 Invalid Token</code> &#10060;</p></li><li><p><code>499 Token Required/Client Closed</code> &#128683;</p></li></ul><h3><strong>5xx: Server Errors&#128680;</strong></h3><ul><li><p><code>500 Internal Server Error</code> &#128680;</p></li><li><p><code>501 Not Implemented</code> &#10060;</p></li><li><p><code>502 Bad Gateway</code> &#128679;</p></li><li><p><code>503 Service Unavailable</code> &#9940;</p></li><li><p><code>504 Gateway Timeout</code> &#9200;</p></li><li><p><code>505 HTTP Version Not Supported</code> &#10060;</p></li><li><p><code>506 Variant Also Negotiates</code> &#128260;</p></li><li><p><code>507 Insufficient Storage</code> &#128190;(WebDAV)</p></li><li><p><code>508 Loop Detected</code> &#128257;(WebDAV)</p></li><li><p><code>509 Bandwidth Limit Exceeded</code> &#128202;</p></li><li><p><code>510 Not Extended</code> &#10133;</p></li><li><p><code>511 Network Authentication Required</code> &#128274;</p></li><li><p><code>520 Unknown Error</code> &#10067;</p></li><li><p><code>521 Server Is Down</code> &#9940;</p></li><li><p><code>522 Timeout</code> &#9200;</p></li><li><p><code>523 Origin Unreachable</code> &#128679;</p></li><li><p><code>524 Timeout</code> &#9200;</p></li><li><p><code>525 SSL Handshake Failed</code> &#128274;</p></li><li><p><code>526 Invalid SSL Certificate</code> &#10060;</p></li><li><p><code>527 Railgun Listener to Origin</code> &#128644;</p></li><li><p><code>529 Service Overloaded</code> &#9888;&#65039;</p></li><li><p><code>530 Site Frozen</code> &#10052;&#65039;</p></li><li><p><code>598 Network Read Timeout</code> &#9200;</p></li><li><p><code>599 Network Connect Timeout</code> &#9200;</p></li></ul><p>&#10067; Imagine you're designing a new HTTP status code that indicates a server has understood the request but refuses to fulfill it, not due to authorization issues but because it deems the request to be potentially harmful or malicious. What would you name this status code, and how would you differentiate its use from the existing <code>403 Forbidden</code> and <code>451 Unavailable For Legal Reasons</code> codes?</p><div><hr></div><h2>4. Fundamental Latency Metrics to Remember</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dPhI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dPhI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 424w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 848w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 1272w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dPhI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png" width="1456" height="1379" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1379,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:314368,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dPhI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 424w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 848w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 1272w, https://substackcdn.com/image/fetch/$s_!dPhI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a305bd-1b1c-4dce-bf24-ec589a3ed60e_4097x3881.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The numbers provided are approximate, based on figures from Peter Norvig&#8217;s article: <a href="http://norvig.com/21-days.html#answers">http://norvig.com/21-days.html#answers</a>. </p><p>It's essential to have a general understanding of the orders of magnitude rather than the exact values for the following reasons:</p><ol><li><p><strong>Performance Optimization</strong>: Helps identify system bottlenecks and areas for improvement.</p></li><li><p><strong>System Design</strong>: Guides decisions about data placement and communication strategies in distributed systems.</p></li><li><p><strong>Realistic Expectations</strong>: Sets achievable benchmarks for system operations.</p></li><li><p><strong>Efficient Coding</strong>: Enables developers to write latency-aware code, reducing wasteful operations.</p></li><li><p><strong>Debugging</strong>: Assists in quickly spotting performance anomalies.</p></li><li><p><strong>User Experience</strong>: Directly impacts how users perceive application responsiveness.</p></li><li><p><strong>Cost Efficiency</strong>: Faster operations can lead to savings, especially in cloud environments.</p></li><li><p><strong>Educated Trade-offs</strong>: Allows for informed decisions when balancing performance, cost, and reliability.</p></li></ol><p>&#10067; Guys, if you had to design a real-time collaborative document editing platform (similar to Google Docs) where multiple users from around the world can edit a document simultaneously, which latency numbers would be most critical to consider, and how would they influence your design choices to ensure a seamless user experience?</p><div><hr></div><h2>5. Git commands. Part 1 (21 commands).</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wm-s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wm-s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 424w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 848w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 1272w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wm-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png" width="1456" height="2704" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2704,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2602363,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wm-s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 424w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 848w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 1272w, https://substackcdn.com/image/fetch/$s_!Wm-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21854d9a-b60b-45d7-8eef-bb02db4b6e14_4326x8034.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Use case: Developing a new feature for a web application.</strong></p><ul><li><p><strong>Git config</strong>: Before starting, Alice sets her Git username and email.</p></li></ul><pre><code><code>git config --global user.name "Alice Smith" git config --global user.email "alice.smith@example.com"</code></code></pre><ul><li><p><strong>Git init</strong>: Alice initializes a new Git repository for her project.</p></li></ul><pre><code><code>git init my-web-app</code></code></pre><ul><li><p><strong>Git clone</strong>: Bob wants to collaborate with Alice. He clones her repository.</p></li></ul><pre><code><code>git clone https://github.com/alice/my-web-app.git</code></code></pre><ul><li><p><strong>Git status</strong>: Alice checks the status of her files.</p></li></ul><pre><code><code>git status</code></code></pre><ul><li><p><strong>Git add</strong>: Alice adds a new file to the staging area.</p></li></ul><pre><code><code>git add index.html</code></code></pre><ul><li><p><strong>Git commit</strong>: Alice commits her changes with a message.</p></li></ul><pre><code><code>git commit -m "Added homepage."</code></code></pre><ul><li><p><strong>Git push</strong>: Alice pushes her changes to the remote repository.</p></li></ul><pre><code><code>git push origin master</code></code></pre><ul><li><p><strong>Git branch</strong>: Bob creates a new branch to work on a feature.</p></li></ul><pre><code><code>git branch feature-navbar</code></code></pre><ul><li><p><strong>Git checkout</strong>: Bob switches to his new branch.</p></li></ul><pre><code><code>git checkout feature-navbar</code></code></pre><ul><li><p><strong>Git merge</strong>: Alice merges Bob's feature branch into the master branch.</p></li></ul><pre><code><code>git merge feature-navbar</code></code></pre><ul><li><p><strong>Git pull</strong>: Bob pulls the latest changes from the remote repository.</p></li></ul><pre><code><code>git pull origin master</code></code></pre><ul><li><p><strong>Git log</strong>: Alice views the commit history.</p></li></ul><pre><code><code>git log</code></code></pre><ul><li><p><strong>Git show</strong>: Bob checks the details of the last commit.</p></li></ul><pre><code><code>git show</code></code></pre><ul><li><p><strong>Git diff</strong>: Alice checks the differences between her working directory and the last commit.</p></li></ul><pre><code><code>git diff</code></code></pre><ul><li><p><strong>Git tag</strong>: Alice tags the current commit as a new release.</p></li></ul><pre><code><code>git tag v1.0</code></code></pre><ul><li><p><strong>Git rm</strong>: Bob removes a file from the repository.</p></li></ul><pre><code><code>git rm old-file.txt</code></code></pre><ul><li><p><strong>Git stash</strong>: Alice temporarily saves her changes to work on something else.</p></li></ul><pre><code><code>git stash</code></code></pre><ul><li><p><strong>Git reset</strong>: Bob undoes the last commit, keeping the changes in the working directory.</p></li></ul><pre><code><code>git reset HEAD~1</code></code></pre><ul><li><p><strong>Git revert</strong>: Alice undoes a specific commit by creating a new commit.</p></li></ul><pre><code><code>git revert commit_id</code></code></pre><ul><li><p><strong>Git remote</strong>: Bob checks the remote repositories connected to his local repository.</p></li></ul><pre><code><code>git remote -v</code></code></pre><ul><li><p><strong>Git fetch</strong>: Alice fetches the latest changes from the remote repository without merging.</p></li></ul><pre><code><code>git fetch origin</code></code></pre><p>&#10067; Guys, imagine you're working on a feature branch in Git and you've made several commits. You then realize that one of the commits in the middle introduced a critical bug. Without reverting or affecting the subsequent commits, how would you use Git commands to isolate and address just that specific commit? </p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[EZF-001 REST API, Caching strategies, Differences Between API Gateway and Load Balancer, Diagram as Code ]]></title><description><![CDATA[Recap on system design for this week:]]></description><link>https://blog.ezvizi.com/p/ezf-001-rest-api-caching-strategies</link><guid isPermaLink="false">https://blog.ezvizi.com/p/ezf-001-rest-api-caching-strategies</guid><dc:creator><![CDATA[EzVizi System Design]]></dc:creator><pubDate>Sat, 30 Sep 2023 08:43:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recap on system design for this week:</p><ul><li><p>REST API Architecture style</p></li><li><p>Caching strategies Part 1 (5 strategies)</p></li><li><p>Differences Between API Gateway and Load Balancer</p></li><li><p>Linux commands. Part 1 (37 commands)</p></li><li><p>Diagram as Code</p></li></ul><div><hr></div><h2>1. REST API Architecture style</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n6rZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n6rZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 424w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 848w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 1272w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n6rZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png" width="1456" height="1664" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1664,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3783004,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n6rZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 424w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 848w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 1272w, https://substackcdn.com/image/fetch/$s_!n6rZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a63ff3a-3ad1-4ce0-8992-b9677c826a53_5250x6000.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>1.1. Message formats: </h3><ul><li><p>XML</p></li><li><p>JSON</p></li><li><p>Other</p></li></ul><h3>1.2. &#9989; Advantages:</h3><ul><li><p><strong>Stateless</strong>: Scales easily</p></li><li><p><strong>Cacheable</strong>: Improved performance</p></li><li><p><strong>Uniform Interface</strong>: Standardized use</p></li><li><p><strong>Scalable</strong>: Supports high request volumes</p></li><li><p><strong>Interoperable</strong>: Works well with HTTP</p></li><li><p><strong>Simple</strong>: Uses standard HTTP methods</p></li><li><p><strong>Widely Adopted</strong>: Many resources available</p></li></ul><h3>1.3. &#10060; Disadvantages</h3><ul><li><p><strong>Over/Under-fetching</strong>: Fixed data returns</p></li><li><p><strong>Multiple Endpoints</strong>: More requests for complex data</p></li><li><p><strong>Versioning Issues</strong>: Changes can break clients</p></li><li><p><strong>Limited Flexibility</strong>: Fixed data structures</p></li><li><p><strong>Performance</strong>: Multiple trips for complex data.</p></li><li><p><strong>Stateful Limitations</strong>: Not ideal for real-time operations</p></li><li><p><strong>Nested Resource Complexity</strong>: Harder to manage nested data</p></li></ul><h3>1.4. &#128203; Use cases</h3><ul><li><p><strong>Web Applications</strong>. Backend for web apps with CRUD operations.</p></li><li><p><strong>Mobile Apps</strong>. Backend support for mobile app data needs.</p></li><li><p><strong>Public APIs</strong>. Offer services to third-party developers.</p></li><li><p><strong>Integration</strong>. Connect different systems or services.</p></li><li><p><strong>Content Delivery</strong>. Distribute content to various platforms.</p></li><li><p><strong>Data Storage</strong>.&nbsp;Backend for apps needing database access.</p></li><li><p><strong>E-Commerce</strong>. Manage products, orders, and user accounts.</p></li><li><p><strong>Social Media Platforms</strong>. Handle user data, posts, and interactions.</p></li><li><p><strong>IoT Devices</strong>. Communicate with and manage IoT devices.</p></li><li><p><strong>Legacy System Interface</strong>. Modern interface for older systems.</p></li></ul><p>&#10067; What API architecture style are you guys currently utilizing in your system?</p><div><hr></div><h2>2. Caching strategies: <strong>Cache Aside (Lazy Loading), Read-Through, Write-Through, Write-Around, Write-Behind (Write-Back) </strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!drvh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!drvh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 424w, https://substackcdn.com/image/fetch/$s_!drvh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 848w, https://substackcdn.com/image/fetch/$s_!drvh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 1272w, https://substackcdn.com/image/fetch/$s_!drvh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!drvh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png" width="1456" height="1458" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1458,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8095610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!drvh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 424w, https://substackcdn.com/image/fetch/$s_!drvh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 848w, https://substackcdn.com/image/fetch/$s_!drvh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 1272w, https://substackcdn.com/image/fetch/$s_!drvh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4157df6f-44fe-42f1-95cb-7081f0dd5019_8490x8500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>2.1. &#128164;&#128204;Cache-Aside (Lazy Loading)</strong></h3><ul><li><p>Data is loaded into the cache on demand. If data is not found in the cache, the application retrieves it from the datastore and then stores it in the cache.</p></li><li><p><strong>Pros</strong>:</p><ul><li><p>&#127919; Only requested data is cached.</p></li><li><p>&#128260; Cache can be easily refreshed.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>&#10060; Initial cache miss incurs a latency penalty.</p></li><li><p>&#128260; Manual intervention required for cache updates.</p></li></ul></li></ul><h3><strong>2.2.  &#128214;&#128269;Read-Through</strong></h3><ul><li><p>The cache is responsible for loading data from the datastore when a cache miss occurs.</p></li><li><p><strong>Pros</strong>:</p><ul><li><p>&#128260; Automatic data loading.</p></li><li><p>&#127919; Consistent cache and datastore data.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>&#10060; Initial cache miss can slow down the application.</p></li></ul></li></ul><h3><strong>2.3. &#9997;&#65039;&#128269;Write-Through </strong></h3><ul><li><p>Data is written to both the cache and the datastore <strong>synchronously</strong> (simultaneously).</p></li><li><p><strong>Pros</strong>:</p><ul><li><p>&#9989; Immediate data consistency.</p></li><li><p>&#128260; Automatic data updates.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>&#10060; Slower write operations due to dual writes.</p></li></ul></li></ul><h3><strong>2.4. &#9999;&#65039;&#128260;&nbsp;Write-Around </strong></h3><ul><li><p>Data is written directly to the datastore, bypassing the cache. The cache is updated later or during subsequent read operations.</p></li><li><p><strong>Pros</strong>:</p><ul><li><p>&#9889; Faster initial write operations.</p></li><li><p>&#127919; Reduces cache churn for less frequently accessed data.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>&#10060; Subsequent reads might suffer from cache misses.</p></li></ul></li></ul><h3><strong>2.5. &#9999;&#65039;&#128281;Write-Behind (Write-Back) </strong></h3><ul><li><p>Data is first written to the cache, and then <strong>asynchronously</strong> written to the datastore.</p></li><li><p><strong>Pros</strong>:</p><ul><li><p>&#9889; Fast write operations.</p></li><li><p>&#128260; Asynchronous updates optimize datastore writes.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>&#10060; Risk of data loss if cache fails before async write.</p></li></ul></li></ul><p>&#10067; What combination of caching strategies are you guys currently implementing in your system?</p><div><hr></div><h2>3. Differences Between API Gateway and Load Balancer</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7hMj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7hMj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 424w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 848w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 1272w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7hMj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png" width="1456" height="3276" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3276,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6551315,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7hMj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 424w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 848w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 1272w, https://substackcdn.com/image/fetch/$s_!7hMj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cf0c3f2-baba-4193-976e-52e9278d4147_5400x12150.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>While both API Gateways and Load Balancers manage incoming requests, they serve different primary roles. In many architectures, especially in microservices, you'll often find both an API gateway and a load balancer working in tandem. An API Gateway focuses on API management, offering a suite of tools for processing and directing API calls. In contrast, a Load Balancer's main job is to distribute traffic to ensure optimal server performance and availability.</p><p><strong>API Gateway:</strong> &#127760; <strong>Primary Role:</strong> Manages and processes API requests.</p><p>&#128313; <strong>Functions:</strong></p><ul><li><p>&#128678; <strong>Request Routing:</strong> Directs requests to the appropriate service.</p></li><li><p>&#129513; <strong>API Composition:</strong> Aggregates data from multiple services.</p></li><li><p>&#9203; <strong>Rate Limiting:</strong> Limits request frequency.</p></li><li><p>&#128274; <strong>Security:</strong> Manages authentication and API keys.</p></li><li><p>&#128640; <strong>Caching:</strong> Improves response times with stored data.</p></li><li><p>&#128260; <strong>Request/Response Transformation:</strong> Modifies data formats.</p></li><li><p>&#128202; <strong>Analytics &amp; Monitoring:</strong> Tracks API usage.</p></li><li><p>&#128269; <strong>Service Discovery:</strong> Identifies available services.</p></li><li><p>&#10060; <strong>Error Handling &amp; Retry:</strong> Manages failed requests.</p></li><li><p>&#128295; <strong>Protocol Translation:</strong> Converts communication protocols.</p></li></ul><p>&#128313; <strong>Use Cases:</strong> Microservices, API management, data aggregation, securing APIs.</p><p><strong>Load Balancer:</strong> &#9878;&#65039; <strong>Primary Role:</strong> Distributes incoming network traffic.</p><p>&#128313; <strong>Functions:</strong></p><ul><li><p>&#127754; <strong>Traffic Distribution:</strong> Prevents server overloads.</p></li><li><p>&#10084;&#65039; <strong>Health Checks:</strong> Monitors server health.</p></li><li><p>&#128272; <strong>SSL Termination:</strong> Handles SSL/TLS processing.</p></li><li><p>&#129516; <strong>Session Persistence:</strong> Maintains client-server connection.</p></li><li><p>&#128225; <strong>Layer 4 and Layer 7 Load Balancing:</strong> Operates at transport and application layers.</p></li></ul><p>&#128313; <strong>Use Cases:</strong> High availability, fault tolerance, application scaling, large-scale web traffic management.</p><p><strong>Key Differences:</strong></p><ul><li><p>&#127919; <strong>Focus:</strong> API gateway = API management. Load balancer = traffic distribution.</p></li><li><p>&#128269; <strong>Granularity:</strong> API gateway = fine-grained control. Load balancer = broader network level.</p></li><li><p>&#128736;&#65039; <strong>Features:</strong> API gateway = tailored for API management. Load balancer = traffic and health management.</p></li></ul><p>In modern architectures, especially microservices, both API gateways and load balancers often work together. The load balancer manages traffic, while the API gateway handles API requests.</p><p>&#10067; Are you guys utilizing both API gateways and load balancers in your infrastructure?</p><div><hr></div><h2>4. Linux commands. Part 1 (37 commands).</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l-X7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l-X7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 424w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 848w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 1272w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l-X7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png" width="1456" height="913" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:913,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10139640,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l-X7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 424w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 848w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 1272w, https://substackcdn.com/image/fetch/$s_!l-X7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F356029e6-00ba-48f2-a86d-49cfae7ed8f7_13660x8570.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><ol><li><p><strong>File Operations</strong> &#128194;:</p><ul><li><p><code>ls</code><strong> </strong>&#128196;: List directory contents</p><ul><li><p>Example: <code>ls -l</code></p></li></ul></li><li><p><code>cp</code><strong> </strong>&#128203;: Copy files and directories</p><ul><li><p>Example: <code>cp source.txt destination.txt</code></p></li></ul></li><li><p><code>mv</code> &#128666;: Move or rename files and directories</p><ul><li><p>Example: <code>mv oldname.txt newname.txt</code></p></li></ul></li><li><p><code>rm</code> &#128465;&#65039;: Remove files or directories</p><ul><li><p>Example: <code>rm unwanted.txt</code></p></li></ul></li><li><p><code>touch</code> &#9997;&#65039;: Create an empty file</p><ul><li><p>Example: <code>touch newfile.txt</code></p></li></ul></li><li><p><code>cat</code> &#128214;: Concatenate and display file content</p><ul><li><p>Example: <code>cat file.txt</code></p></li></ul></li></ul><p><strong>Directory Operations</strong> &#128193;:</p><ul><li><p><code>pwd</code> &#128205;: Print working directory</p><ul><li><p>Example: <code>pwd</code></p></li></ul></li><li><p><code>cd</code> &#128682;: Change directory</p><ul><li><p>Example: <code>cd /home/user/documents</code></p></li></ul></li><li><p><code>mkdir</code> &#127381;&#128193;: Make directories</p><ul><li><p>Example: <code>mkdir new_directory</code></p></li></ul></li><li><p><code>rmdir</code> &#128683;&#128193;: Remove empty directories</p><ul><li><p>Example: <code>rmdir empty_directory</code></p></li></ul></li></ul><p><strong>System Info</strong> &#8505;&#65039;:</p><ul><li><p><code>uname</code> &#128421;&#65039;: Display system information</p><ul><li><p>Example: <code>uname -a</code></p></li></ul></li><li><p><code>top</code> &#128202;: Display system tasks</p><ul><li><p>Example: <code>top</code></p></li></ul></li><li><p><code>df</code> &#128189;: Disk space usage of file system</p><ul><li><p>Example: <code>df -h</code></p></li></ul></li><li><p><code>free</code> &#129504;: Display memory usage</p><ul><li><p>Example: <code>free -m</code></p></li></ul></li><li><p><code>ps</code> &#128260;: Display process status</p><ul><li><p>Example: <code>ps aux</code></p></li></ul></li></ul><p><strong>Permissions</strong> &#128274;:</p><ul><li><p><code>chmod</code> &#128273;: Change file mode bits</p><ul><li><p>Example: <code>chmod 755 script.sh</code></p></li></ul></li><li><p><code>chown</code> &#128100;: Change file owner and group</p><ul><li><p>Example: <code>chown user:group file.txt</code></p></li></ul></li><li><p><code>chgrp</code> &#128101;: Change group ownership</p><ul><li><p>Example: <code>chgrp group file.txt</code></p></li></ul></li></ul><p><strong>Networking</strong> &#127760;:</p><ul><li><p><code>ping</code> &#128225;: Send ICMP ECHO_REQUEST to network hosts</p><ul><li><p>Example: <code>ping google.com</code></p></li></ul></li><li><p><code>netstat</code> &#127760;&#128202;: Network statistics</p><ul><li><p>Example: <code>netstat -tuln</code></p></li></ul></li><li><p><code>ifconfig</code> &#127760;&#128736;&#65039;: Display or configure a network interface</p><ul><li><p>Example: <code>ifconfig eth0</code></p></li></ul></li><li><p><code>ssh</code> &#128737;&#65039;: Secure shell client (remote login program)</p><ul><li><p>Example: <code>ssh user@hostname</code></p></li></ul></li><li><p><code>scp</code> &#128228;: Secure copy (remote file copy program)</p><ul><li><p>Example: <code>scp file.txt user@hostname:/path/</code></p></li></ul></li></ul><p><strong>Compression/Archiving</strong> &#128476;&#65039;:</p><ul><li><p><code>tar</code> &#128230;: Tape archiver</p><ul><li><p>Example: <code>tar -czvf archive.tar.gz folder/</code></p></li></ul></li><li><p><code>gzip</code> &#128476;&#65039;: Compress or expand files</p><ul><li><p>Example: <code>gzip file.txt</code></p></li></ul></li><li><p><code>gunzip</code> &#128476;&#65039;&#128275;: Decompress files</p><ul><li><p>Example: <code>gunzip file.txt.gz</code></p></li></ul></li><li><p><code>zip</code> &#129296;: Package and compress files</p><ul><li><p>Example: <code>zip archive.zip file1.txt file2.txt</code></p></li></ul></li><li><p><code>unzip</code> &#129296;&#128275;: Extract compressed files in a ZIP archive</p><ul><li><p>Example: <code>unzip archive.zip</code></p></li></ul></li></ul><p><strong>Package Management</strong> &#128230;:</p><ul><li><p><code>apt-get</code> &#128229;: APT package handling utility (Debian-based systems)</p><ul><li><p>Example: <code>sudo apt-get install package_name</code></p></li></ul></li><li><p><code>yum</code> &#128229;: Package manager for RPM-based systems</p><ul><li><p>Example: <code>sudo yum install package_name</code></p></li></ul></li><li><p><code>dpkg</code> &#128229;: Package manager for Debian</p><ul><li><p>Example: <code>sudo dpkg -i package.deb</code></p></li></ul></li></ul><p><strong>Text Processing</strong> &#128269;:</p><ul><li><p><code>grep</code> &#128270;: Search text</p><ul><li><p>Example: <code>grep "pattern" file.txt</code></p></li></ul></li><li><p><code>sed</code> &#9986;&#65039;: Stream editor</p><ul><li><p>Example: <code>sed 's/old/new/g' file.txt</code></p></li></ul></li><li><p><code>awk</code> &#128221;: Pattern scanning and text processing language</p><ul><li><p>Example: <code>awk '{print $1}' file.txt</code></p></li></ul></li></ul><p><strong>Help &amp; Output</strong> &#128216;:</p><ul><li><p><code>man</code> &#128218;: Display manual pages</p><ul><li><p>Example: <code>man ls</code></p></li></ul></li><li><p><code>echo</code> &#128266;: Display a line of text</p><ul><li><p>Example: <code>echo "Hello, World!"</code></p></li></ul></li></ul><p><strong>Process Management</strong> &#10060;:</p><ul><li><p><code>kill</code> &#9760;&#65039;: Terminate processes</p><ul><li><p>Example: <code>kill -9 12345</code> (where 12345 is a process ID)</p></li></ul></li></ul></li></ol><p>&#10067; Which Linux commands do you find most frequently used in your daily operations?</p><div><hr></div><h2>5. Diagram as Code</h2><p>Diagrams (Diagram as Code) allows you to create cloud system architecture diagrams using Python.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gVM7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gVM7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gVM7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:326200,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gVM7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!gVM7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a831f-964c-4fc8-8fd3-bcbbe915168c_1280x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Originally designed for quick prototyping of new architectures without specialized design tools, it can also be employed to visualize or describe existing systems. The tool is versatile, supporting a wide range of major cloud providers like AWS, Azure, GCP, Kubernetes, Alibaba Cloud, and Oracle Cloud, as well as On-Premise nodes, SaaS platforms, and key programming languages and frameworks. One of its standout features is its compatibility with version control systems, enabling you to track changes to your architecture diagrams over time. Note: While Diagrams excels at creating architecture diagrams, it neither manages actual cloud resources nor generates cloud formation or terraform scripts. For a deeper dive, check out the optional 6-minute video below.</p><div id="youtube2-wbjDTFDNIBo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wbjDTFDNIBo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/wbjDTFDNIBo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>&#10067; Which tool or software are you guys utilizing to generate diagrams programmatically?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.ezvizi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading EzVizi Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>