The document discusses reactive systems and provides an overview of key concepts from the Reactive Manifesto. It defines the main principles of reactive systems as being responsive, resilient, and elastic. It explains the benefits of reactive systems for businesses and technical perspectives. The document also discusses differences between reactive systems and reactive programming, advantages of asynchronous communication over synchronous, and some of the main concerns in designing reactive systems like consistency and isolation.
it’s not a new thing
Reactive Systems is a response for looking by different people for solutions for the same problems – unified, documented outline of solution
Reactive Manifesto is just a try to address people concers, what peple tried to achive so far to achive the same goal
Failure is contained in single component – recovery is delegated to separate component
decouples components allows to scale them independently
If software doesn’t work in the Reactive way or for a specific period of time – you are not able to work, company cannot operate normally, which brings a real many losses.
Not only software failures makes the business not operating properly – slow / unresponsive / hanging systems as well
From one end software is not the same one as years back, but also software users and their expectations are different
People rely on software to do their jobs
The more World is driven by software the higher expectations regarding it
Non responsive software is quickly thrown out of the marker – there are alteratives – market is compet
Reactive Systems - Reactive features from system architectural level, all architetural componetns (microservices) interacts in the Reactive eway
Reactive Programing – doesn’t actually mean that you build Reactive System but it’s often used to build one. Reactivness at microservice level.
You don’t need Reactive Programming to build Reactive systems.
Both provides Reactive features but on different levels
it’s still monolit * location transparency
* one-to-one, one-to-many
* it’s like with eventual consistency, that’s not like the world works
Same thing when it comes to transportation media, just name and interpretation differs
Events reverts the dependencies between services – I can add another participant (observer of events without chaning source service)
Event-Carried State transfer – event brings all data so the event oberver has all necessary information and don’t need to fetch additional data
Fully aunotomous service has no dependencies, but this is really rare case
The less dependencies the better
The closer to fully anotomous service the better
Ideal anatomous services can scale indefinately.
Anatomous systems can tolerate any number of its dependencies’ failures, the entire world can fail around and they still stay resposive
Asynchronous communication increases autonomy of the service
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Same thing when it comes to transportation media, just name and interpretation differs
Reliabiable delivery – quarantee that the message is delived once and only once
WS-ReliableMessaging provides Reliability at a communication level through SOAP headers - business layer is independent of the messaging layer – business logic has no burden of Reliability guarantee – provides all kinds of quarantee + „in order”
Reliable messaging solves this issues on the pictures by acknowledgments, duplicate detection and removal
Duplicated sequence numer in message header and message body (business content)
If we don’t need „in order” delivery why do we need a delivery mean to delay the message until it gets message with lower sequence numer
Even if we deliver message in proper order does that mean the got processed in that order?
Is the delivery quarantee a real quarantee that the message has been processed? Acknowledgement after verification that the message is syntacticly correct (validation)? Acknowledgment after processing? What if the processing fails… do we need both acknowledge and response of failure?
Delivery acks are rather useless we need business ack.
What if the same message is send again (maybe by mistake) by source service (not resent by message system). Business logic should process it again?
Comutative updates can be done in any order
Pesimistic view – reordering steps of saga to minimize the risk of dirty reads
Reread value – reread first from database and then check if the record has changed
Lost updates, dirty reads, fuzzy/non-repeatable reads
Comutative updates can be done in any order
Pesimistic view – reordering steps of saga to minimize the risk of dirty reads
Reread value – reread first from database and then check if the record has changed
Lost updates, dirty reads, fuzzy/non-repeatable reads