Conference Sessions - Distributed Systems

Comments

I will be speaking at two upcoming conferences.  The Rocky Mountain Tech Trifecta in Denver, Colorado on March 5th and the Utah Code Camp in Salt Lake City, Utah on March 19th.  I will be speaking on distributed systems and messaging. I’ll be touching on the following…

EventStore: Getting All Events Since…

Comments

One of the fundamental advantages of event sourcing coupled with CQRS is the ability to quickly and easily build your read models from your event stream.  This includes the ability to build alternate views or projections from your data (which is a *huge* advantage) as well as the ability…

Data Precision in NoSQL

Comments

I’ve got to hand it to the NoSQL teams. In some recent work on my EventStore project, I have seen how, when you give them a value to story and then query the associated document/row/whatever, the NoSQL solutions hand back the *exact same value* every single time…

Sagas, Event Sourcing, and Failed Commands

Comments

There is an interesting thread on the DDD/CQRS group involving sagas.  I’m posting my reply below because I want to make it available as a solution to those that encounter this same problem.  All replies should be directed on the CQRS thread instead of replying here…

Event Store: Transaction Integrity Without Transactions

Comments

As outlined in the architectural overview document, the central model in version 2.0 of the EventStore is that of a “commit” consisting of a series of events. By focusing on a commit we are able to liberate ourselves from the high requirements introduced when using a two-phase commit protocol…

CQRS: EventStore v2 Architectural Overview

Comments

[The following is a design document that gives an overview of version 2.0 of my EventStore project that is currently under active development.  Buckle up.  It’s long.] EventStore v2 Architectural Overview The EventStore is designed to store a series of events, known as an event stream…

NServiceBus: w3wp.exe Processes Crashing

Comments

If you are using NServiceBus in a web application and the process named w3wp.exe keeps bombing and exiting shortly after starting, here’s what’s happening:  You don’t have the appropriate permissions set for your message queues. The way NServiceBus is designed, it performs a few small…

NServiceBus: ASP.NET Permissions for MSMQ

Comments

I have two different development machines, one at home and one at work.  I’m definitely not a laptop guy because I like having three monitors.  In any case, this gives me the ability to develop slightly different environments which helps uncover subtle issues.  One such issue…

100th Post

Comments

I just counted up the number of posts I’ve written in the last two years and I’m at 100.  That’s about one a week.  Not too shabby.  I have Oren to thank for convincing me to start a blog.  At the same time…

CQRS: Sagas with Event Sourcing (Part II of II)

Comments

In my first post, I explained a little bit about how sagas can be leveraged to deal with the problem of nested transactions—”transactions” that span more than a single message.  There were a few community questions related to me redefining the concept of a saga.  That’s…

CQRS: Sagas with Event Sourcing (Part I of II)

Comments

For starters, what is a saga?  A saga is a “long-lived business transaction or process”.  Okay, so what does that mean?  Well, first of all, the “long-lived” part doesn’t have to mean hours, days, or even weeks—it could literally mean something as short as a few seconds.  The…

Leadership and Self-Deception: Getting Out of the Box

Comments

I recently finished a book called Leadership and Self-Deception: Getting Out of the Box.  In a word, this book was fantastic. The premise of the book is about understanding the problems that we have in our relationships—with family members, co-workers, anyone.  The irony of it all is…

Event Sourcing: Backup and Archiving Strategies

Comments

One point that comes up now and again is related to archiving and backup strategies for an event store.  The main thinking is that, if we keep all events ever generated, won’t we run out of disk space?  That’s a great question and one that deserves…

Event Sourcing: Underling Storage Engine Options

Comments

The emergence of NoSQL is an interesting movement.  One of the key principles behind NoSQL is related to the simplicity of the data store.  This is in contrast to a traditional RDBMS.  The amount of code required to create a production-grade relational database is far from trivial…

HTTP and HTTPS with Google CDN

Comments

One little trick that I learned not too long ago was the ability to load a file from Google’s CDN (or any CDN for that matter) relative to the protocol of the page, e.g. if the page is HTTPS, the CDN content would load HTTPS, and vice versa…

NServiceBus: Distributing Event Schema/Contract

Comments

In SOA, events facilitate loose coupling.  One of the primary tenets of SOA is that services define schema and contract not class or type.  For this reason it is good to keep the event definitions separate from your code.  In fact, Udi recommend keeping this separation to…

jQuery CDN Failover

Comments

There are a number of large benefits to referencing the jQuery libraries hosted on the Google and Microsoft CDNs.  But there are a few drawbacks as well.  The primary drawback being: what happens if Google is down.  The event is unlikely, but not without precedence. I have…

Why I Love NServiceBus

Comments

Almost a year ago I wrote a post called Why I Love CQRS.  Little did I realize how far that post would go.  It ranks #1 in Google for the term CQRS and #2 in Bing.  Since that same time I have been wanting to post my…

CQRS Event Store

Comments

Almost two months ago I went to Montreal to visit Greg Young and get some clarification on a few lesser-known points of his DDDD (CQRS+DDD+Event Sourcing) style of programming and preachment.  He’s really great to talk to but it can sometimes be like sipping from the…

Optimistic Concurrency in Riak: Take 2

Comments

A few weeks ago I blogged about implementing optimistic concurrency control using the Dynamo clone storage engines.  I need to give an update to this technique that is specific to Riak. Riak supports an “if-match” header that allows you to implement OCC out of the box.  The only…

Greg Young’s CQRS Workshop

Comments

This week I went to Montreal where I was able to participate in a three-day workshop.  There were about nine people there including Greg. The workshop was great.  I really enjoyed listening to Greg go into significant depth regarding both the technological and business perspectives behind CQRS. …

Somewhere Werner is Crying

Comments

My last blog post generated a fair amount of activity in the twittersphere.  In many ways I was expecting that because it’s fairly controversial.  To think that someone would take a nice scalable storage solution and put it back under the thumb of an RDBMS is nuts…

Cassandra/Riak/Dynamo Optimistic Concurrency Control

Comments

There are a number of great NoSQL implementation each with their own set of unique advantages and quirks including maturity of the project, size of the community, and technical merit.  While not discounting the unique ways in which each NoSQL project fills a specific set of requirements, I consider…

Message Idempotency Patterns and Disk Usage

Comments

One of the main concerns that may be expressed in reviewing my previous blog post about idempotent messaging patterns is that of disk usage.  The concern is about retaining every. single. message we ever publish.  That’s a lot of messages.  That’s a lot disk space…

Messaging: At-Least-Once Delivery

Comments

One of the guarantees behind messaging is guaranteed delivery.  Most of us don’t give any additional thought to the subject.  Until we get into production.  While messages may be guaranteed deliverable, have we ever considered that a message may be delivered more than once? When I…

Idempotency Patterns

Comments

In several of my previous posts I discussed how to avoid the overhead of a two-phase commit while still being able to maintain an application-level transactional consistency between two resources, such as a message queue and durable data store, e.g. a database.  When considering how to implement idempotency…

Extending NServiceBus: Avoiding Two-Phase Commits

Comments

When using non-transactional queues processing a message is trivially easy—just handle the message and write to your data store.  If the process dies and we lose a message, that’s okay.  But when using a transactional queue things can become more difficult because we want our infrastructure…

NServiceBus Distributed Transaction Woes

Comments

In the industry there is a general trend away from locking, two-phase commits.  In theory, quorum and Paxos-style commits ensure consistency across disparate resources, but why not avoid the issue altogether?  The fundamental idea behind each of these commit protocols is to ensure application consistency at an infrastructure…

NServiceBus Message Modules (IMessageModule)

Comments

When handling messages in NServiceBus it may become necessary to consume the same message multiple times but in different ways.  For example, suppose you wanted to update separate yet related tables in the database.  You could throw all of the business logic into a single message handler and…

Extending NServiceBus: Thread-Specific Message Modules

Comments

NServiceBus message modules are global objects that are invoked at various stages of processing for a physical message, e.g. during receipt, when processing is complete, and upon any error condition.  Their typical use case is to setup thread-specific values, such as outbound message headers or starting up a…

Extending NServiceBus: Per Unit of Work IoC Container

Comments

NServiceBus is great.  That’s really all there is to it.  The framework is incredibly flexible such that it can be extended without too much effort.  But there are a few small points of friction that we’ve encountered.  This article shows how we’ve been…

CQRS Session Video – Utah Code Camp 2010

Comments

I recorded my CQRS presentation that I gave at the Utah Code Camp today (Saturday).  The video is divided in two parts in order be under the size limit imposed by the video hosting provider. If it says “Video not available”, try back in a few minutes, I just…