<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Charles Gonzalez Jr</title>
    <description>The latest articles on DEV Community by Charles Gonzalez Jr (@mryankee2k1).</description>
    <link>https://dev.to/mryankee2k1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2688557%2F2ac68d57-fd91-4c9b-9074-3a6ca3d87aeb.jpeg</url>
      <title>DEV Community: Charles Gonzalez Jr</title>
      <link>https://dev.to/mryankee2k1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mryankee2k1"/>
    <language>en</language>
    <item>
      <title>What Is A Merkle Tree And How Is It Used In Distributed Systems</title>
      <dc:creator>Charles Gonzalez Jr</dc:creator>
      <pubDate>Tue, 11 Mar 2025 16:27:26 +0000</pubDate>
      <link>https://dev.to/mryankee2k1/what-is-a-merkle-tree-and-how-is-it-used-in-distributed-systems-3ll1</link>
      <guid>https://dev.to/mryankee2k1/what-is-a-merkle-tree-and-how-is-it-used-in-distributed-systems-3ll1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In distributed systems, ensuring data integrity and consistency across multiple nodes is a critical challenge. One widely used data structure that helps achieve this is the &lt;strong&gt;Merkle tree&lt;/strong&gt;. Originally introduced by Ralph Merkle in 1979, Merkle trees are essential in various applications, including blockchain, distributed databases, and peer-to-peer networks.&lt;/p&gt;

&lt;p&gt;This article explores what a Merkle tree is, how it works, and why it is a fundamental component in distributed systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Merkle Tree?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Merkle tree&lt;/strong&gt; (or hash tree) is a binary tree where each &lt;strong&gt;leaf node&lt;/strong&gt; contains the cryptographic hash of a data block, and each &lt;strong&gt;non-leaf node&lt;/strong&gt; stores the hash of its child nodes. The root of the tree, known as the &lt;strong&gt;Merkle root&lt;/strong&gt;, represents the integrity of all the underlying data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Structure of a Merkle Tree
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leaf Nodes&lt;/strong&gt;: Store the hash of individual data blocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intermediate Nodes&lt;/strong&gt;: Contain hashes derived from concatenating and hashing their child nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merkle Root&lt;/strong&gt;: The final hash at the top of the tree that represents the integrity of all data in the structure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Merkle root provides a single, compact representation of an entire dataset, allowing efficient verification of data integrity.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Merkle Trees Work
&lt;/h2&gt;

&lt;p&gt;To construct a Merkle tree:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compute the cryptographic hash (e.g., SHA-256) of each data block.&lt;/li&gt;
&lt;li&gt;Pair adjacent hashes and compute a new hash by concatenating and hashing them together.&lt;/li&gt;
&lt;li&gt;Repeat this process until a single hash (the Merkle root) remains at the top.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the number of leaf nodes is odd, the last hash may be duplicated to maintain a balanced binary tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merkle Trees in Distributed Systems
&lt;/h2&gt;

&lt;p&gt;Merkle trees play a crucial role in distributed systems by ensuring &lt;strong&gt;efficient and secure data verification&lt;/strong&gt;. Here are some key use cases:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Blockchain Technology&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In blockchains like Bitcoin and Ethereum, Merkle trees are used to structure transaction data. The Merkle root is stored in each block header, allowing nodes to verify transactions efficiently without downloading the entire blockchain.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Distributed Databases&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Merkle trees help maintain data consistency between replicas in distributed databases such as Apache Cassandra and Amazon DynamoDB. By comparing Merkle roots, nodes can quickly detect inconsistencies and synchronize only the differing parts of the dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Peer-to-Peer (P2P) Networks&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In P2P file-sharing systems like BitTorrent, Merkle trees verify file integrity. Clients can download individual chunks and use Merkle proofs to confirm that each piece belongs to the correct file.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Certificate Transparency&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Merkle trees are used in certificate transparency logs to detect misissued or fraudulent SSL/TLS certificates. The structure ensures that any modification to the log is publicly auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Merkle Trees
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Verification&lt;/strong&gt;: Instead of transmitting the entire dataset, only a small Merkle proof is needed to verify data integrity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Bandwidth Usage&lt;/strong&gt;: Synchronizing nodes requires only exchanging Merkle roots instead of full datasets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tamper Detection&lt;/strong&gt;: Any modification in the data alters the Merkle root, making it easy to detect unauthorized changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Merkle trees are a fundamental data structure in distributed systems, enabling efficient and secure data verification. Whether in blockchain, databases, or peer-to-peer networks, their ability to ensure integrity with minimal computational overhead makes them indispensable in modern computing. Understanding how they work is essential for anyone working in &lt;strong&gt;backend development, system design, or distributed computing&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>backenddevelopment</category>
      <category>distributedsystems</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>How to design A Rate Limiter</title>
      <dc:creator>Charles Gonzalez Jr</dc:creator>
      <pubDate>Fri, 21 Feb 2025 18:49:02 +0000</pubDate>
      <link>https://dev.to/mryankee2k1/how-to-design-a-rate-limiter-3kcb</link>
      <guid>https://dev.to/mryankee2k1/how-to-design-a-rate-limiter-3kcb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In modern software systems, especially those that handle large amounts of traffic, preventing abuse and ensuring fair usage is essential. One way to control traffic flow and protect your resources is through &lt;strong&gt;rate limiting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this post, we’ll dive into what a rate limiter is, why it's important, and how to design one effectively using different algorithms.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a Rate Limiter?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;rate limiter&lt;/strong&gt; controls how often a user or service can perform a particular action within a given period of time. This could mean limiting the number of API requests per second, login attempts, or messages sent in a chat app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Benefits of Rate Limiting:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prevents abuse:&lt;/strong&gt; Stops users from spamming requests and overloading your system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensures fair usage:&lt;/strong&gt; Guarantees that all users get fair access to resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protects services:&lt;/strong&gt; Shields your backend services from unexpected surges in traffic (DDoS protection).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How Does a Rate Limiter Work?
&lt;/h2&gt;

&lt;p&gt;At its core, a rate limiter tracks actions over time and enforces limits based on predefined rules. For example, a system might allow &lt;strong&gt;100 requests per minute per user&lt;/strong&gt;. If a user exceeds that threshold, further requests will be blocked or delayed.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Common Use Cases:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Rate Limiting:&lt;/strong&gt; Restrict the number of API calls made by a user or application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Login Attempt Limits:&lt;/strong&gt; Prevent brute-force attacks by limiting failed login attempts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messaging Systems:&lt;/strong&gt; Control the rate at which users can send messages to prevent spam.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Rate Limiting Algorithms
&lt;/h2&gt;

&lt;p&gt;Different algorithms offer various trade-offs in terms of memory usage, accuracy, and scalability. Here are some of the most commonly used rate-limiting techniques:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Fixed Window Counter&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Divides time into fixed intervals (e.g., 1 minute).&lt;/li&gt;
&lt;li&gt;Counts the number of requests made in the current window.&lt;/li&gt;
&lt;li&gt;Simple but can lead to burst issues at window boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If a user sends 100 requests at the end of one window and another 100 at the beginning of the next, they effectively send &lt;strong&gt;200 requests in a short time&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;strong&gt;Sliding Window Log&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Maintains a log of timestamps for each request.&lt;/li&gt;
&lt;li&gt;Checks whether the number of requests in the current time window exceeds the limit.&lt;/li&gt;
&lt;li&gt;Highly accurate but requires more memory.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. &lt;strong&gt;Sliding Window Counter&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Breaks time windows into smaller intervals (e.g., seconds within a minute).&lt;/li&gt;
&lt;li&gt;Smooths out bursts while remaining memory-efficient.&lt;/li&gt;
&lt;li&gt;A balance between accuracy and efficiency.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. &lt;strong&gt;Token Bucket&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tokens are added to a bucket at a fixed rate.&lt;/li&gt;
&lt;li&gt;A request consumes a token; if no tokens are available, the request is denied.&lt;/li&gt;
&lt;li&gt;Allows short bursts while maintaining an average rate over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A user can make 10 quick requests in a burst if tokens are available, but after that, they must wait for tokens to refill.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. &lt;strong&gt;Leaky Bucket&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requests are processed at a fixed rate.&lt;/li&gt;
&lt;li&gt;Excess requests are either queued or dropped.&lt;/li&gt;
&lt;li&gt;Ideal for smoothing out traffic and avoiding spikes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Which Algorithm Should You Use?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Memory Usage&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;Handles Bursts&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fixed Window&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Simple use cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sliding Window Log&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;High accuracy &amp;amp; fairness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sliding Window  counter&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Balanced approach&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Bucket&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Allowing bursts with steady limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leaky Bucket&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Smoothing out traffic over time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Designing a Scalable Rate Limiter&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When designing a rate limiter for a distributed system, consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global vs. Local Limits:&lt;/strong&gt; Should the limit apply globally across servers or locally on each instance?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistence:&lt;/strong&gt; Should limits reset on server restarts? Use Redis or a distributed cache for persistence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful Handling:&lt;/strong&gt; Return meaningful error messages (e.g., HTTP &lt;code&gt;429 Too Many Requests&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Rate limiting is a critical component of modern backend systems. It ensures fair usage, protects against abuse, and helps maintain system stability. Whether you're using a simple &lt;strong&gt;fixed window&lt;/strong&gt; approach or implementing a more flexible &lt;strong&gt;token bucket&lt;/strong&gt; strategy, understanding how rate limiting works will help you design resilient, scalable systems.&lt;/p&gt;

&lt;p&gt;Thanks for reading!  &lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>distributedsystems</category>
      <category>backenddevelopment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Introduction To Consistent Hashing</title>
      <dc:creator>Charles Gonzalez Jr</dc:creator>
      <pubDate>Fri, 21 Feb 2025 01:11:40 +0000</pubDate>
      <link>https://dev.to/mryankee2k1/introduction-to-consistent-hashing-4fld</link>
      <guid>https://dev.to/mryankee2k1/introduction-to-consistent-hashing-4fld</guid>
      <description>&lt;h1&gt;
  
  
  Introduction to Consistent Hashing
&lt;/h1&gt;

&lt;p&gt;In the world of distributed systems, one of the common challenges is how to evenly distribute data across multiple servers or nodes while maintaining efficiency when nodes are added or removed. This is where &lt;strong&gt;Consistent Hashing&lt;/strong&gt; comes into play.&lt;/p&gt;

&lt;p&gt;In this post, we’ll explore what consistent hashing is, how it works, and how it helps solve common issues in distributed systems like load balancing and minimizing re-distribution of data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Consistent Hashing?
&lt;/h2&gt;

&lt;p&gt;Consistent hashing is a technique used to distribute data across a changing number of nodes (servers) in a way that minimizes the movement of data when nodes are added or removed. Unlike traditional hashing methods, which might require a complete reshuffling of data, consistent hashing allows for only a small fraction of data to be relocated when changes occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features of Consistent Hashing:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimal Data Movement&lt;/strong&gt;: Only a small subset of data is moved when nodes are added or removed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Consistent hashing works well even when nodes frequently join or leave.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault Tolerance&lt;/strong&gt;: If a node goes down, only the data mapped to that node is affected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Does Consistent Hashing Work?
&lt;/h2&gt;

&lt;p&gt;Let’s break it down step by step.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hashing the Nodes&lt;/strong&gt;: Each server or node is assigned a point on a circular "hash ring" using a hash function. The hash function takes the node identifier (such as an IP address or hostname) and maps it to a position on the ring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hashing the Keys&lt;/strong&gt;: Similarly, each data item (key) is mapped to the same ring using the same hash function. The key is then assigned to the nearest node in the clockwise direction on the ring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Handling Node Additions or Removals&lt;/strong&gt;: When a new node is added or removed, only the keys that are closest to that node will be affected. The rest of the keys remain unchanged. This is a huge advantage because it reduces the amount of data that needs to be moved.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Imagine we have a ring with 3 nodes: &lt;code&gt;Node A&lt;/code&gt;, &lt;code&gt;Node B&lt;/code&gt;, and &lt;code&gt;Node C&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Data items (keys) like &lt;code&gt;Key1&lt;/code&gt;, &lt;code&gt;Key2&lt;/code&gt;, and &lt;code&gt;Key3&lt;/code&gt; are mapped to points on the ring.&lt;/li&gt;
&lt;li&gt;When &lt;code&gt;Node B&lt;/code&gt; is removed, only the data items that were mapped to &lt;code&gt;Node B&lt;/code&gt; will need to be reassigned, and the rest remain as they are.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Virtual Nodes (or "Virtual Buckets")
&lt;/h3&gt;

&lt;p&gt;One challenge with consistent hashing is that it may lead to uneven distribution of keys. This can happen because a small number of nodes might be positioned very close to each other on the ring, leading to an imbalance.&lt;/p&gt;

&lt;p&gt;To solve this, &lt;strong&gt;virtual nodes&lt;/strong&gt; are used. A virtual node is a logical representation of a physical node on the ring. By assigning each physical node multiple virtual nodes (randomly spread across the ring), we can achieve a more uniform distribution of data across the nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Consistent Hashing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimal Rebalancing&lt;/strong&gt;: When a node is added or removed, only a small portion of the data needs to be moved to a new node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: The system can grow or shrink as needed, without excessive data movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault Tolerance&lt;/strong&gt;: If a node fails, the data can be redistributed efficiently, without significant impact on the rest of the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Caches&lt;/strong&gt;: Consistent hashing is widely used in caching systems like &lt;strong&gt;Memcached&lt;/strong&gt; and &lt;strong&gt;Redis&lt;/strong&gt;, where the goal is to distribute cache keys across multiple servers while minimizing the rehashing of data when servers are added or removed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Databases&lt;/strong&gt;: Systems like &lt;strong&gt;Cassandra&lt;/strong&gt; and &lt;strong&gt;DynamoDB&lt;/strong&gt; use consistent hashing to distribute data across nodes in a distributed database system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load Balancers&lt;/strong&gt;: Load balancers use consistent hashing to distribute traffic evenly across multiple servers, minimizing the chances of hot spots and ensuring smooth scaling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Consistent hashing is a powerful and efficient way to manage the distribution of data across a distributed system. By reducing the movement of data when nodes are added or removed, it helps ensure scalability, fault tolerance, and minimal disruption. &lt;/p&gt;

&lt;p&gt;Whether you're building a distributed cache or a fault-tolerant database, understanding consistent hashing is crucial for designing scalable and resilient systems.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>distributedsystems</category>
      <category>systemdesign</category>
      <category>backend</category>
    </item>
    <item>
      <title>Spring boot</title>
      <dc:creator>Charles Gonzalez Jr</dc:creator>
      <pubDate>Sat, 18 Jan 2025 01:32:32 +0000</pubDate>
      <link>https://dev.to/mryankee2k1/spring-boot-42di</link>
      <guid>https://dev.to/mryankee2k1/spring-boot-42di</guid>
      <description></description>
      <category>springboot</category>
    </item>
  </channel>
</rss>
