CQRS: EventStore v2 Architectural Overview

[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, to durable storage. Because of the simplicity of the model of an event stream, it can easily be persisted to durable storage using a large number of storage engines, including relational databases, plain files, NoSQL document databases, or even key-value stores. »

Author image Jonathan Oliver

NServiceBus: w3wp.exe Processes Crashing

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 startup tasks when the bus is started during web application initialization. Among these tasks it checks the configured input queue. If, because of a permissions error, it fails to read from the queue, it logs a message using the configured logging, waits 10 seconds, and then exits the process. »

Author image Jonathan Oliver

100th Post

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, there's no way I'll be able to catch him at the rate he's posting. If any of you guys are considering a blog, I would strongly recommend it. »

Author image Jonathan Oliver

NServiceBus: ASP.NET Permissions for MSMQ

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 that I encountered was related to that of sending a message through NServiceBus to an endpoint inside of a web application. On my home machine, everything was working great. »

Author image Jonathan Oliver

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

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 definitely not what I'm trying to do. Per my understanding, a saga sits there and handles multiple messages and exists to coordinate multiple distinct transactions and perform compensating actions relative to the entire " »

Author image Jonathan Oliver

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

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 amount of time is not the important part. It's the fact that the "transaction", business process, or activity spans more than one message. »

Author image Jonathan Oliver

Leadership and Self-Deception: Getting Out of the Box

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 that we can often see problems in other people but we are rarely even aware of problems with ourselves—we are self-deceived. This 150-page book is written in a story/narrative-format which makes for very easy read and allows you to get inside the head of the main character to see his thought process. »

Author image Jonathan Oliver

Event Sourcing: Backup and Archiving Strategies

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 a little bit more consideration. First of all, one of the primary reasons for keeping everything relates to the incredible business value offered by the events. »

Author image Jonathan Oliver

Event Sourcing: Underling Storage Engine Options

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. Of course, NoSQL goes far beyond this and pushes hard on CAP and the ability to scale out. One of the beauties of event sourcing and specifically the event store is that it has relatively few, yet well-defined requirements that it puts on the underlying storage engine. »

Author image Jonathan Oliver

HTTP and HTTPS with Google CDN

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. In virtually all CDN examples you'll see something like this: http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js // http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" // ]] But what if my page is HTTPS? Do I somehow have to go through and either by hand, or with Javascript, update all src values to be HTTPS? »

Author image Jonathan Oliver