Thursday, November 17, 2011

What has been keeping me busy...

Every once in a while, your world gets turned upside down.  Someone challenges you to think different, and because of it you will never be the same.  After developing software professionally for the past eleven years, I have had the pleasure of being introduced to some new ideas and concepts, that have caused me to rethink how to develop software.

There will be more to come, but I thought I would send out this little teaser of what I have been spending time with.

Disruptor

Imagine someone suggesting that the way traditional way of scaling and boosting performance by adding more CPUs is not correct.  Then imagine this same company that made this suggestion is proving it by processing more than six million orders per second on a single thread.  LMAX has done just that, but more than that, they have completely open sourced their findings and their Java solution.  Wondering how to write your next multi-threaded application?  You should definitely give the disruptor some attention.

Event Sourcing

While learning about the Disruptor, I came across a new term that I had never heard of before, but one that I will never forget.  The easiest way to think about Event Sourcing is when you think about your bank account.  How does a bank determine your current balance?  It rolls up the debits and credits of your account since the beginning of your account.  What if we applied this same technique to our data model when developing software?  We would be able to look at the system and our data at any point in time.  Anyone likes to guess the state of the system at 2 o'clock in the morning after being woken up due to a production issue?

Events are not just for notifications, by Greg Young, is a great introduction to Event Sourcing.

CQRS

Last, but not least is my current obsession.  During Greg Young's talk, he mentioned something called CQRS.  Since I was so impressed with what he had to say about Event Sourcing, I thought I would look up what CQRS is all about.  In a nutshell, it is an alternative to N-Tier Software Design (Database Tier, Services Tier, UI Tier).  It allows software to be designed and tested with behavior.  Grounded in the principles of Domain Driven Design, this architecture has taken me a while to understand, and I am still learning.  The implications of what is possible with it, are amazing.

To learn more, I would recommend the following:

If you would like to get your feet wet in what it would be like to develop software using these principles, I would highly recommend the Axon Framework.  I have been using it for a month now, and it is great.  Not to mention the documentation is outstanding and the responses that I have received on the mailing list has been wonderful.

So, that is what has been keeping me busy.....there will definitely be more to come, but I thought I would offer this as a primer before digging in too deep.

No comments: