Gary Tully created AMQ-5920:
-------------------------------

             Summary: Improve performance of virtual topic fanout
                 Key: AMQ-5920
                 URL: https://issues.apache.org/jira/browse/AMQ-5920
             Project: ActiveMQ
          Issue Type: Improvement
          Components: Broker
    Affects Versions: 5.11.0
            Reporter: Gary Tully
            Assignee: Gary Tully
             Fix For: 5.12.0


Virtual topics provide a nice alternative to durable subs. Each durable sub is 
modeled as a separate queue.
There are performance implications however, because a message has to be sent to 
each of the (fanout) queues. For a durable subs, there is a single message in 
the journal and just index updates for each sub.

To improve performance there are three ways to improve the comparison between 
virtual topics and durable subs.
   # avoid the disk sync associated with enqueue
   # do parallel enqueues to get the store batching writes
   # introduce message references in the journal to reduce the disk io

For 1, introducing a transaction (either client side or automatically, broker 
side) ensures there is a single disk sync on commit.
For 2, using an executor to do sends in parallel allows the journal to batch as 
seen in AMQ-5077
For 3, the implementation is a lot more involved; for recovery there needs to 
be a journal write per destination and reading the journal will require two 
reads because of the indirection. Tracking gc needs to be handled to ensure the 
referenced entry is maintained. In short this is a lot of work and will only be 
visible for large (> 8k) messages where the cost of a large v small journal 
write is noticeable. The messageId dataLocator provides an entry point for this 
work but considering that 1 & 2 combined can give a 3x improvement I don't 
think it is worth the effort (and added complexity) at the moment.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to