the Disruptor framework vs The Complexities of Concurrency
Rob T
rob at ucora.com
Sat Dec 8 11:27:09 PST 2012
On Saturday, 8 December 2012 at 17:08:55 UTC, Nick Sabalausky
wrote:
>
> Fascinating.
>
>>
>> So the last problem is I don't see how it cleanly scales with
>> the
>> number of messages: there is only one instance of a specific
>> consumer
>> type on each stage. How do these get scaled if one core
>> working on
>> each is not enough?
>>
>
> As Fowler's articles mentions at one point, you can have
> multiple
> consumers of the same type working concurrently on the same
> ring by
> just simply having each of them skip every N-1 items (for N
> consumers
> of the same type. Ie, if you have two consumers of the same
> type, one
> operates on the even #'d items, the other on the odd.
Yes I was getting the sense of that while quickly reading through
it. If my understanding is correct, it seems that you can have
levels of rings and consumers operating like a pipelining system
from one stage to another to scale up to multiple cpus.
I need to sit down and read this in detail, it's very
interesting. Of particular interest to me, is the part where they
store in non-volatile memory the messages coming in, so that when
the system goes down, it can be brought back up to the previous
state by replaying the messages. They also use that system to
replicate multiple redundant copies so that should the live
service goes down, one of the redundant copies can immediately go
live in a very short period of time.
One concern I have though, is how generalized the approach is, or
if it is suitable only for certain specialized situations. Also
how scalable it is in terms of complexity with being able to
manage the scaling.
Note too the mention of issues with the GC, which forced certain
design decisions, although even without a GC, the design choices
may still be the best ones to use.
--rt
More information about the Digitalmars-d
mailing list