SlideShare une entreprise Scribd logo
1  sur  72
Sogyo Café
Schaalbaarheid
CQRS
Rick van der Arend – rvdarend@sogyo.nl
Agenda
     Voorstellen
     State of the Art
     Problemen
     Oplossingen
     CQRS
     Nadelen
     Afronding



SOFTWARE INNOVATORS      2
Voorstellen




SOFTWARE INNOVATORS                 3
Wie ben ik?
   Rick van der Arend
   Sogyo Consultancy
      ▫ Architect/Developer
      ▫ Consultant
      ▫ Coach




SOFTWARE INNOVATORS           4
Wat we doen
   Detachering

   Opleiding

   Development

   Software innovatie



SOFTWARE INNOVATORS      5
State of the Art




SOFTWARE INNOVATORS                      6
State of the Art
   Op het gebied van applicatie architecturen
   Van een monoliet...
   ... naar layering




SOFTWARE INNOVATORS                              7
De monoliet


         User Interface


            ‘Monoliet’



            Database




SOFTWARE INNOVATORS       8
Layering

     Presentation Layer




        Data Layer




9
Layering

     Presentation Layer
            Business logic




        Data Layer




10
Layering

     Presentation Layer




             Business logic

        Data Layer




11
Layering: de drie lagen

      Presentation Layer



        Business logic



         Data Layer




12
Layering
                          Where?
     Presentation Layer
                                         Printing


       Business logic        Logging
                                            Email

                                   SMS
        Data Layer




13
Layering: laag #4

             Presentation Layer



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS               14
Problemen




SOFTWARE INNOVATORS               15
Problemen
     Koppelingen tussen de lagen
     Meerdere representaties
     Externe koppelingen
     Lage schaalbaarheid




SOFTWARE INNOVATORS                 16
State of the Art

             Presentation Layer



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS               17
Ontkoppelde lagen?
            Form                            Row



              Presentation Layer
                   DTO                DTO


                    Service Layer



      OBJ           Business logic                OBJ




            Row          Data Layer         Row




SOFTWARE INNOVATORS                                     18
Representaties: clients

        Fat client        Web client



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS                    19
Representaties: user roles

         Publiek         Intranet      Team



                      Service Layer



                      Business logic



                       Data Layer


SOFTWARE INNOVATORS                           20
Representaties: reports

     Presentation Layer       Reports



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS                     21
Externe koppelingen

            UI           WS #1         WS #2   ..
                      Service Layer



                      Business logic



                       Data Layer


SOFTWARE INNOVATORS                                 22
Schaalbaarheid

        1             2        3           ..        N



                          Service Layer



                          Business logic



     Data Layer -1        Data Layer - 2    Data Layer - 3


SOFTWARE INNOVATORS                                          23
Oplossingen




SOFTWARE INNOVATORS                 24
Oplossingen
     Multi-Tier
     Verticaal schalen
     Horizontaal schalen
     Rapportages apart
     Satellietmodel




SOFTWARE INNOVATORS         25
Multi-Tier

             Presentation Layer



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS               26
Verticaal schalen

             Presentation Layer



                Service Layer



               Business logic



                 Data Layer


SOFTWARE INNOVATORS               27
Horizontaal schalen

        1             2         3           ..        N

                            Load balancer




     Service Layer        Service Layer      Service Layer



     Business logic       Business logic     Business logic



     Data Layer -1        Data Layer - 2     Data Layer - 3

SOFTWARE INNOVATORS                                           28
Rapportages apart (BI/DWH)

             Presentation Layer   Presentation Layer



                Service Layer

                                  Rapportage server
               Business logic
                                      Rapportages


                 Data Layer        Rapportage DB


SOFTWARE INNOVATORS                                    29
Beyond layering…
      Een onafhankelijk domeinmodel




30
CQRS




SOFTWARE INNOVATORS          31
Terug naar af
  Wat zijn de problemen in een notedop?

      Presentation Layer   • Wijzigingen en queries gaan
                             helemaal naar beneden
                           • Results komen helemaal terug
         Service Layer     • M.a.w. de lagen zijn gekoppeld
                           • Er is niet één representatie
                           • N representaties in 1 model
         Business logic
                           • Externe koppelingen = werk
                           • Opschalen is moeilijk
           Data Layer
SOFTWARE INNOVATORS                                           32
Rapportages apart (BI/DWH)


             Presentation Layer   Presentation Layer



                Service Layer

                                  Rapportage server
               Business logic
                                      Rapportages


                 Data Layer        Rapportage DB

SOFTWARE INNOVATORS                                    33
Dat smaakt naar meer...




  Kan dat niet strikter?


SOFTWARE INNOVATORS        34
CQRS!
              Commands               Queries
             Presentation Layer   Presentation Layer



                Service Layer

                                  Rapportage server
               Business logic
                                      Rapportages


                 Data Layer        Rapportage DB

SOFTWARE INNOVATORS                                    35
CQRS

 Command-Query Responsibility Segregation




SOFTWARE INNOVATORS                         36
Waarom geen ‘separation’?

 Command-Query Responsibility SeGREGation




SOFTWARE INNOVATORS                         37
Dat ging even te snel..




  Waarom wil je dit?


SOFTWARE INNOVATORS       38
Getters en Setters

         Presentation Layer



            Service Layer
                              Als dit een OO-
                              domeinmodel is, dan
                              heb je hierin veel
            Business logic    getters en setters




               Data Layer


SOFTWARE INNOVATORS                                 39
Whatever happened to...




  Tell, don’t ask.


SOFTWARE INNOVATORS       40
Tell, don’t Ask
  Is een principe dat je helpt om:
   Koppelingen minimaal te houden
   State+methodes van een verantwoordelijkheid
     te concentreren bij 1 object (..achter 1 interface)




SOFTWARE INNOVATORS                                        41
Van setters naar commands
   Setters zetten properties
   Wie valideert de state?
   Validatie over verschillende properties? Ewww

   Domein veranderingen zijn belangrijke
    elementen om te modelleren > onderdeel UL
   Zorg dat veranderingen mappen op methodes
   Een methode aanroep + params = command


SOFTWARE INNOVATORS                                 42
CqRs
 Kortom: alleen commands op het domein uitvoeren




SOFTWARE INNOVATORS                           43
Dat klinkt heel leuk, maar..




  Waar query je dan op?



SOFTWARE INNOVATORS            44
Niet op je domein...

                      ..maar state veranderingen
                      moeten wel naar buiten




                                   Events!



SOFTWARE INNOVATORS                            45
Met een mooi woord..




  Event Sourcing



SOFTWARE INNOVATORS    46
Events: nu ook voor persistentie




                      ... beter dan logging!
SOFTWARE INNOVATORS                            47
Alles in één groot domein dus...




  Schaalt dát dan wel?



SOFTWARE INNOVATORS                48
Aggregates




SOFTWARE INNOVATORS   49
... voor ontkoppeling in het domein

     1 command mapt op 1 methode
     Die ene methode hoort bij 1 Aggregate
     En zit op de Aggregate Root
     Een Aggragate is een consistentie grens
     Elke Aggregate is consistent (invariants gelden)
     1 command > 1 Transactie > 1 AR > 1+ Events
     Met zijn events kan een Aggregate weer
      opgebouwd worden.


SOFTWARE INNOVATORS                                      50
Ok, de write side is gedekt

   Maar stel dat de gebruiker
     eerst iets wil zien?
                      Enter
                                 ?
                      Command:
                      >_




SOFTWARE INNOVATORS                  51
Queries
   Uit het domein komen events na state changes
   Vang deze events op en update een read model

   Relational database?
   Platte html?

   Voer queries uit op dit read model
   En voedt de GUI met de results
   Gebruik bijvoorbeeld.. databinding?
SOFTWARE INNOVATORS                                52
Het plaatje compleet...




SOFTWARE INNOVATORS       53
Extra’s met event sourcing
  Met elk event kunnen:
   Verschillende read models tegelijkertijd
    aangepast worden
   Meerdere, dezelfde read models tegelijkertijd
    aangepast worden, voor eenvoudig opschalen

  Nodig:
   Een eventbus waar deze models aan hangen
   Bij intensief gebruik: relaxed consistency

SOFTWARE INNOVATORS                                 54
Meer extra’s: externe koppeling
  1. Een andere applicatie wil onze gegevens?
  2. Publiceer de events op een externe eventbus
  3. Klaar




SOFTWARE INNOVATORS                                55
Meer extra’s: user intent
   In plaats van de laatste state
   + wat (onvolledige?) logs

   Hebben we nu een volledig & consistent log van
    alle state wijzigingen
   En slaan we de commands óók op, dan kunnen
    zien wat er gebeurd is, niet alleen het resultaat



SOFTWARE INNOVATORS                                     56
Zou deze gebruiker boek 1
interessant vinden?




                                              Koop
       Pak boek       Verwijder   Pak boek
                                             alles in
          1            boek 1        2
                                             mandje




SOFTWARE INNOVATORS                                     57
Meer extra’s: testen
   Given: <List of Events>
   When: <Command> is fired
   Then: <List of Events> is expected




SOFTWARE INNOVATORS                      58
Meer extra’s: rollout & debugging
  Moet een nieuwe versie live?
   Laat hem schaduw draaien
   Bekijk de commands en events
   Schakel over wanneer vertrouwd

  Toch een fout?
   Complete log van commands & events
   Debugging geen probleem
   Compensating action mogelijk
SOFTWARE INNOVATORS                      59
CQRS?




SOFTWARE INNOVATORS   60
CQRS & Circular Architecture




SOFTWARE INNOVATORS            61
Nadelen




SOFTWARE INNOVATORS             62
Nadelen
  Als gevolg van:
   Nieuwigheid
   Ontkoppeling
   Relaxed consistency




SOFTWARE INNOVATORS       63
Als gevolg van Nieuwigheid

   Ontwikkelaars nog niet bekend hiermee
   Nog weinig ondersteuning van frameworks
      ▫ Wel al enkele: Axon, Ncqrs, voorbeeld apps
   Database admin moet wennen aan andere rol
      ▫ Maar misschien is ‘God’ zijn ook wel wat te zwaar




SOFTWARE INNOVATORS                                         64
Als gevolg van Ontkoppeling

  Task based UI, Domeinmodel, Readmodel, Events
   Veel werk ten opzichte van two-way databinding
      ▫ Maar wie heeft dát echt zien werken?
      ▫ In een serieuze applicatie?

   Minder inzichtelijk ‘wat er nou precies gebeurt’
      ▫ Alternatief is: meer koppeling
      ▫ Op te lossen door goede naamgeving
      ▫ Naamgeving is sowieso zeer belangrijk

SOFTWARE INNOVATORS                                    65
Als gevolg van Relaxed           consistency
   Relaxed consistency moet uitgelegd worden
      ▫ Klinkt eng
      ▫ Beter is om het te hebben over stale data
      ▫ En data die je bekijkt is altijd stale!

   Maar in sommige gevallen is uitvoering van een
    command afhankelijk van de volledig state
      ▫ Bekend voorbeeld: de unieke username
      ▫ Best op te lossen door niet alles synchroon te doen


SOFTWARE INNOVATORS                                           66
Samenvatting




SOFTWARE INNOVATORS                  67
Samenvatting

 Het vertrouwde lagenmodel kent problemen
    Veel koppeling tussen lagen
    Meerdere representaties (modellen) door elkaar
    Externe koppeling veel maatwerk
    Slechte inherente schaalbaarheid
Samenvatting

 Command-Query Responsibility Segregation
  levert, in combinatie met Event Sourcing
   ▫ Sterkere ontkoppeling, meerdere read modellen,
     ‘gratis’ externe API en betere schaalbaarheid
   Plus extra’s zoals:
   ▫ Behoud van user intent
   ▫ Event log die als audit log kan dienen
   ▫ Een simpele interface om te testen
   ▫ Bedrijfszekere rollout en ingebouwde debugging
  Maar zoals altijd geldt: niet geschikt voor alles…
Meer weten?


     http://CodeBetter.com – Greg Young
     http://UdiDahan.com – Udi Dahan
     http://software-innovators.nl
     De DDD discussion group
      domaindrivendesign@yahoogroups.com

   Een groeiend aantal blogs, sites en presentaties


SOFTWARE INNOVATORS                                    70
Vragen?




SOFTWARE INNOVATORS   71
                           71
Contact
  Rick van der Arend
  rvdarend@sogyo.nl
  030 - 220 22 16

  Web: www.sogyo.nl
  Blog: www.software–innovators.nl




SOFTWARE INNOVATORS                  72

Contenu connexe

En vedette

Baserria
BaserriaBaserria
Baserrialeire
 
Diversiteit in lokaal jeugdbeleid
Diversiteit in lokaal jeugdbeleidDiversiteit in lokaal jeugdbeleid
Diversiteit in lokaal jeugdbeleidguest9cdac0
 
Csp@scuola uav corso1_lez4
Csp@scuola uav corso1_lez4Csp@scuola uav corso1_lez4
Csp@scuola uav corso1_lez4CSP Scarl
 
Smart Players or Dumb pipes - Digital banking trends 2012
Smart Players or Dumb pipes - Digital banking trends 2012Smart Players or Dumb pipes - Digital banking trends 2012
Smart Players or Dumb pipes - Digital banking trends 2012Shay Rosen (שי רוזן)
 
/Users/student/desktop/final1 e
/Users/student/desktop/final1 e/Users/student/desktop/final1 e
/Users/student/desktop/final1 eguestfaa9cde
 
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPT
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPTAnalisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPT
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPTIlham
 
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...Tawanda Kanhema
 
Csp@scuola2011 seminariointro borri
Csp@scuola2011 seminariointro borriCsp@scuola2011 seminariointro borri
Csp@scuola2011 seminariointro borriCSP Scarl
 
Event handling using jQuery
Event handling using jQueryEvent handling using jQuery
Event handling using jQueryIban Martinez
 
StartupBus UK presentation
StartupBus UK presentationStartupBus UK presentation
StartupBus UK presentationCyber-Duck
 

En vedette (18)

Baserria
BaserriaBaserria
Baserria
 
Diversiteit in lokaal jeugdbeleid
Diversiteit in lokaal jeugdbeleidDiversiteit in lokaal jeugdbeleid
Diversiteit in lokaal jeugdbeleid
 
Csp@scuola uav corso1_lez4
Csp@scuola uav corso1_lez4Csp@scuola uav corso1_lez4
Csp@scuola uav corso1_lez4
 
Autorretratos
AutorretratosAutorretratos
Autorretratos
 
Smart Players or Dumb pipes - Digital banking trends 2012
Smart Players or Dumb pipes - Digital banking trends 2012Smart Players or Dumb pipes - Digital banking trends 2012
Smart Players or Dumb pipes - Digital banking trends 2012
 
/Users/student/desktop/final1 e
/Users/student/desktop/final1 e/Users/student/desktop/final1 e
/Users/student/desktop/final1 e
 
Work Sample
Work SampleWork Sample
Work Sample
 
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPT
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPTAnalisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPT
Analisis Dynamic Tunnel Pada Jaringan Testbed MPLS VPN DS-TE di PTIK BPPT
 
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
JACOB ZUMA - FINANCES • Hidden Empires | Investigating Money In Politics • Ta...
 
Why VietnamWorks
Why VietnamWorksWhy VietnamWorks
Why VietnamWorks
 
Sonidos de idioma inglés
Sonidos de idioma inglésSonidos de idioma inglés
Sonidos de idioma inglés
 
Photoshootone
PhotoshootonePhotoshootone
Photoshootone
 
Kennedy creek poll dorset ram sale 2014 2015
Kennedy creek poll dorset ram sale 2014 2015Kennedy creek poll dorset ram sale 2014 2015
Kennedy creek poll dorset ram sale 2014 2015
 
Vowels 1
Vowels 1Vowels 1
Vowels 1
 
Working out
Working outWorking out
Working out
 
Csp@scuola2011 seminariointro borri
Csp@scuola2011 seminariointro borriCsp@scuola2011 seminariointro borri
Csp@scuola2011 seminariointro borri
 
Event handling using jQuery
Event handling using jQueryEvent handling using jQuery
Event handling using jQuery
 
StartupBus UK presentation
StartupBus UK presentationStartupBus UK presentation
StartupBus UK presentation
 

Similaire à Een introductie in CQRS

RES Online Seminar voor zorginstellingen
RES Online Seminar voor zorginstellingenRES Online Seminar voor zorginstellingen
RES Online Seminar voor zorginstellingenRES Software Nederland
 
Informatie Architectuur Fundamentals II
Informatie  Architectuur Fundamentals IIInformatie  Architectuur Fundamentals II
Informatie Architectuur Fundamentals IIeeccoon
 
Cloud computing en de toekomst van de IT-afdeling
Cloud computing en de toekomst van de IT-afdelingCloud computing en de toekomst van de IT-afdeling
Cloud computing en de toekomst van de IT-afdelingPascal van Eck
 
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rijAlle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rijProact Netherlands B.V.
 
2008 11 12 Linux World 2008
2008 11 12 Linux World 20082008 11 12 Linux World 2008
2008 11 12 Linux World 2008Bart Ratgers
 
CMBO Café - Nieuwe businessmodellen met SaaS
CMBO Café - Nieuwe businessmodellen met SaaSCMBO Café - Nieuwe businessmodellen met SaaS
CMBO Café - Nieuwe businessmodellen met SaaSPeter van Teeseling
 
Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)Sander van der Kolk
 
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...ICT-Partners
 
Presentatie elmos 2012 noëmi
Presentatie elmos 2012 noëmiPresentatie elmos 2012 noëmi
Presentatie elmos 2012 noëmiElmos010
 
Migration Van Asp Naar Saa S Cloud En Waarom Versie 1
Migration Van Asp Naar Saa S  Cloud En Waarom Versie 1Migration Van Asp Naar Saa S  Cloud En Waarom Versie 1
Migration Van Asp Naar Saa S Cloud En Waarom Versie 1Ruud Ramakers
 
Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)guest621f23
 
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008Step 991
 
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008MIT Institute
 
In Summa Performance Point
In Summa Performance PointIn Summa Performance Point
In Summa Performance PointAnton van Daal
 
Gevangen in de Wolken (saMBO-ICT versie)
Gevangen in de Wolken   (saMBO-ICT versie)Gevangen in de Wolken   (saMBO-ICT versie)
Gevangen in de Wolken (saMBO-ICT versie)Fabrice Mous
 
Zorgtotaal 2011: De werkplek 2011-2012
Zorgtotaal 2011: De werkplek 2011-2012Zorgtotaal 2011: De werkplek 2011-2012
Zorgtotaal 2011: De werkplek 2011-2012zorgtotaal11
 
Zorg & ICT 2011: De werkplek 2011-2012
Zorg & ICT 2011: De werkplek 2011-2012Zorg & ICT 2011: De werkplek 2011-2012
Zorg & ICT 2011: De werkplek 2011-2012zorgict11
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Dayboonzaai
 
Pathway to the cloud event 25 april 2012 - SaaS4channel
Pathway to the cloud event 25 april 2012 - SaaS4channelPathway to the cloud event 25 april 2012 - SaaS4channel
Pathway to the cloud event 25 april 2012 - SaaS4channelIngram Micro Nederland
 

Similaire à Een introductie in CQRS (20)

RES Online Seminar voor zorginstellingen
RES Online Seminar voor zorginstellingenRES Online Seminar voor zorginstellingen
RES Online Seminar voor zorginstellingen
 
Informatie Architectuur Fundamentals II
Informatie  Architectuur Fundamentals IIInformatie  Architectuur Fundamentals II
Informatie Architectuur Fundamentals II
 
Cloud computing en de toekomst van de IT-afdeling
Cloud computing en de toekomst van de IT-afdelingCloud computing en de toekomst van de IT-afdeling
Cloud computing en de toekomst van de IT-afdeling
 
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rijAlle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
Alle voordelen van FlexPod en EMC VSPEX converged infrastructuren op een rij
 
2008 11 12 Linux World 2008
2008 11 12 Linux World 20082008 11 12 Linux World 2008
2008 11 12 Linux World 2008
 
CMBO Café - Nieuwe businessmodellen met SaaS
CMBO Café - Nieuwe businessmodellen met SaaSCMBO Café - Nieuwe businessmodellen met SaaS
CMBO Café - Nieuwe businessmodellen met SaaS
 
Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)
 
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...
Webinar: 'Terug naar eenvoud in ICT | Dé roadmap voor ICT-innovatie & datacen...
 
Presentatie elmos 2012 noëmi
Presentatie elmos 2012 noëmiPresentatie elmos 2012 noëmi
Presentatie elmos 2012 noëmi
 
Migration Van Asp Naar Saa S Cloud En Waarom Versie 1
Migration Van Asp Naar Saa S  Cloud En Waarom Versie 1Migration Van Asp Naar Saa S  Cloud En Waarom Versie 1
Migration Van Asp Naar Saa S Cloud En Waarom Versie 1
 
Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)Business Mashups - Building on the Shoulders of Giants (Dutch)
Business Mashups - Building on the Shoulders of Giants (Dutch)
 
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA / MCSE 2003 TO MCTS / MCITP 2008
 
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008
Pres Upgrade MCSA/ MCSE 2003 TO MCTS / MCITP 2008
 
In Summa Performance Point
In Summa Performance PointIn Summa Performance Point
In Summa Performance Point
 
Gevangen in de Wolken (saMBO-ICT versie)
Gevangen in de Wolken   (saMBO-ICT versie)Gevangen in de Wolken   (saMBO-ICT versie)
Gevangen in de Wolken (saMBO-ICT versie)
 
Zorgtotaal 2011: De werkplek 2011-2012
Zorgtotaal 2011: De werkplek 2011-2012Zorgtotaal 2011: De werkplek 2011-2012
Zorgtotaal 2011: De werkplek 2011-2012
 
Zorg & ICT 2011: De werkplek 2011-2012
Zorg & ICT 2011: De werkplek 2011-2012Zorg & ICT 2011: De werkplek 2011-2012
Zorg & ICT 2011: De werkplek 2011-2012
 
Devnology Community Day
Devnology Community DayDevnology Community Day
Devnology Community Day
 
Pathway to the cloud event 25 april 2012 - SaaS4channel
Pathway to the cloud event 25 april 2012 - SaaS4channelPathway to the cloud event 25 april 2012 - SaaS4channel
Pathway to the cloud event 25 april 2012 - SaaS4channel
 
Cv Overview
Cv OverviewCv Overview
Cv Overview
 

Een introductie in CQRS

  • 1. Sogyo Café Schaalbaarheid CQRS Rick van der Arend – rvdarend@sogyo.nl
  • 2. Agenda  Voorstellen  State of the Art  Problemen  Oplossingen  CQRS  Nadelen  Afronding SOFTWARE INNOVATORS 2
  • 4. Wie ben ik?  Rick van der Arend  Sogyo Consultancy ▫ Architect/Developer ▫ Consultant ▫ Coach SOFTWARE INNOVATORS 4
  • 5. Wat we doen  Detachering  Opleiding  Development  Software innovatie SOFTWARE INNOVATORS 5
  • 6. State of the Art SOFTWARE INNOVATORS 6
  • 7. State of the Art  Op het gebied van applicatie architecturen  Van een monoliet...  ... naar layering SOFTWARE INNOVATORS 7
  • 8. De monoliet User Interface ‘Monoliet’ Database SOFTWARE INNOVATORS 8
  • 9. Layering Presentation Layer Data Layer 9
  • 10. Layering Presentation Layer Business logic Data Layer 10
  • 11. Layering Presentation Layer Business logic Data Layer 11
  • 12. Layering: de drie lagen Presentation Layer Business logic Data Layer 12
  • 13. Layering Where? Presentation Layer Printing Business logic Logging Email SMS Data Layer 13
  • 14. Layering: laag #4 Presentation Layer Service Layer Business logic Data Layer SOFTWARE INNOVATORS 14
  • 16. Problemen  Koppelingen tussen de lagen  Meerdere representaties  Externe koppelingen  Lage schaalbaarheid SOFTWARE INNOVATORS 16
  • 17. State of the Art Presentation Layer Service Layer Business logic Data Layer SOFTWARE INNOVATORS 17
  • 18. Ontkoppelde lagen? Form Row Presentation Layer DTO DTO Service Layer OBJ Business logic OBJ Row Data Layer Row SOFTWARE INNOVATORS 18
  • 19. Representaties: clients Fat client Web client Service Layer Business logic Data Layer SOFTWARE INNOVATORS 19
  • 20. Representaties: user roles Publiek Intranet Team Service Layer Business logic Data Layer SOFTWARE INNOVATORS 20
  • 21. Representaties: reports Presentation Layer Reports Service Layer Business logic Data Layer SOFTWARE INNOVATORS 21
  • 22. Externe koppelingen UI WS #1 WS #2 .. Service Layer Business logic Data Layer SOFTWARE INNOVATORS 22
  • 23. Schaalbaarheid 1 2 3 .. N Service Layer Business logic Data Layer -1 Data Layer - 2 Data Layer - 3 SOFTWARE INNOVATORS 23
  • 25. Oplossingen  Multi-Tier  Verticaal schalen  Horizontaal schalen  Rapportages apart  Satellietmodel SOFTWARE INNOVATORS 25
  • 26. Multi-Tier Presentation Layer Service Layer Business logic Data Layer SOFTWARE INNOVATORS 26
  • 27. Verticaal schalen Presentation Layer Service Layer Business logic Data Layer SOFTWARE INNOVATORS 27
  • 28. Horizontaal schalen 1 2 3 .. N Load balancer Service Layer Service Layer Service Layer Business logic Business logic Business logic Data Layer -1 Data Layer - 2 Data Layer - 3 SOFTWARE INNOVATORS 28
  • 29. Rapportages apart (BI/DWH) Presentation Layer Presentation Layer Service Layer Rapportage server Business logic Rapportages Data Layer Rapportage DB SOFTWARE INNOVATORS 29
  • 30. Beyond layering…  Een onafhankelijk domeinmodel 30
  • 32. Terug naar af Wat zijn de problemen in een notedop? Presentation Layer • Wijzigingen en queries gaan helemaal naar beneden • Results komen helemaal terug Service Layer • M.a.w. de lagen zijn gekoppeld • Er is niet één representatie • N representaties in 1 model Business logic • Externe koppelingen = werk • Opschalen is moeilijk Data Layer SOFTWARE INNOVATORS 32
  • 33. Rapportages apart (BI/DWH) Presentation Layer Presentation Layer Service Layer Rapportage server Business logic Rapportages Data Layer Rapportage DB SOFTWARE INNOVATORS 33
  • 34. Dat smaakt naar meer... Kan dat niet strikter? SOFTWARE INNOVATORS 34
  • 35. CQRS! Commands Queries Presentation Layer Presentation Layer Service Layer Rapportage server Business logic Rapportages Data Layer Rapportage DB SOFTWARE INNOVATORS 35
  • 36. CQRS Command-Query Responsibility Segregation SOFTWARE INNOVATORS 36
  • 37. Waarom geen ‘separation’? Command-Query Responsibility SeGREGation SOFTWARE INNOVATORS 37
  • 38. Dat ging even te snel.. Waarom wil je dit? SOFTWARE INNOVATORS 38
  • 39. Getters en Setters Presentation Layer Service Layer Als dit een OO- domeinmodel is, dan heb je hierin veel Business logic getters en setters Data Layer SOFTWARE INNOVATORS 39
  • 40. Whatever happened to... Tell, don’t ask. SOFTWARE INNOVATORS 40
  • 41. Tell, don’t Ask Is een principe dat je helpt om:  Koppelingen minimaal te houden  State+methodes van een verantwoordelijkheid te concentreren bij 1 object (..achter 1 interface) SOFTWARE INNOVATORS 41
  • 42. Van setters naar commands  Setters zetten properties  Wie valideert de state?  Validatie over verschillende properties? Ewww  Domein veranderingen zijn belangrijke elementen om te modelleren > onderdeel UL  Zorg dat veranderingen mappen op methodes  Een methode aanroep + params = command SOFTWARE INNOVATORS 42
  • 43. CqRs Kortom: alleen commands op het domein uitvoeren SOFTWARE INNOVATORS 43
  • 44. Dat klinkt heel leuk, maar.. Waar query je dan op? SOFTWARE INNOVATORS 44
  • 45. Niet op je domein... ..maar state veranderingen moeten wel naar buiten Events! SOFTWARE INNOVATORS 45
  • 46. Met een mooi woord.. Event Sourcing SOFTWARE INNOVATORS 46
  • 47. Events: nu ook voor persistentie ... beter dan logging! SOFTWARE INNOVATORS 47
  • 48. Alles in één groot domein dus... Schaalt dát dan wel? SOFTWARE INNOVATORS 48
  • 50. ... voor ontkoppeling in het domein  1 command mapt op 1 methode  Die ene methode hoort bij 1 Aggregate  En zit op de Aggregate Root  Een Aggragate is een consistentie grens  Elke Aggregate is consistent (invariants gelden)  1 command > 1 Transactie > 1 AR > 1+ Events  Met zijn events kan een Aggregate weer opgebouwd worden. SOFTWARE INNOVATORS 50
  • 51. Ok, de write side is gedekt Maar stel dat de gebruiker eerst iets wil zien? Enter ? Command: >_ SOFTWARE INNOVATORS 51
  • 52. Queries  Uit het domein komen events na state changes  Vang deze events op en update een read model  Relational database?  Platte html?  Voer queries uit op dit read model  En voedt de GUI met de results  Gebruik bijvoorbeeld.. databinding? SOFTWARE INNOVATORS 52
  • 54. Extra’s met event sourcing Met elk event kunnen:  Verschillende read models tegelijkertijd aangepast worden  Meerdere, dezelfde read models tegelijkertijd aangepast worden, voor eenvoudig opschalen Nodig:  Een eventbus waar deze models aan hangen  Bij intensief gebruik: relaxed consistency SOFTWARE INNOVATORS 54
  • 55. Meer extra’s: externe koppeling 1. Een andere applicatie wil onze gegevens? 2. Publiceer de events op een externe eventbus 3. Klaar SOFTWARE INNOVATORS 55
  • 56. Meer extra’s: user intent  In plaats van de laatste state  + wat (onvolledige?) logs  Hebben we nu een volledig & consistent log van alle state wijzigingen  En slaan we de commands óók op, dan kunnen zien wat er gebeurd is, niet alleen het resultaat SOFTWARE INNOVATORS 56
  • 57. Zou deze gebruiker boek 1 interessant vinden? Koop Pak boek Verwijder Pak boek alles in 1 boek 1 2 mandje SOFTWARE INNOVATORS 57
  • 58. Meer extra’s: testen  Given: <List of Events>  When: <Command> is fired  Then: <List of Events> is expected SOFTWARE INNOVATORS 58
  • 59. Meer extra’s: rollout & debugging Moet een nieuwe versie live?  Laat hem schaduw draaien  Bekijk de commands en events  Schakel over wanneer vertrouwd Toch een fout?  Complete log van commands & events  Debugging geen probleem  Compensating action mogelijk SOFTWARE INNOVATORS 59
  • 61. CQRS & Circular Architecture SOFTWARE INNOVATORS 61
  • 63. Nadelen Als gevolg van:  Nieuwigheid  Ontkoppeling  Relaxed consistency SOFTWARE INNOVATORS 63
  • 64. Als gevolg van Nieuwigheid  Ontwikkelaars nog niet bekend hiermee  Nog weinig ondersteuning van frameworks ▫ Wel al enkele: Axon, Ncqrs, voorbeeld apps  Database admin moet wennen aan andere rol ▫ Maar misschien is ‘God’ zijn ook wel wat te zwaar SOFTWARE INNOVATORS 64
  • 65. Als gevolg van Ontkoppeling Task based UI, Domeinmodel, Readmodel, Events  Veel werk ten opzichte van two-way databinding ▫ Maar wie heeft dát echt zien werken? ▫ In een serieuze applicatie?  Minder inzichtelijk ‘wat er nou precies gebeurt’ ▫ Alternatief is: meer koppeling ▫ Op te lossen door goede naamgeving ▫ Naamgeving is sowieso zeer belangrijk SOFTWARE INNOVATORS 65
  • 66. Als gevolg van Relaxed consistency  Relaxed consistency moet uitgelegd worden ▫ Klinkt eng ▫ Beter is om het te hebben over stale data ▫ En data die je bekijkt is altijd stale!  Maar in sommige gevallen is uitvoering van een command afhankelijk van de volledig state ▫ Bekend voorbeeld: de unieke username ▫ Best op te lossen door niet alles synchroon te doen SOFTWARE INNOVATORS 66
  • 68. Samenvatting Het vertrouwde lagenmodel kent problemen  Veel koppeling tussen lagen  Meerdere representaties (modellen) door elkaar  Externe koppeling veel maatwerk  Slechte inherente schaalbaarheid
  • 69. Samenvatting Command-Query Responsibility Segregation levert, in combinatie met Event Sourcing ▫ Sterkere ontkoppeling, meerdere read modellen, ‘gratis’ externe API en betere schaalbaarheid Plus extra’s zoals: ▫ Behoud van user intent ▫ Event log die als audit log kan dienen ▫ Een simpele interface om te testen ▫ Bedrijfszekere rollout en ingebouwde debugging  Maar zoals altijd geldt: niet geschikt voor alles…
  • 70. Meer weten?  http://CodeBetter.com – Greg Young  http://UdiDahan.com – Udi Dahan  http://software-innovators.nl  De DDD discussion group domaindrivendesign@yahoogroups.com  Een groeiend aantal blogs, sites en presentaties SOFTWARE INNOVATORS 70
  • 72. Contact Rick van der Arend rvdarend@sogyo.nl 030 - 220 22 16 Web: www.sogyo.nl Blog: www.software–innovators.nl SOFTWARE INNOVATORS 72

Notes de l'éditeur

  1. Layering: Opdeling naar verschillende verantwoordelijkheden. Dit is een goede ontwikkeling.Layers versus Tiers.Waar laten we (business) logica?
  2. Jaren ‘90 -&gt; nu: VB 1.0 (1991), Delphi, C++ windows development‘Click – and it works’ omgevingen
  3. Centraliseren van business logic: Stored procedures.T-SQL, wie kent het?Wat is het meest krachtige paradigma voor beschijven van (business) logic?  OO !
  4. Dus breng het onder in een apart onderdeel binnen je architectuur!Kort ingaan op de pijlen.
  5. En waarlaten we andereonderdelen?
  6. Nog een laag!
  7. Nog een laag!
  8. Nog een laag!
  9. Op het eerste gezicht kan dit mooi met dezelfde representatieBij nader inzien zijn de karakteristieken vaak anders:Niet alles in 1 keer laden voor het webEvents over de lijn op het web? Comet? Fancy..Andere stijl van interactie mogelijk, andere representatie.. Gewenst
  10. Meerdere views op dezelfde data.. En alles moet die lagen door..
  11. Weer een representatie erbij in de applicatie:-Met een leuke extra verrassing erbijAns van gang drie trekt met haar net in elkaar gezette rapportje je peperdure net een paar maanden vlekkeloos draaiende applicatie zo in 1 keer onderuit! Knap!
  12. Koppelingen:Weer een representatie dimensie erbijVaak ook veel custom werk per koppeling, parallel en in de tijd
  13. - De datalaag is in dit model het integratiepunt waar alles bij elkaar komt- De RDBMS is vaak nog wel geclusterd, geshard en gefailovered te krijgen- Maar hoe schaal je de rest van je applicatie? Niet out-of the-box
  14. Leuk maarKoppelingen tussen lagen blijftVerschillende representaties blijven lastigExterne koppelingen niet opgelost Only gets you so far
  15. Zet de lagen op verschillende tiersGooi er heel veel hardware onderIn eerste instantie goedkoopLoopt tegen een grens aan – en hardEnKoppelingen tussen lagen blijftVerschillende representaties blijven lastigExterne koppelingen niet opgelost
  16. Veel grote websites doen zoietsDe AppEngine doet zoietsLastig is dat wijzigingen elkaar in de datalaag pas tegenkomenJe kunt daar gaan voor volledige constistentie tussen clustered servers – maar dat kent zijn grenzen-En Session state? Distributed state server / of naar de datalaag of clients
  17. Leuk: een parallel model Wat toon je in je rapporten, wat toon je in de normale presentatie laag. Dubbelop.. Waar zit de logica om je datamodel te interpreteren? In de business logic. Maar als je dbreplication gebruikt.. Nou ja, doe maar gewoon half weer hetzelfde in ETL / Rapporten
  18. Sogydoetveel met Domain Driven Design. Volledigeloskoppeling van de business logica en dezecentraalstellen.Let op de pijlen!Schalenhiervankanwel, maar is direct niettriviaalVoorkomtwel (teveel) koppelingen: allesgaat via het domeinmodel, geenlagenbovenelkaar
  19. Leuk: een parallel model Wat toon je in je rapporten, wat toon je in de normale presentatie laag. Dubbelop.. Waar zit de logica om je datamodel te interpreteren? In de business logic. Maar als je dbreplication gebruikt.. Nou ja, doe maar gewoon half weer hetzelfde in ETL / Rapporten
  20. Leuk: een parallel model Wat toon je in je rapporten, wat toon je in de normale presentatie laag. Dubbelop.. Waar zit de logica om je datamodel te interpreteren? In de business logic. Maar als je dbreplication gebruikt.. Nou ja, doe maar gewoon half weer hetzelfde in ETL / Rapporten
  21. Nog een laag!
  22. Denk ook aan de Law of Demeter!
  23. Bliki – Martin Fowler – Geniaal met namen!
  24. Dit log is de state van je domeinAlleen inserts / toevoegingen!Write-once medium! -&gt; hoe safe wil je het hebben?Snapshots voor performance behoud
  25. Bliki – Martin Fowler – Geniaal met namen!
  26. Gebruik hier voorbeeld van klas &amp; kind: state van een kind is niet direct die van de klas. Messaging (events) noodzakelijk.
  27. Gebruik hier voorbeeld van klas &amp; kind: state van een kind is niet direct die van de klas. Messaging (events) noodzakelijk.
  28. Bliki – Martin Fowler – Geniaal met namen!
  29. Deze queries en results kunnen helemaal toegespitst worden op de gui waar ze in gebruikt worden
  30. Write &amp; Read model zijn verschillende bounded contexten.. -Relaxed consistency tussen verschillende bounded contexts is eigenlijk normaal-Voordeel: normaal gesproken is tussen bounded contexts een leidend-volgend relatie
  31. Write &amp; Read model zijn verschillende bounded contexten.. -Relaxed consistency tussen verschillende bounded contexts is eigenlijk normaal-Voordeel: normaal gesproken is tussen bounded contexts een leidend-volgend relatie
  32. Dit is op acceptance testing niveau. Sluit niet uit dat je nog lager niveau test
  33. Probleem van wat er nou precies gebeurt: geldt voor OO als geheelIs een gevolg van de stijl om complexiteit (precieze handelingen) achter een interface weg te stoppenCommands: t.t. – Events v.v.t.