Interesting dichotomies

I'll keep updating this post, every now and then.

Orchestration vs. Choreography

When it comes to microservice, the way different services communicate is a key factor, I'm not very familiar with the dance culture, so I prefer to think about Orchestration as a centralised and choreography as a decentralised way of communicating between services, this SOF question explains it.

Asynchronous vs. Synchronous

Synchronous communication is a broad concept which is used in different places to represent different things, but the concept is simple, if one thing needs to wait for another thing to start, then it is synchronous, which means it needs to set its timing with the time of another thing. Otherwise it's asynchronous.

Blocking vs. non-blocking

Blocking code is sometimes used in the same context as synchronous code, but they're conceptually different. Blocking code means only one thing can be running at the same time, the other blocking code have to wait for this one to finish. Blocking code is always synchronous, synchronous code is not necessarily blocking. Read more in this SOF question.


The pub/sub pattern indicates that there's a message that publisher sends to a medium, and zero-to-many subscribers read that and take some actions based on that, the publisher is completely oblivious about the existence of the subscribers.

The event-driven architecture focus is on the event that happened instead of the action that is going to take place when that action happens. The event-driven architecture can be implemented using the pub/sub pattern.

Message queues vs. pub/sub

Message queues, are usually a queue of messages (surprise!) which are send to another part of the system to tell them to take some actions. The difference between messages in this context and the context of pub/sub is that the sender has to know about existence of the receiver. Messages acknowledgements, order preservation, long-term storage of the messages, deduplications, and timeouts are some of the features that may or may not be implemented as part of a message queue. Read more about message queues, pub/sub and event-driven here.

Event-driven vs. message-driven

In an event-driven architecture, focus is on the event, or simply what changed in on part of the system, in contrast, the focus of the message-driven architecture is what should happen in another part of the system. Message queues, are perfect match for message-driven architectures and pub/sub is a good match for event-driven systems. Read more here.