Messaging Reliability

classic Classic list List threaded Threaded
4 messages Options
Hausmann Philipp Hausmann Philipp
Reply | Threaded
Open this post in threaded view
|

Messaging Reliability

Hi all

I am considering using Ignite messages to manage some jobs in my cluster. I've seen that one can send messages either in an ordered or unordered fashion,
but the documentation does not specify any further guarantees. So far I have come up with the following questions:

- Is delivery of point-to-point messages guaranteed?

- Is delivery of topic messages to all/to some listeners guaranteed?

- Is correctness of delivered messages guaranteed (e.g. bitflips)?

My current impression is, that Ignite does not guarantee anything beyond ordering. Does anybody know anything more about this?

All the best,
Philipp
yakov yakov
Reply | Threaded
Open this post in threaded view
|

Re: Messaging Reliability

Philipp,

Messaging works on top of Ignite internal communication sub-system. Message delivery is guaranteed, unless recipient node has not left the grid. If it leaves (i.e. topology gets EVT_NODE_LEFT or EVT_NODE_FAILED),  then sender clears internal queue associated with left node. When node receives the messages it sends internal acks to let sender now that messages can be removed from queue.

Message correctness is not checked additionally - we rely on TCP here.

Let me know if you have more questions.

Thanks!

--Yakov

2016-04-04 12:13 GMT+03:00 Hausmann Philipp <[hidden email]>:
Hi all

I am considering using Ignite messages to manage some jobs in my cluster. I've seen that one can send messages either in an ordered or unordered fashion,
but the documentation does not specify any further guarantees. So far I have come up with the following questions:

- Is delivery of point-to-point messages guaranteed?

- Is delivery of topic messages to all/to some listeners guaranteed?

- Is correctness of delivered messages guaranteed (e.g. bitflips)?

My current impression is, that Ignite does not guarantee anything beyond ordering. Does anybody know anything more about this?

All the best,
Philipp

Hausmann Philipp Hausmann Philipp
Reply | Threaded
Open this post in threaded view
|

RE: Messaging Reliability

Thank you, that already helps me a lot!

One further question though. Given your answer and the javadoc documentation, I assume that the unordered send method in IgniteMessaging is blocking until
all recipients in the topic have received the message, right? And if any of the recipients fails to receive the message, an IgniteException is thrown?
And what happens if a new node is joining the cluster while a message is being sent?

If it makes sense, I could create a pull request to add this information to the javadoc?

Philipp


From: Yakov Zhdanov [[hidden email]]
Sent: Monday, April 04, 2016 11:49
To: [hidden email]
Subject: Re: Messaging Reliability

Philipp,

Messaging works on top of Ignite internal communication sub-system. Message delivery is guaranteed, unless recipient node has not left the grid. If it leaves (i.e. topology gets EVT_NODE_LEFT or EVT_NODE_FAILED),  then sender clears internal queue associated with left node. When node receives the messages it sends internal acks to let sender now that messages can be removed from queue.

Message correctness is not checked additionally - we rely on TCP here.

Let me know if you have more questions.

Thanks!

--Yakov

2016-04-04 12:13 GMT+03:00 Hausmann Philipp <[hidden email]>:
Hi all

I am considering using Ignite messages to manage some jobs in my cluster. I've seen that one can send messages either in an ordered or unordered fashion,
but the documentation does not specify any further guarantees. So far I have come up with the following questions:

- Is delivery of point-to-point messages guaranteed?

- Is delivery of topic messages to all/to some listeners guaranteed?

- Is correctness of delivered messages guaranteed (e.g. bitflips)?

My current impression is, that Ignite does not guarantee anything beyond ordering. Does anybody know anything more about this?

All the best,
Philipp

yakov yakov
Reply | Threaded
Open this post in threaded view
|

Re: Messaging Reliability

I think javadocs are not 100% correct. I am pretty sure exception will be thrown if connection to some node cannot be established, but if node A already have active connections to all nodes you want to send message to then message will be put to per-connection queues and will be sent in async manner. 

I think you can introduce new method that waits until message is acked from all nodes or throws exception if any of the target nodes leave.

See:
org.apache.ignite.internal.managers.communication.GridIoManager#send(org.apache.ignite.cluster.ClusterNode, java.lang.Object, int, org.apache.ignite.plugin.extensions.communication.Message, byte, boolean, long, boolean, org.apache.ignite.lang.IgniteInClosure<org.apache.ignite.IgniteException>)
org.apache.ignite.internal.IgniteMessagingImpl


--Yakov

2016-04-04 13:59 GMT+03:00 Hausmann Philipp <[hidden email]>:
Thank you, that already helps me a lot!

One further question though. Given your answer and the javadoc documentation, I assume that the unordered send method in IgniteMessaging is blocking until
all recipients in the topic have received the message, right? And if any of the recipients fails to receive the message, an IgniteException is thrown?
And what happens if a new node is joining the cluster while a message is being sent?

If it makes sense, I could create a pull request to add this information to the javadoc?

Philipp


From: Yakov Zhdanov [[hidden email]]
Sent: Monday, April 04, 2016 11:49
To: [hidden email]
Subject: Re: Messaging Reliability

Philipp,

Messaging works on top of Ignite internal communication sub-system. Message delivery is guaranteed, unless recipient node has not left the grid. If it leaves (i.e. topology gets EVT_NODE_LEFT or EVT_NODE_FAILED),  then sender clears internal queue associated with left node. When node receives the messages it sends internal acks to let sender now that messages can be removed from queue.

Message correctness is not checked additionally - we rely on TCP here.

Let me know if you have more questions.

Thanks!

--Yakov

2016-04-04 12:13 GMT+03:00 Hausmann Philipp <[hidden email]>:
Hi all

I am considering using Ignite messages to manage some jobs in my cluster. I've seen that one can send messages either in an ordered or unordered fashion,
but the documentation does not specify any further guarantees. So far I have come up with the following questions:

- Is delivery of point-to-point messages guaranteed?

- Is delivery of topic messages to all/to some listeners guaranteed?

- Is correctness of delivered messages guaranteed (e.g. bitflips)?

My current impression is, that Ignite does not guarantee anything beyond ordering. Does anybody know anything more about this?

All the best,
Philipp