[openstack-dev] [Zaqar] Zaqar and SQS Properties of Distributed Queues
Gordon Sim
gsim at redhat.com
Thu Sep 18 14:09:07 UTC 2014
On 09/18/2014 12:31 PM, Flavio Percoco wrote:
> On 09/17/2014 10:36 PM, Joe Gordon wrote:
>> My understanding of Zaqar is that it's like SQS. SQS uses distributed
>> queues, which have a few unusual properties [0]:
>>
>>
>> Message Order
>>
>> Amazon SQS makes a best effort to preserve order in messages, but due to
>> the distributed nature of the queue, we cannot guarantee you will
>> receive messages in the exact order you sent them. If your system
>> requires that order be preserved, we recommend you place sequencing
>> information in each message so you can reorder the messages upon receipt.
>>
>
> Zaqar guarantees FIFO. To be more precise, it does that relying on the
> storage backend ability to do so as well. Depending on the storage used,
> guaranteeing FIFO may have some performance penalties.
Would it be accurate to say that at present Zaqar does not use
distributed queues, but holds all queue data in a storage mechanism of
some form which may internally distribute that data among servers but
provides Zaqar with a consistent data model of some form?
[...]
> As of now, Zaqar fully relies on the storage replication/clustering
> capabilities to provide data consistency, availability and fault
> tolerance.
Is the replication synchronous or asynchronous with respect to client
calls? E.g. will the response to a post of messages be returned only
once the replication of those messages is confirmed? Likewise when
deleting a message, is the response only returned when replicas of the
message are deleted?
> However, as far as consuming messages is concerned, it can
> guarantee once-and-only-once and/or at-least-once delivery depending on
> the message pattern used to consume messages. Using pop or claims
> guarantees the former whereas streaming messages out of Zaqar guarantees
> the later.
From what I can see, pop provides unreliable delivery (i.e. its similar
to no-ack). If the delete call using pop fails while sending back the
response, the messages are removed but didn't get to the client.
What do you mean by 'streaming messages'?
[...]
> Based on our short conversation on IRC last night, I understand you're
> concerned that FIFO may result in performance issues. That's a valid
> concern and I think the right answer is that it depends on the storage.
> If the storage has a built-in FIFO guarantee then there's nothing Zaqar
> needs to do there. In the other hand, if the storage does not have a
> built-in support for FIFO, Zaqar will cover it in the driver
> implementation. In the mongodb driver, each message has a marker that is
> used to guarantee FIFO.
That marker is a sequence number of some kind that is used to provide
ordering to queries? Is it generated by the database itself?
More information about the OpenStack-dev
mailing list