Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Rise of Reactive Microservices

The Rise of Reactive Microservices

CodeCrafts Vienna 2022 — www.code-crafts.com

E6c61f085d7aceaf97b7bd00e9195514?s=128

SQUER Solutions

May 18, 2022
Tweet

More Decks by SQUER Solutions

Other Decks in Technology

Transcript

  1. The Rise of Reactive Microservices @duffleit <Code/Crafts> Vienna 2022

  2. David Leitner @duffleit Coding Architect ✉ david@squer.at 🐥 @duffleit

  3. Reactivity @duffleit and many more. “ Programming with, or designing

    upon, asynchronous data streams.
  4. It's about Streams. @duffleit

  5. @duffleit

  6. “ streams are just another data structure. @duffleit Time Space

    Value Getter Setter Collections Iterators Generators Promise Deferred Resolver Stream Subscriber Emitter
  7. “ streams are just another data structure. @duffleit

  8. @duffleit What has this to do with reactivity? 🤔 “

    Programming with, or designing upon, asynchronous data streams.
  9. @duffleit var counter = 2; var doubled = counter *

    2; 1 2
  10. @duffleit var counter = 2; var doubled = counter *

    2; assert(doubled, 4); 1 2 3 4 ✅
  11. @duffleit var counter = 2; var doubled = counter *

    2; // updating the counter counter = 3; 1 2 3 4 5
  12. @duffleit var counter = 2; var doubled = counter *

    2; // updating the counter counter = 3; assert(doubled, 6) 1 2 3 4 5 6 7 💔
  13. @duffleit var counter = 2; var doubled = counter *

    2; // updating the counter counter = 3; doubled = counter * 2; 1 2 3 4 5 6
  14. @duffleit var counter = 2; var doubled = counter *

    2; // updating the counter counter = 3; doubled = counter * 2; assert(doubled, 6) 1 2 3 4 5 6 7 8
  15. @duffleit var counter = 2; var doubled = counter *

    2; // updating the counter counter = 3; doubled = counter * 2; assert(doubled, 6) 1 2 3 4 5 6 7 8 ✅ doubled 🔗 counter paulstovell.com/reactive-programming/
  16. @duffleit var counter = 2; var doubled <= counter *

    2; 1 2 doubled 🔗 counter 👆
  17. @duffleit var counter = 2; var doubled <= counter *

    2; // updating the counter counter = 3; 1 2 3 4 5 doubled 🔗 counter
  18. @duffleit var counter = 2; var doubled <= counter *

    2; // updating the counter counter = 3; assert(doubled, 6) 1 2 3 4 5 6 7 doubled 🔗 counter ✅
  19. @duffleit var counter = stream(2); 1 🔗 = streams 👈

    counter: [2]
  20. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) 1 2 👈 counter: [2]
  21. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) 1 2 🔗 = streams 👆 counter: [2]
  22. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) 1 2 👆 counter: [2] doubled: [4]
  23. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) 1 2 “ we project the data from our counter stream into our doubled stream. 👆 counter: [2] doubled: [4]
  24. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter 1 2 3 4 👈 counter: [2] doubled: [4]
  25. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter counter.emit(3); 1 2 3 4 5 👈 counter: [2] doubled: [4]
  26. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter counter.emit(3); 1 2 3 4 5 counter: [2, 3] doubled: [4] 👈
  27. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter counter.emit(3); 1 2 3 4 5 counter: [2, 3] doubled: [4, 6] 👈
  28. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter counter.emit(3); assert(doubled.value, 6) 1 2 3 4 5 6 7 👈 counter: [2, 3] doubled: [4, 6] ✅
  29. @duffleit

  30. @duffleit var counter = new BehaviorSubject<number>(2); 1 👈

  31. @duffleit var counter = new BehaviorSubject<number>(2); var doubled = counter.pipe(map(x

    -> x * 2)); 1 2 👈
  32. @duffleit var counter = new BehaviorSubject<number>(2); var doubled = counter.pipe(map(x

    -> x * 2)); // updating the counter counter.emit(3); 1 2 3 4 5 👈
  33. @duffleit var counter = new BehaviorSubject<number>(2); var doubled = counter.pipe(map(x

    -> x * 2)); // updating the counter counter.emit(3); assert(doubled.value, 6); 1 2 3 4 5 6 7 👈 ✅
  34. @duffleit

  35. @duffleit var counter = 2; 1 👈

  36. @duffleit var counter = 2; $: doubled = counter *

    2; 1 2 👈
  37. @duffleit var counter = 2; $: doubled = counter *

    2; 1 2 👈
  38. @duffleit var counter = 2; $: doubled = counter *

    2; // updating the counter counter = 3; 1 2 3 4 5 👈
  39. @duffleit var counter = 2; $: doubled = counter *

    2; // updating the counter counter = 3; assert(doubled, 6); 1 2 3 4 5 6 7 👈 ✅
  40. “ Programming with, or designing upon, asynchronous data streams. @duffleit

  41. @duffleit We can apply those Concepts of Reactive Programming on

    Architecture as well. * and hope they still make sense.
  42. @duffleit User <μService> Account <μService> Legder <μService> WebBanking New Payment

    💸 Perform Payment € 20, 00 👧 Lisa to David from transferMoney triggerPayment createTransactions
  43. @duffleit User <μService> Account <μService> Legder <μService> WebBanking Your payment

    was successfully executed. transferMoney triggerPayment createTransactions ✅
  44. @duffleit User <μService> Account <μService> Legder <μService> WebBanking New Payment

    💸 Perform Payment € 20, 00 👧 Lisa to David from transferMoney triggerPayment createTransactions <μService> Legder Legder <μService>
  45. @duffleit User <μService> Account <μService> Legder <μService> WebBanking Your payment

    was successfully executed. transferMoney triggerPayment createTransactions ✅ Retries Timeouts Circuit Breakers Synchronise
  46. First Generation of MicroServices Synchronously Integrated @duffleit

  47. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment New Payment

    💸 € 20, 00 👧 Lisa to David from Perform Payment <μService> Legder
  48. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment New Payment

    💸 € 20, 00 👧 Lisa to David from Perform Payment <μService> Legder
  49. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Queue <μService> Legder
  50. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Queue <μService> Legder
  51. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Queue <μService> Legder
  52. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Queue <μService> Legder
  53. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Queue <μService> Legder
  54. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions Queue

    <μService> Legder Your payment was accepted. ✅
  55. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions Queue

    <μService> Legder Your payment was accepted. ✅ Legder <μService>
  56. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions Queue

    <μService> Legder Your payment was accepted. ✅ Legder <μService>
  57. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions Queue

    <μService> Legder Your payment was accepted. ✅ Legder <μService> Queue
  58. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions Queue

    <μService> Legder Your payment was accepted. ✅ Legder <μService> Queue Queue
  59. Second Generation of MicroServices Asynchronously Integrated @duffleit

  60. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Legder <μService> Queue Queue Queue
  61. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Legder <μService> Queue Queue Queue As a Customer, I want my transaction to be booked by the ledger.
  62. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Legder <μService> Queue Queue Queue As a Customer, I want the account service to update my balance.
  63. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment createTransactions New

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Legder <μService> Queue Queue Queue As a Customer, I want to transfer money to someone else.
  64. The Entity Service Antipattern. @duffleit

  65. Let's create Services along Customer Journeys. @duffleit

  66. @duffleit “ On the Criteria To Be Used in Decomposing

    Systems into Modules — Parnas, 1972
  67. Let's create Services along Customer Journeys. @duffleit

  68. @duffleit User <μService> Account <μService> WebBanking New Payment 💸 €

    20, 00 👧 Lisa to David from Perform Payment Legder <μService> Payments <μService> Domain Services Journey Services As a Customer, I want to transfer money to someone else.
  69. @duffleit User <μService> Account <μService> WebBanking New Payment 💸 €

    20, 00 👧 Lisa to David from Perform Payment Legder <μService> Web-BFF <μService> Domain Services Backend For Frontends As a Customer, I want to transfer money to someone else. Mobile-BFF <μService> Mobile Banking € 20, 00 Pay Payment Flow Payment Flow
  70. @duffleit No Domain Logic in Backend For Frontends. It's about

    Ui-Specific Aggregation, to get rid of over-fetching and over-requesting.
  71. @duffleit Ok, but back to the problem with our Customer

    Journeys.
  72. @duffleit User <μService> Account <μService> WebBanking New Payment 💸 €

    20, 00 👧 Lisa to David from Perform Payment Legder <μService> Payments <μService> Domain Services Journey Services
  73. @duffleit User <μService> Account <μService> WebBanking New Payment 💸 €

    20, 00 👧 Lisa to David from Perform Payment Legder <μService> Payments <μService> Domain Services Journey Services Balance <μService>
  74. @duffleit ⚡ Customer Journey and Entity Data Mismatch Problem

  75. @duffleit Users Accounts Transactions Entities Customer Journeys Payments Onboarding Fraud

    Detection ⚡
  76. @duffleit User Account WebBanking New Payment 💸 € 20, 00

    👧 Lisa to David from Perform Payment Transactions Payments Domain Services Journey Services Onboarding Fraud Detection User Account Account Transactions
  77. @duffleit User Account WebBanking New Payment 💸 € 20, 00

    👧 Lisa to David from Perform Payment Transactions Payments Domain Services Journey Services Onboarding Fraud Detection User Account Account Transactions ⚡ ⚡ ⚡
  78. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Service Autnomy
  79. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Data Duplication ⚡
  80. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Data Syncronisation 🤯 ⚡
  81. @duffleit clarify who owns which Data. Always

  82. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions
  83. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Synchronous Calls 😔
  84. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Synchronous Calls 😔
  85. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Cache Account Transactions Synchronous Calls 😔
  86. @duffleit “ we project data from our counter variable into

    our doubled variable. There must be a better solution 🤔
  87. @duffleit “ we project the data from our onboarding service

    into our payments service. There must be a better solution 🤔 Payments User Onboarding User project
  88. @duffleit Payments Onboarding User Aggregate User Readmodel UserChangedEvent UserChange Command

    That's CQRS in a nutshell 🥜 updates
  89. @duffleit Payments Onboarding User Aggregate User Readmodel UserChangedEvent UserChange Command

    Stream
  90. @duffleit Payments Onboarding User Aggregate User Readmodel UserChange Command Stream

    UserChangedEvent transform apply
  91. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream
  92. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream
  93. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream
  94. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream
  95. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  96. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  97. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  98. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  99. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream
  100. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  101. @duffleit But bro, didn't we just introduce Eventual Consistency?

  102. @duffleit Eventual Consistency Eventual Divergence Dashboard User (age: 22) UserChanged

    (age: 21) UserChanged (age: 22) Profile User (age: 21) ⚡ timestamp timestamp
  103. @duffleit Eventual Consistency Eventual Divergence Eventual Variance Ledger Stream Transaction

    (+10€) 🔥
  104. @duffleit Eventual Consistency Eventual Divergence Eventual Variance Ledger Dashboard Stream

    🔥 Transaction (+10€) Transaction (+10€) Balance: 20€
  105. @duffleit Eventual Consistency Eventual Divergence Eventual Variance Eventual Latency Service

    B Stream UserChanged (age: 21) UserChanged (age: 22) Profile User (age: 21) Dashboard User (age: 21) User (age: 22)
  106. Single User Context @duffleit Eventual Consistency Eventual Divergence Eventual Variance

    Eventual Latency Service B Stream UserChanged (age: 21) UserChanged (age: 22) Profile User (age: 21) Dashboard User (age: 21) User (age: 22) 🕰
  107. @duffleit Eventual Consistency Eventual Divergence Eventual Variance Eventual Latency same

    events, different results. same events, different quantity. same events, different realisation. Ordering Guarantees Optimistic UIs At-Least-Once Delivery Deduplication Mechanisms
  108. @duffleit tl/dr: Eventual Consistency is often used as a knock-out

    argument but isn't, in most cases.
  109. @duffleit WebBanking New Payment 💸 € 20, 00 👧 Lisa

    to David from Perform Payment Payments Journey Services Onboarding Fraud Detection User Account Account Transactions User Account Transactions Stream Projections
  110. @duffleit Mobile Banking Usage 93% — Show balance & last

    transactions 3% — Initiate new payment 4% — Any other functionality
  111. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream
  112. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream
  113. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream
  114. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream
  115. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream
  116. @duffleit Payments Journey Services Onboarding Overview User Account Account Transactions

    User Account Transactions Stream 93% of what our users need can still be performed. WebBanking Current Balance: 200€ 👧 You sent Lisa 100€ Christoph sent you 300€
  117. @duffleit WebBanking Current Balance: 200€ 👧 You sent Lisa 100€

    Christoph sent you 300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream Overview Transactions We can easily scale horizontally.
  118. @duffleit WebBanking Current Balance: 200€ 👧 You sent Lisa 100€

    Christoph sent you 300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream Overview Transactions We can easily scale horizontally.
  119. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  120. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  121. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  122. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  123. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  124. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  125. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment
  126. @duffleit WebBanking of David Current Balance: 300€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment 👧 Lisa sent you 20€
  127. @duffleit WebBanking of David Current Balance: 320€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment 👧 Lisa sent you 20€
  128. @duffleit WebBanking of David Current Balance: 320€ Christoph sent you

    300€ Payments Journey Services Onboarding Overview User Account Transactions User Account Transactions Stream WebBanking of Lisa 👧 New Payment 💸 € 20, 00 David to 👧 Lisa from Perform Payment 👧 Lisa sent you 20€ GraphQL subscriptions mutations Out-of-the-box real-time capabilities.
  129. @duffleit WebBanking of David Current Balance: 320€ Christoph sent you

    300€ Payments Journey Services Legacy System Accounts Stream 👧 Lisa sent you 20€ User 😮 💨😮 💨 😮 💨 Change Data Capture (CDC) User User
  130. Third Generation of MicroServices Fully Reactive @duffleit High Resilience 🔥

    Horizontal Scaling ↔ Real Time Integration ⏱ Good Integration with Legacy Systems 🏚
  131. Dimensions of Scaling @duffleit Vertical Horizontal Service

  132. Dimensions of Scaling @duffleit Vertical Horizontal Service

  133. Dimensions of Scaling Vertical Horizontal Service Service Service Sharding

  134. Dimensions of Scaling Vertical Horizontal Service Service Service Sharding Users

    A-H Users I-P Users Q-Z
  135. Dimensions of Scaling Vertical Horizontal Service Service Service User from

    User from Users from Service Service Service Sharding
  136. @duffleit Stream UserTriggeredPayment Partition 0 Partition 1 Partition 2 UserTriggeredPayment

  137. @duffleit Stream UserTriggeredPayment Partition 0 Partition 1 Partition 2 UserTriggeredPayment

  138. @duffleit Stream UserTriggeredPayment Partition 0 Partition 1 Partition 2 UserTriggeredPayment

    Payments Payments Payments
  139. @duffleit Stream UserTriggeredPayment Partition 0 Partition 1 Partition 2 UserTriggeredPayment

    Payments Payments Payments ValidPaymentReceived
  140. @duffleit Stream UserTriggeredPayment Partition 0 Partition 1 Partition 2 UserTriggeredPayment

    Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2
  141. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection PaymentCheckedAgainstFraud
  142. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2
  143. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger TransactionBooked
  144. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger Partition 0 Partition 1 Partition 2 Stream TransactionBooked Project Transactions Streams Flink
  145. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger Partition 0 Partition 1 Partition 2 Stream TransactionBooked Project Transactions Shard 0 Shard 1 Shard 2 DataSink WebBanking Current Balance: 200€ 👧 You sent Lisa 100€ Christoph sent you 300€ Streams Flink
  146. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger Partition 0 Partition 1 Partition 2 Stream TransactionBooked Project Transactions WebBanking Current Balance: 200€ 👧 You sent Lisa 100€ Christoph sent you 300€ Shard 0 Shard 1 Shard 2 DataSink Streams Flink
  147. Fraud Detection Fraud Detection @duffleit Stream UserTriggeredPayment Partition 0 Partition

    1 Partition 2 UserTriggeredPayment Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2 Fraud Detection Stream PaymentChecked Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger Partition 0 Partition 1 Partition 2 Stream TransactionBooked Project Transactions WebBanking Current Balance: 200€ 👧 You sent Lisa 100€ Christoph sent you 300€ Shard 0 Shard 1 Shard 2 DataSink 🚀 We can scale nearly unlimited.
  148. Forth Generation of MicroServices Stream Based @duffleit Massive Throughput 🚀

    Extremely Scalable ↔
  149. So many choices, Lets sum up. @duffleit

  150. Monolith @duffleit

  151. Monolith @duffleit

  152. Syncronously 😩 Pain @duffleit

  153. Modulith @duffleit

  154. Asyncronously 📦 Shared Data @duffleit

  155. Reactive ⚡ From Pull to Push @duffleit

  156. Streaming Massiv Throughput 🚀 @duffleit

  157. Monolith Reactive Push-Based Async Pull-Based Streamed Availability 🟢 , Resilience

    🦺 , Scalability ↔ , Throughput 🚀 Complexity 💰 @duffleit
  158. Monolith Reactive Push-Based Async Pull-Based Streamed @duffleit The Rise of

    Reactive Microservices. And the future of fully Stream Based Architectures.
  159. David Leitner @duffleit Coding Architect ✉ david@squer.at 🐥 @duffleit

  160. squer.link / slicing-microservices