SlideShare a Scribd company logo
1 of 23
Europe Virtual ALT.NET, 25 October 2011
                         Jonathan Oliver


Using and Abusing
   Founder: SmartyStreets (smartystreets.com)

   Founder, co-host: Distributed Podcast

   Committer, NServiceBus & Autofac

   Project owner, CQRS EventStore
   Finances the EventStore project

   Started in 2006 (as Qualified Address)

   All your street address are belong to us

   My personal guinea pig

   Fully geo-distributed
   Messaging
   SOA
   DDD
   CQRS (strict definition)
   Event Sourcing
   CQRS Architecture
   Hand-crafted SQL and stored procedures

   Canonical data model

   Application integration via shared database

   Generated DAL
   Temporal database design

   Messaging

   Breakthrough—Putting DBs in their place

   Greg Young—InfoQ and DevTeach Videos
   Capturing business intent
   Rebuild state from events
   Rewind, pause, fast-forward
   Build alternate models
   Immutable data is crazy scalable
   Complete audit
   It’s not a framework—I hate frameworks

   It doesn’t permeate your code

   You can swap it out and/or build your own

   Nothing existed at the time—March 2009

   Implementation reflects the developer
   Goal: technology is an implementation detail

   Transactions typically exist in SQL land

   Lots of interesting alternatives appearing

   Momentum around NoSQL increasing

   Two-phase commit virtually non-existent
   Absorbing transactions

   Cross-resource transactional consistency

   Commits

   Exposing a robust, easy-to-use model
“Repository”               App / Service Layer                     Dispatcher / Bus

                                         EventStore
“ISession”                                                        commit
                             Event Stream
                                    commit

“ISessionFactory”             Event Store        Pipeline Hooks


“NHibernate Magic”
                           Persistence Engine      Serializer



Disk, DB, Memory, etc.      Durable Storage

                (Snapshotting and some advanced capabilities have been ommitted)
Transaction #1      Message Handler          EventStore
                                                                Async Dispatch
                                                                  Scheduler

                                             commit       ack
•Optimistic Concurrency
• Idempotency/De-duplication                    Disk



Transaction #2
                        Dispatch              Messaging
                                                                 Wire Protocol
                        Scheduler             Technology


                               Mark as dispatched


Transaction #3
                       EventStore



                          Disk
   Streams vs. Aggregates

   Usage Example

   Implementation
   Pipes and filters

   Filter out, modify, up-convert

   Select, Precommit, and Postcommit

   Implementation
   Synchronous vs. Asynchronous

   Any bus, broker, or messaging technology

   Any serialization mechanism

   Production example

   Implementation
   XML, JSON/BSON, Protocol Buffers, Thrift,
    MessagePack, Avro

   Serialization pipeline

   Implementation
   The primary storage engine
   Easy to understand
   Great management tools
   Proven, mature implementation
   10+ flavors (SQL Server, MySQL, SQLite, etc.)
   Code
   Easy alternative for .NET

   Great commercial support

   Great management tools

   Responsive community + Oren/Ayende

   Gotcha: 2PC and repeatable reads
   Highly robust engine

   Established as a primary NoSQL engine

   Lots of management tools

   Code
   CouchDB
   Amazon
   Azure
   Oracle
   Redis
   Cassandra
   .NET System.IO APIs
   Completely optional

   Avoiding additional dependencies

   Can use StructureMap, Autofac, Ninject, etc.
   Spike code that worked too well

   Simple, opinionated “DDDD” framework

   Purposefully minimalistic

   “Essence” to be merged into EventStore
Blog:     blog.jonathanoliver.com

Twitter   jonathan_oliver

GitHub    github.com/joliver

More Related Content

What's hot

Kerberos and its application in cross realm operations
Kerberos and its application in cross realm operationsKerberos and its application in cross realm operations
Kerberos and its application in cross realm operations
Arunangshu Bhakta
 
Bh us-02-kaminsky-blackops
Bh us-02-kaminsky-blackopsBh us-02-kaminsky-blackops
Bh us-02-kaminsky-blackops
Dan Kaminsky
 

What's hot (20)

Zimbra scripting with python
Zimbra scripting with pythonZimbra scripting with python
Zimbra scripting with python
 
Concurrency, Parallelism And IO
Concurrency,  Parallelism And IOConcurrency,  Parallelism And IO
Concurrency, Parallelism And IO
 
WebSocket MicroService vs. REST Microservice
WebSocket MicroService vs. REST MicroserviceWebSocket MicroService vs. REST Microservice
WebSocket MicroService vs. REST Microservice
 
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
 
7 characteristics of container-native infrastructure, Docker Zurich 2015-09-08
7 characteristics of container-native infrastructure, Docker Zurich 2015-09-087 characteristics of container-native infrastructure, Docker Zurich 2015-09-08
7 characteristics of container-native infrastructure, Docker Zurich 2015-09-08
 
Kerberos and its application in cross realm operations
Kerberos and its application in cross realm operationsKerberos and its application in cross realm operations
Kerberos and its application in cross realm operations
 
SSO with kerberos
SSO with kerberosSSO with kerberos
SSO with kerberos
 
OpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-SideOpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-Side
 
Building a Cloud Native Service - Docker Meetup Santa Clara (July 20, 2017)
Building a Cloud Native Service - Docker Meetup Santa Clara (July 20, 2017)Building a Cloud Native Service - Docker Meetup Santa Clara (July 20, 2017)
Building a Cloud Native Service - Docker Meetup Santa Clara (July 20, 2017)
 
Bh us-02-kaminsky-blackops
Bh us-02-kaminsky-blackopsBh us-02-kaminsky-blackops
Bh us-02-kaminsky-blackops
 
Greyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryGreyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka Library
 
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupExactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
 
Transaction Support in Pulsar 2.5.0
Transaction Support in Pulsar 2.5.0Transaction Support in Pulsar 2.5.0
Transaction Support in Pulsar 2.5.0
 
Advanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UKAdvanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UK
 
Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)
 
OpenSlava Infrastructure Automation Patterns
OpenSlava   Infrastructure Automation PatternsOpenSlava   Infrastructure Automation Patterns
OpenSlava Infrastructure Automation Patterns
 
Microservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATSMicroservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATS
 
Driving containerd operations with gRPC
Driving containerd operations with gRPCDriving containerd operations with gRPC
Driving containerd operations with gRPC
 
Micro on NATS - Microservices with Messaging
Micro on NATS - Microservices with MessagingMicro on NATS - Microservices with Messaging
Micro on NATS - Microservices with Messaging
 
Kerberos
KerberosKerberos
Kerberos
 

Similar to Europe Virtual ALT.NET - EventStore v3

AWS Summit 2011: Architecting in the cloud
AWS Summit 2011: Architecting in the cloudAWS Summit 2011: Architecting in the cloud
AWS Summit 2011: Architecting in the cloud
Amazon Web Services
 
Choosing Your Windows Azure Platform Strategy
Choosing Your Windows Azure Platform StrategyChoosing Your Windows Azure Platform Strategy
Choosing Your Windows Azure Platform Strategy
drmarcustillett
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure java
Roman Elizarov
 
OpenStack at Xen summit Asia
OpenStack at Xen summit Asia OpenStack at Xen summit Asia
OpenStack at Xen summit Asia
Jaesuk Ahn
 

Similar to Europe Virtual ALT.NET - EventStore v3 (20)

Azure and cloud design patterns
Azure and cloud design patternsAzure and cloud design patterns
Azure and cloud design patterns
 
20141021 AWS Cloud Taekwon - Startup Best Practices on AWS
20141021 AWS Cloud Taekwon - Startup Best Practices on AWS20141021 AWS Cloud Taekwon - Startup Best Practices on AWS
20141021 AWS Cloud Taekwon - Startup Best Practices on AWS
 
AWS Summit 2011: Architecting in the cloud
AWS Summit 2011: Architecting in the cloudAWS Summit 2011: Architecting in the cloud
AWS Summit 2011: Architecting in the cloud
 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure code
 
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
AI&BigData Lab 2016. Сарапин Виктор: Размер имеет значение: анализ по требова...
 
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear ScalabilityBeyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
 
GDL OpenStack Community - Openstack Introduction
GDL OpenStack Community - Openstack IntroductionGDL OpenStack Community - Openstack Introduction
GDL OpenStack Community - Openstack Introduction
 
High Performance Cloud Computing
High Performance Cloud ComputingHigh Performance Cloud Computing
High Performance Cloud Computing
 
High Performance Cloud Computing
High Performance Cloud ComputingHigh Performance Cloud Computing
High Performance Cloud Computing
 
Choosing Your Windows Azure Platform Strategy
Choosing Your Windows Azure Platform StrategyChoosing Your Windows Azure Platform Strategy
Choosing Your Windows Azure Platform Strategy
 
OpenStack: Why Is It Gaining So Much Traction?
OpenStack: Why Is It Gaining So Much Traction?OpenStack: Why Is It Gaining So Much Traction?
OpenStack: Why Is It Gaining So Much Traction?
 
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
 
Open stack in sina
Open stack in sinaOpen stack in sina
Open stack in sina
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure java
 
OpenStack at Xen summit Asia
OpenStack at Xen summit Asia OpenStack at Xen summit Asia
OpenStack at Xen summit Asia
 
Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !Apache Kafka - Scalable Message-Processing and more !
Apache Kafka - Scalable Message-Processing and more !
 
Netflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open SourceNetflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open Source
 
A guide through the Azure Messaging services - Update Conference
A guide through the Azure Messaging services - Update ConferenceA guide through the Azure Messaging services - Update Conference
A guide through the Azure Messaging services - Update Conference
 
Enabling Microservices Frameworks to Solve Business Problems
Enabling Microservices Frameworks to Solve  Business ProblemsEnabling Microservices Frameworks to Solve  Business Problems
Enabling Microservices Frameworks to Solve Business Problems
 
OpenStack for VMware Administrators
OpenStack for VMware AdministratorsOpenStack for VMware Administrators
OpenStack for VMware Administrators
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Choreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software EngineeringChoreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software Engineering
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
 

Europe Virtual ALT.NET - EventStore v3

  • 1. Europe Virtual ALT.NET, 25 October 2011 Jonathan Oliver Using and Abusing
  • 2. Founder: SmartyStreets (smartystreets.com)  Founder, co-host: Distributed Podcast  Committer, NServiceBus & Autofac  Project owner, CQRS EventStore
  • 3. Finances the EventStore project  Started in 2006 (as Qualified Address)  All your street address are belong to us  My personal guinea pig  Fully geo-distributed
  • 4. Messaging  SOA  DDD  CQRS (strict definition)  Event Sourcing  CQRS Architecture
  • 5. Hand-crafted SQL and stored procedures  Canonical data model  Application integration via shared database  Generated DAL
  • 6. Temporal database design  Messaging  Breakthrough—Putting DBs in their place  Greg Young—InfoQ and DevTeach Videos
  • 7. Capturing business intent  Rebuild state from events  Rewind, pause, fast-forward  Build alternate models  Immutable data is crazy scalable  Complete audit
  • 8. It’s not a framework—I hate frameworks  It doesn’t permeate your code  You can swap it out and/or build your own  Nothing existed at the time—March 2009  Implementation reflects the developer
  • 9. Goal: technology is an implementation detail  Transactions typically exist in SQL land  Lots of interesting alternatives appearing  Momentum around NoSQL increasing  Two-phase commit virtually non-existent
  • 10. Absorbing transactions  Cross-resource transactional consistency  Commits  Exposing a robust, easy-to-use model
  • 11. “Repository” App / Service Layer Dispatcher / Bus EventStore “ISession” commit Event Stream commit “ISessionFactory” Event Store Pipeline Hooks “NHibernate Magic” Persistence Engine Serializer Disk, DB, Memory, etc. Durable Storage (Snapshotting and some advanced capabilities have been ommitted)
  • 12. Transaction #1 Message Handler EventStore Async Dispatch Scheduler commit ack •Optimistic Concurrency • Idempotency/De-duplication Disk Transaction #2 Dispatch Messaging Wire Protocol Scheduler Technology Mark as dispatched Transaction #3 EventStore Disk
  • 13. Streams vs. Aggregates  Usage Example  Implementation
  • 14. Pipes and filters  Filter out, modify, up-convert  Select, Precommit, and Postcommit  Implementation
  • 15. Synchronous vs. Asynchronous  Any bus, broker, or messaging technology  Any serialization mechanism  Production example  Implementation
  • 16. XML, JSON/BSON, Protocol Buffers, Thrift, MessagePack, Avro  Serialization pipeline  Implementation
  • 17. The primary storage engine  Easy to understand  Great management tools  Proven, mature implementation  10+ flavors (SQL Server, MySQL, SQLite, etc.)  Code
  • 18. Easy alternative for .NET  Great commercial support  Great management tools  Responsive community + Oren/Ayende  Gotcha: 2PC and repeatable reads
  • 19. Highly robust engine  Established as a primary NoSQL engine  Lots of management tools  Code
  • 20. CouchDB  Amazon  Azure  Oracle  Redis  Cassandra  .NET System.IO APIs
  • 21. Completely optional  Avoiding additional dependencies  Can use StructureMap, Autofac, Ninject, etc.
  • 22. Spike code that worked too well  Simple, opinionated “DDDD” framework  Purposefully minimalistic  “Essence” to be merged into EventStore
  • 23. Blog: blog.jonathanoliver.com Twitter jonathan_oliver GitHub github.com/joliver