Scalability and Concurrency Challenge
Tuesday, January 5, 2010 at 20:20 It is interesting, how concepts of separated features and messaging become more important as the distributed applications evolve. I keep encountering these again and again in the solutions at Lokad and in new reads showing up:
- Articles about cloud computing;
- Effectus codebase by Ayende;
- Command-Query Responsibility Segregation by Udi;
- MindTouch Dream principles of building lightweight decoupled services;
- Composite Application theory.
So for the last few weeks I’ve been discovering things like Advanced Message Queue Protocol (reading its specs is a pleasure of its own) and its implementations (Apache Qpid and RabbitMQ). There had also been a different approach to the REST services and concurrency handling as in the inspiring MindTouch Dream framework.
Obviously, the toolset is not your native Microsoft .NET toolset, but:
- MindTouch Dream works natively on Mono and .NET;
- Apache QPID and RabbitMQ have .NET clients;
- It takes just a few lines of code to write .NET Dream Service to act as a gateway between AMQP and REST;
- For some reason I like AMQP more than MSMQ;
- In a current world it takes less than an hour to procure a cheap running server out in the cloud.
It is also interesting to see how REST services and AMQP middleware services have their parallels with the classical composite applications:
- AMQP == EventBroker
- Services == IoC Container environment (roughly)
So basically, there are quite a lot of concepts and technological approaches that suddenly start making a lot of sense to me.
At the moment I’m interested in giving a try to build some learning prototype application using these technologies, just for the sake of practicing and learning pros and cons better.
Does anybody know of a common or specific problems out in the field, that require potential scalability and async processing? Something, where scalability, concurrency and sync processing create a lot of challenges.
Update: Jonathan has really nice article about Getting Started with DDDD and CQS (there are a lot of references there as well).