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

The Rise of Reactive Microservices

Avatar for SQUER Solutions SQUER Solutions
June 03, 2022
200

The Rise of Reactive Microservices

CraftConf 2022, Budapest

Avatar for SQUER Solutions

SQUER Solutions

June 03, 2022
Tweet

Transcript

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

    Value Getter Setter Collections Iterators Generators Promise Deferred Resolver Stream Subscriber Emitter
  2. @duffleit var counter = 2; var doubled = counter *

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

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

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

    2; // updating the counter counter = 3; doubled = counter * 2; 1 2 3 4 5 6
  6. @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
  7. @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/
  8. @duffleit var counter = 2; var doubled <= counter *

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

    2; // updating the counter counter = 3; 1 2 3 4 5 doubled 🔗 counter
  10. @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 ✅
  11. @duffleit var counter = stream(2); var doubled = counter.map(x ->

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

    x * 2) 1 2 👆 counter: [2] doubled: [4]
  13. @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]
  14. @duffleit var counter = stream(2); var doubled = counter.map(x ->

    x * 2) // updating the counter 1 2 3 4 👈 counter: [2] doubled: [4]
  15. @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]
  16. @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] 👈
  17. @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] 👈
  18. @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] ✅
  19. @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 👈
  20. @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 👈 ✅
  21. @duffleit var counter = 2; $: doubled = counter *

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

    2; // updating the counter counter = 3; assert(doubled, 6); 1 2 3 4 5 6 7 👈 ✅
  23. @duffleit We can apply those Concepts of Reactive Programming on

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

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

    was successfully executed. transferMoney triggerPayment createTransactions ✅
  26. @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>
  27. @duffleit User <μService> Account <μService> Legder <μService> WebBanking Your payment

    was successfully executed. transferMoney triggerPayment createTransactions ✅ Retries Timeouts Circuit Breakers Synchronise
  28. @duffleit User <μService> Account <μService> WebBanking transferMoney triggerPayment New Payment

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

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

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

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

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

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

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

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

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

    Payment 💸 € 20, 00 👧 Lisa to David from Perform Payment Legder <μService> Queue Queue Queue
  38. @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.
  39. @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.
  40. @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.
  41. @duffleit “ On the Criteria To Be Used in Decomposing

    Systems into Modules — Parnas, 1972
  42. @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.
  43. @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
  44. @duffleit No Domain Logic in Backend For Frontends. It's about

    Ui-Specific Aggregation, to get rid of over-fetching and over-requesting.
  45. @duffleit User <μService> Account <μService> WebBanking New Payment 💸 €

    20, 00 👧 Lisa to David from Perform Payment Legder <μService> Payments <μService> Domain Services Journey Services
  46. @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>
  47. @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
  48. @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 ⚡ ⚡ ⚡
  49. @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
  50. @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 ⚡
  51. @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 🤯 ⚡
  52. @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
  53. @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 😔
  54. @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 😔
  55. @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 😔
  56. @duffleit “ we project data from our counter variable into

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

    into our payments service. There must be a better solution 🤔 Payments User Onboarding User project
  58. @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
  59. @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
  60. @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
  61. @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
  62. @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
  63. @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
  64. @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
  65. @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
  66. @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
  67. @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
  68. @duffleit Eventual Consistency Eventual Divergence Dashboard User (age: 22) UserChanged

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

    🔥 Transaction (+10€) Transaction (+10€) Balance: 20€
  70. @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)
  71. 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) 🕰
  72. @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
  73. @duffleit tl/dr: Eventual Consistency is often used as a knock-out

    argument but isn't, in most cases. @duffleit
  74. @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
  75. @duffleit Mobile Banking Usage 93% — Show balance & last

    transactions 3% — Initiate new payment 4% — Any other functionality
  76. @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€
  77. @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.
  78. @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.
  79. @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
  80. @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
  81. @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
  82. @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
  83. @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
  84. @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
  85. @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
  86. @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€
  87. @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€
  88. @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.
  89. @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
  90. Third Generation of MicroServices Built on Reactive Data-Streams @duffleit High

    Resilience 🔥 Horizontal Scaling ↔ Real Time Integration ⏱ Good Integration with Legacy Systems 🏚
  91. Dimensions of Scaling Vertical Horizontal Service Service Service User from

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

    Payments Payments Payments Stream ValidPaymentReceived Partition 0 Partition 1 Partition 2
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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 Partition 0 Partition 1 Partition 2 Ledger Ledger Ledger Partition 0 Partition 1 Partition 2 Projecting Transactions Streams Flink Stream PaymentChecked Stream TransactionBooked Independent Shards
  98. 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 Shard 0 Shard 1 Shard 2 DataSink Streams Flink Projecting Transactions WebBanking WebBanking WebBanking
  99. 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 Shard 0 Shard 1 Shard 2 DataSink Streams Flink Projecting Transactions WebBanking WebBanking WebBanking
  100. 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 Shard 0 Shard 1 Shard 2 DataSink 🚀 We can scale nearly unlimited. Projecting Transactions WebBanking WebBanking WebBanking
  101. Forth Generation of MicroServices Shared and fully Stream Based @duffleit

    Massive Throughput 🚀 Extremely Scalable ↔
  102. Monolith Reactive Push-Based Async Pull-Based Streamed Availability 🟢 , Resilience

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

    Reactive Microservices. And the future of fully Stream Based Architectures.