-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add WhyDelayBox.md
- Loading branch information
Jay
authored and
Jay
committed
Sep 10, 2024
1 parent
ffeb2b3
commit 94f0386
Showing
2 changed files
with
75 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
## Why DelayBox | ||
**DelayBox** is a concept coming from the bigger domain of scheduling and handling delays in distributed systems, mainly towards the improvement of resilience, consistency, and fault tolerance of distributed applications. It is a middleware component that can be used to buffer messages or events with the intention of creating delays to manage distributed timing issues. | ||
|
||
|
||
<p align="center"> | ||
<img src="docs/diagram2.svg" alt="Flow Architecture" /> | ||
</p> | ||
|
||
Here’s how DelayBox can help in designing a distributed system: | ||
|
||
### 1. Handling Eventual Consistency: | ||
|
||
Eventual consistency is common in distributed systems, especially when working with techniques such as event sourcing or CQRS. The DelayBox can retain messages or events for some time in order to support other parts of the system or nodes in reaching a coherent state without immediately rushing into synchronization, thus reducing race conditions or data conflicts. | ||
|
||
> **Scenario:** In a microservices architecture where services need to propagate changes across multiple services, introducing a delay can help ensure all dependent services are ready to process the incoming data, improving consistency. | ||
### 2. Update on your job application with Toast | ||
|
||
The distributed systems need to support the network partitioning, a situation that arises temporarily and results in the isolation of some nodes. By introducing delays in certain operations, it allows time for nodes to recover or retry instead of assuming immediate failure. | ||
|
||
> **Scenario:** If nodes A and B lose connectivity, a DelayBox could buffer messages from node A to node B, allowing A to temporarily operate in isolation and sync up later when B becomes available. | ||
### 3. Load Management and Throttling: | ||
|
||
Because the DelayBox can implement controlled delays in case a system gets overwhelmed with traffic, it enables throttling and smoothing out spikes in traffic without overloading requests onto the system. | ||
|
||
> **Scenario:** During peak hours, an e-commerce system can use a DelayBox to introduce delays in low-priority tasks, ensuring that critical transactions and customer-facing activities are prioritized. | ||
### 4. Failure Recovery and Redundancy: | ||
|
||
A DelayBox can introduce retries with delays between attempts in case of system failure. This may allow for the recovery of failed components or services, rather than immediately overwhelming the system with retries. | ||
|
||
> **Scenario:** A distributed database might experience momentary unavailability. By introducing delayed retries for failed queries, you give the system more breathing room to recover without being flooded by retry requests. | ||
### 5. Decoupling Components in Event-Driven Architecture: | ||
|
||
In an event-driven architecture, where the various services communicate via events (say, using Kafka, RabbitMQ, etc.), DelayBox can be utilized to manage the timings of event processing transparently. Sometimes, services need to wait a bit before processing an event to give the chance to other services to finish related work. | ||
|
||
> **Scenario:** A DelayBox could help orchestrate processing order, especially in event streams where some operations might depend on the completion of others, reducing the likelihood of out-of-order processing. | ||
### 6. Improving Reliability in Asynchronous Workflows: | ||
|
||
DelayBox could ensure, in asynchronous workflows, that tasks are postponed until all prerequisites have been met. This enhances the reliability and coordination within the task execution. This could be critical in distributed workflows, such as Saga patterns or orchestration of transactions. | ||
|
||
> **Scenario:** In a distributed payment system where multiple services need to confirm the availability of funds before finalizing a transaction, a DelayBox can help synchronize confirmations by introducing small delays before triggering the final commit. | ||
### 7. Dealing with Temporal Anomalies: | ||
|
||
Distributed systems often encounter temporal abnormality such as clock skews or different parts of the system operating with different latencies. A DelayBox can add delays to help align the timing of various components. | ||
|
||
> **Scenario:** In a real-time analytics system, DelayBox could hold events until all necessary data streams are synchronized, preventing mismatched timestamps or out-of-order data. | ||
### 8. Application in Geo-Distributed Systems: | ||
|
||
Network latency is usually not constant for distributed systems over geographically spread-out regions. The DelayBox can help mitigate such unpredictable latency, or network jitter, by holding on to operations for a moment until a certain condition is reached and thus help enhance the consistency in performance. | ||
|
||
> **Scenario:** In a geo-distributed database, introducing delays via DelayBox ensures that read replicas are consistent across regions before responding to read requests, enhancing the user experience. | ||