Event–Driven Architecture, parts in programming are specifically made to find differences and respond directly to those changes or pass them on to other departments. The Event–Driven Architecture does not predict the user’s movements; therefore, it may be better for performing unusual functions. This is generally used on a computer but can also control the machine.
There are many system architectures, and each prioritizes certain functions or processes. With Event–Driven Architecture, events and changes are the top priority. For example, when the software starts to be used from rest, it changes the system. Other changes can be changes in power, the use of different tools, the addition of coding, and other such events. It is considered an occasion when something requires more power or resources or new data needs to be detected.
Small units are programmed into software or systems typically created just for that purpose to make it easier to find and respond to changes. Many of these parts can respond directly to an event by changing the power or doing whatever the user needs. Other factors are also done to find the change and pass the information to the parts that respond. These parts tend to increase the system’s speed because they quickly change the method according to users’ needs.
Other types of computer architectures typically attempt to predict the user’s functions based on the critical priority of those architectures. While this is effective, it can slow down the system or underutilize computer resources if the user does not work according to preferences. With Event–Driven Architecture, no predictions are made to take advantage of an unconventional user.
Most computer architectures are intended for use on only one computer, but Event–Driven Architecture can also be used on machines, generally as a security measure. Many changes occur in engine slips, moving actuators, and working parts during machine use. The Event–Driven Architecture does not typically optimize these movements but controls them. For example, if a piece moves in a potentially dangerous way, this architecture will stop the process from keeping the operator and spectators safe.
How to Implement an Event–Driven Architecture and When to Use It?
Event–Driven Architecture goes hand in hand with Microservices. When an action occurs, an event is created, and that event is then used to drive decisions on anything that waits for that event to happen.
The services are no longer interconnected because, in a broadcast subscription type model, the caller no longer calls the callee simultaneously. Instead, the callee acts consistently on an event.
As such, Event–Driven Architecture can be more reliable because they don’t need to act immediately upon a service call (allowing services to fail until they succeed) but are less predictable to know when an action was taken.
A simple example of Event–Driven Architecture would be Amazon. If you’ve shopped on Amazon during a busy period like Black Friday, it’s possible to order an item, but then you might just be sent an email stating that the item you ordered is actually out of stock.
If you think of this process as an Event–Driven Architecture, it probably works like this:
- First, the customer orders the product and issues an order placed event.
- The stock service subscribes to the event, but it checks the stock when it processes the event and is currently at 0.
- The stock service then issues an OutOfStock event.
- The email service subscribes to this event and emails the customer explaining that the product is out of stock.
Pros and Cons of Event–Driven Architecture
There are several reasons why using an Event–Driven Architecture is advantageous over alternative architectures.
Scalability: Because services are no longer interconnected, service 1’s throughput no longer needs to match service volume.
Asynchrony: A fire and forget model can be used, which can significantly speed up an operation, as services no longer depend on a result that is returned synchronously. There may be a downside to this, which will be outlined below.
Loose Coupling: Services do not need to be interdependent. Of course, the consumer will still need to know how to interpret an event or message, so a solid contract should still be used between the two services, but the implementation details of the agreement shouldn’t matter.
Inconsistencies: Supporting ACID (Atomicity, Consistency, Isolation, Durability) operations are not typical, as processes are now based on ultimate character, so handling iterations or out–of–order events can make the service code more complex to test and debug in all cases.
Recovery in Time: If a queue or some history backs events is preserved, it is possible to replay events or even go back in time and recover the state.
There are also disadvantages to using an Event–Driven Architecture.
Over–Engineering Processes: Sometimes, a simple call from one service to another is enough. If a function uses Event–Driven Architecture usually requires much more infrastructure to support it, which increases costs (because it will need a queuing system).