Share
Embed
Leveraging the power of Reactive Architectures
Microservices, Reactive, and Distributed Systems Vienna
SQUER Solutions
August 24, 2021
Transcript
63 slides
-
Leveraging the power of Reactive Architectures Microservices, Reactive and Distributed
Systems Vienna Vienna, August 2021 -
asynchronous data streams. Space Time Collections Iterator Generator Value Getter
Setter Promise Deferred Resolver Stream Reader Emitter -
The relationship between them is implicit, an idea that only
exists in the mind of the programmers. It should be explicit, a part of the language, and existing for all time. Counter and doubled should be bound. -
1 map(x => x*2) 2 3 6 Reactive Programming, is
Programming with Streams. -
YAMS — Yet Another Mail Service NEW 2021-04-11 — An
important Email 2021-04-09 — Another important Email 2021-04-08 — Do you want to join my network? 2021-04-05 — Nigerian prince wants to send you money X your inbox contains 4 mails 1 NEW Mail Reload Controller Rest Client update UI Element update UI update UI -
YAMS — Yet Another Mail Service NEW 2021-04-11 — An
important Email 2021-04-09 — Another important Email 2021-04-08 — Do you want to join my network? 2021-04-05 — Nigerian prince wants to send you money X your inbox contains 4 mails 1 NEW Mail Reload Websocket Client Email Email count() count() collect() filter() subscribe Email map() -
YAMS — Yet Another Mail Service NEW 2021-04-11 — Hello
Reactive Systems Vienna! 👋 2021-04-09 — Another important Email 2021-04-08 — Do you want to join my network? 2021-04-05 — Nigerian prince wants to send you money X your inbox contains 5 mails 2 NEW Mail Websocket Client Email Email count() count() collect() filter() subscribe Email NEW 2021-04-11 — An important Email map() -
Reactive Programming Reactive Architectures We take the same concepts from
reactive programming and move them up to the system architecture. -
Internet has 4.7 Billion users. Facbook has 2.8 Billion users.
Youtube has 2.1 Billion users. 2010 2020 The Internet has 1.4 Billion users. A single website may now handle twice as much traffic as the entire internet a decade ago. -
The Reactive Manifesto Message Driven Responsive Elastic Resilient NFR Supported
by Enabled by Scalability Extendibility -
Microservice A Microservice B Message Driven Responsive Elastic Resilient Value
Form Means Microservice B Microservice B -
Microservice A Microservice B Message Driven Responsive Elastic Resilient Value
Form Means Microservice B Stream -
Microservice A Microservice B Message Driven Responsive Elastic Resilient Value
Form Means requests pile up -
Message Driven Responsive Elastic Resilient Value Form Means Microservice A
Stream Microservice B -
We support Back-Pressure Stream Provider Consumer events are stored until
consumed Stream Provider Consumer A Consumer C Consumer B scaling out consumers We can horizontally scale by Location Transparency -
We move from a synchronous pull-based architecture, to an asynchronous
push-based architecture. -
Microservice A Microservice B Microservice C Web Application Microservice C
with high latency First Generation Integrated Synchronous without Backpressure Support -
Microservice A Microservice B Microservice C Web Application Microservice C
with high latency Second Generation Partially Asynchronous & Backpressure Support Queue isolates bottleneck Queue -
Web Application Stream Microservice usually Backend-For-Frontend (BFF) Microservice A Microservice
B Microservice C Thirds Generation Stream Centric and Fully Asynchronous -
Events as the System State Stream of Transactions Max sent
Tim 100€ Max sent Maria 70€ Tim sent Maria 25€ ➡ Current Balance Max - 100€ Tim + 100€ Maria + 70€ - 170€ + 75€ + 95€ Stream-table duality -
Web Application Stream Microservice usually Backend-For-Frontend (BFF) Microservice A Microservice
B Microservice C Migration via Change-Data-Capture Legacy Database New User Added User Updated Change-Data-Capture DB Log -
Events as the System State Stream of Transactions Max sent
David 100€ Max sent Maria 70€ David sent Maria 25€ Current Balance Max - 100€ David + 100€ Maria + 70€ - 170€ + 75€ + 95€ Stream-table duality the truth, the whole truth, nothing but the truth. Event Souring -
Web Application Stream Microservice usually Backend-For-Frontend (BFF) Microservice A Microservice
B Microservice C Thirds Generation Stream Centric and Fully Asynchronous -
Web Application Eventstore Microservice usually Backend-For-Frontend (BFF) Microservice A Microservice
B Microservice C Thirds Generation Stream Centric and Fully Asynchronous -
Web Application Eventstore Microservice usually Backend-For-Frontend (BFF) Lambda A Lambda
B Lambda C Thirds Generation Stream Centric and Fully Asynchronous -
Web Application Stream Microservice usually Backend-For-Frontend (BFF) Microservice A Microservice
B Microservice C Thirds Generation Stream Centric and Fully Asynchronous -
Stream Centric Systems are the only way to build autonomous
Microservices. -
Stream Centric Systems are the only way to build autonomous
Microservices. -
Account Summary Service Transaction Service User Service Web Banking Categorization
Service Config Service The rise of the Entity Service Antipattern High Presure Low Resilience Z Y X Payment Service -
Account Summary Journey Transaction Service User Service Web Banking Categorization
Service Config Service The rise of the Entity Service Antipattern High Presure Low Resilience Z Y X Payment Journey Paymet Customer Journeys Account Overview Customer Journeys Low service Autonomy Weak Independent Deployability Weak Independent Scalability -
Account Summary Journey Transaction Service User Service Web Banking Categorization
Service Config Service Payment Journey projection projection We never write to projections, we only read from them. CQRS in a nutshell websockets Strong Service Autonomy at Runtime Smaller Deployment Footprint Good Horizontal Scalability Account Summary Journey projection -
Lambda A Web Application Lambda B Lambda C Stream GraphQL
Microservice A Microservice B Microservice C Web Application ➡ pull-based push-based -
GraphQL Step 1 Step 2 Step 2 Car Brand Build
Year Car Model Insurance Agent Customer ✅ This Is Correct Alfa Romeo Giulia, 2020 110PS, Diesel Products Users Configurations Eventstore GraphQL car brand has changed Alfa Romeo 2020 Giulia, 110PS -
GraphQL Step 1 Step 2 Step 2 Car Brand Build
Year Car Model Insurance Agent Alfa Romoe 2020 Giulia, 110PS Customer ✅ This Is Correct Alfa Romeo Giulia, 2020 110PS, Diesel Step 1 Step 2 Step 2 Coverage 200 € 🏁 Sign Digital Do you accept 70% coverage for 200€? Products Users Configurations Eventstore GraphQL -
GraphQL Step 1 Step 2 Step 2 Car Brand Build
Year Car Model Insurance Agent Customer ✅ This Is Correct Alfra Romeo Giulia, 2020 110PS, Diesel Step 1 Step 2 Step 2 Coverage 250 € 🏁 Sign Digital Do you accept 90% coverage for 250€? Products Users Configurations Eventstore GraphQL Customers expect realtime syncronisation between channels. -
Mobile Banking Usage Show balance & last transactions: 93% Initiate
new payment: 3% Any other functionality: 4% -
Transactions Web Banking Users Accounts Stream GraphQL Projection Projections 1⃣
Projections act as read-models for a specific client. 2⃣ They subscribe to events & hydrate the projection. 3⃣ The client only reads from the projection. -
Transactions Web Banking Users Accounts Stream GraphQL Projection Projections 1⃣
Projections act as read-models for a specific client. 2⃣ They subscribe to events & hydrate the projection. 3⃣ The client only reads from the projection. Projection -
GraphQL Mobile Client Projection Transactions Web Banking Users Accounts Stream
GraphQL Projection Projections 1⃣ Projections act as read-models for a specific client. 2⃣ They subscribe to events & hydrate the projection. 3⃣ The client only reads from the projection. Only one hard problem in computer science left. 😎 Projection Show balance & last transactions working, 93% of customers still happy. With a concept like optimistic UIs even more. -
lousy memes Ok let‘s sum up! lousy memes within lousy
memes High Resilience & Scalability -
Architectural Styles always buy you options. This stuff is cool,
Reactive Architectures buy you Resilience, Realtime Capabilities, Elasticity, & Extendibility. you pay by complexity. 💵 e.g. perpetual, or eventual inconsistency