Organizations aim to achieve the best technology designs in their systems as well as provide the most optimal customer experiences. Sometimes however, communication designs in your systems can lead to circumstances not anticipated that could result in disastrous outcomes to your business and customers.
Synchronous vs Asynchronous communication
In synchronous communication, dependencies exist specific to time or events. These are reliant upon time. Processes and events also occur simultaneously.
In system design for example, if all the services, tiers and methods are closely coupled together through synchronous communications there exists an increased risk for failure. A slow-down or failure in one of these components could cause delays and lead to a cascading failure effect in the entire system.
Asynchronous communication operates independently. Time is disregarded by processes or events. Even in the case that processes, or events may be related, they can still start or stop independently of one another. If processes or events are waiting to complete, asynchronous calls allow computing resources to be maximized utilizing idle times.
What are the criteria for Asynchronous candidates?
How can your organization best identify asynchronous candidates? AKF has a detailed criteria list to guide selection of these candidates. It can be a more impactful learning experience however to perform development team exercises discussing the pros and cons of implementing a call asynchronously vs. synchronously.
At a high level, verify this information when determining asynchronous candidates:
- External API/third party – many issues can occur related to synchronous calls. Therefore, if a call is to a third party or external API, implement it asynchronously.
- Long running processes – if you have significant computational or I/O requirements and if processes are known for being long running, utilize asynchronous calls.
- Error-prone/ overly complex methods that change frequently – try to eliminate tying critical and complex calls together that require frequent changes. This combination can increase bugs and failures.
- Temporal constraints – are often applied for example in interactions such as user and role activation for authentication or authorization checks. “When a temporal constraint does not exist between two processes, consider firing and forgetting the child process.”
Why do we prefer to communicate asynchronously?
Synchronous communication is more prone to failure and comes at a higher cost of scale than asynchronous communication.
Although asynchronous communications can often be deemed as more complex to implement, asynchronous calls can help find where bugs and issues reside when a problem exists. They can also aid in the prevention of system slowdowns, failures and choke points (i.e., traffic, flow restrictions).
Think of your external facing customers. In today’s world online users expect speed, quality and have limited patience with short attention spans. Slowness in systems can propagate to your external facing customers causing frustration and dissatisfaction. Delays in a customer’s experience can impact online buying decisions, reduce user confidence, increase bounce rates and cart abandonment. For instance, 1 in 4 visitors abandon websites that take more than 4 seconds to load. A one second delay reduces customer satisfaction by 16%. These are just some statistics that have a negative impact on your external customers according to WebSiteBuilderExpert.
A customer’s experience is extremely important as it’s linked to your bottom-line revenue and custom loyalty as well. Consequently, if processing were to slow down enough and exceed capacity, a site wide outage could also occur.
This is also known as the multiplicative effect of failure and why you should eliminate synchronous calls. Refer to The Top 20 Mistakes in Technology | AKF Partners for further details.
For additional details on Asynchronous calls see Microservice Architecture Principles | AKF Partners – # 6
When and how should asynchronous communication be utilized?
Here are some AKF tips on when and how to utilize asynchronous communication:
- Implement whenever possible for all calls between services and tiers.
- Develop applications in a fashion that is asynchronous in behavior.
- Ensure requests are nonblocking by utilizing language specific calls.
- Leverage the message bus - Architecture Principles: Messaging Systems – Smart End Points, Dumb Pipes | AKF Partners.
- Implement smart end points/dumb pipes - Claim-Check Pattern: When To Split a Large Message Into a Claim-Check and a Payload | AKF Partners.