stage event driven architecture (SEDA)
approach to software architecture that decomposes a complex, event-driven application into a set of stages connected by queues.
It avoids the high overhead associated with thread-based concurrency models (i.e. locking, unlocking, and polling for locks), and decouples event and thread scheduling from application logic.
By performing admission control on each event queue, the service can be well-conditioned to load, preventing resources from being overcommitted when demand exceeds service capacity.
SEDA employs dynamic control to automatically tune runtime parameters (such as the scheduling parameters of each stage) as well as to manage load (like performing adaptive load shedding).
Examples
E-commerce websites:
often have to handle large volumes of traffic, so it's important for them to be scalable.
when a customer places an order, the order information can be placed in an event queue. A worker thread then polls the event queue for new orders, and processes each order in turn. This allows the e-commerce website to handle a large number of orders without becoming overloaded.
Social media platforms:
handle large volumes of traffic.
when a user posts a new message, the message can be placed in an event queue. A worker thread then polls the event queue for new messages, and processes each message in turn.
Streaming media services
need to be able to deliver high-quality video and audio to users, even when there is a lot of traffic.
when not to use
Real-time processing: not well-suited for real-time applications, because it can introduce latency.
Low latency: can introduce latency, which can be a problem for applications that require low latency.
Simple applications: is overkill for simple applications. For simple applications, a simpler architecture, such as a request-response architecture, may be a better choice.
Benefits
Scalability: scalable architecture that can be easily scaled up or down to meet demand.
Performance: improve performance by decoupling event and thread scheduling from application logic.
Reliability: improve reliability by performing admission control on each event queue.
Modularity: easily decomposed into a set of modules, which makes it easier to develop, test, and deploy.
Drawbacks
Complexity: complex architecture to implement and manage.
Cost: more expensive to implement than other architectures.
Learning curve: steep learning curve, which can make it difficult to get started.
Causes low latency
Oversubscription occurs when there are more messages in the queue than there are worker threads to process them. This can lead to long delays as messages wait to be processed.
Fix
Use the right number of worker threads: The number of worker threads should be equal to or greater than the number of messages in the queue. This will ensure that no messages are waiting to be processed.
If the processing time for each event is too long, it can cause high latency. This can be caused by a number of factors, such as complex logic, slow database queries, or network latency.
Fix
The processing time for each event should be as short as possible. This can be done by using efficient algorithms, caching data, and using a load balancer.
If the queue management is not efficient, it can lead to high latency. This can be caused by factors such as using a single queue for all events, not using a load balancer, or not using a queue management tool.
fix
A load balancer can help to distribute the load evenly across multiple worker threads. This can help to reduce latency by preventing any one worker thread from becoming overloaded.
Network latency can cause high latency if the messages have to travel a long distance to be processed. This is especially true for applications that are distributed across multiple regions or countries.
Fix
try to reduce network latency by using a local queue or by moving the application closer to the users.
Last updated