[ 
https://issues.apache.org/jira/browse/IGNITE-13986?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17267364#comment-17267364
 ] 

Ivan Bessonov commented on IGNITE-13986:
----------------------------------------

Ok, now the same thing but with a new context. Following thought might go into 
IEP in the future.

New component will conceptually include group membership and p2p messaging 
subsystem. It's going to be a general network component. Required API consists 
of the following:
 * start / stop;
 * retrieving information about current group members;
 * listening to membership events:
 ** node appeared;
 ** node left;
 ** node failed;
 * listening for incoming messages;
 * sending messages:
 ** there's a requirements of being able to send idempotent messages with very 
weak guarantees:
 *** no delivery guarantees required;
 *** multiple copies of the same message might be sent;
 *** no need to have any kind of acknowledgement;
 ** there's another requirement for the common use:
 *** message must be sent exactly once with an acknowledgement that it has 
actually been received (not processed);
 *** messages must be received in the same order they were sent.
These types of messages might utilize current recovery protocol with acks every 
32 (or so) messages. This setting must be flexible enough so that we won't get 
OOM in big topologies.

Possibility of SSL connections should be considered.

Given that SWIM membership events appear in no particular order, it's possible 
to receive a message from node before knowing that it exists or after it's 
already gone. This is one of the reasons why we should basically merge 
"discovery" and "communication" into one thing. Another reason is that it's 
more convenient to use a single port per node instead of two (i.e. use 
multiplexing).

There might be a requirement to stream data from one node to another (in SQL 
engine, for example). The implementation is not obvious for me, maybe such 
thing will be implemented on top of the current component. Anyway, 
implementation will be tightly coupled with netty integration, currently 
investigated by [~sergeychugunov].

Everything related to actual "Discovery" and messages like "NodeJoined" is not 
discussed here. Since we're moving to RAFT-based distributed metadata storage 
as a mean to send ordered messages, discussing them is just out of scope. 
Current "Discovery" with its join protocol and strict ordering of events will 
cease to exist.

There's a bunch of settings that should be extracted from scalecube 
configuration and joined with some specific netty settings. The whole set of 
settings will be determined during implementation. New configuration framework 
will be used. For the first time, probably.

> Proof of concept - SWIM group membership protocol for discovery
> ---------------------------------------------------------------
>
>                 Key: IGNITE-13986
>                 URL: https://issues.apache.org/jira/browse/IGNITE-13986
>             Project: Ignite
>          Issue Type: New Feature
>            Reporter: Ivan Bessonov
>            Assignee: Ivan Bessonov
>            Priority: Major
>              Labels: iep-61, ignite-3
>
> In IEP-61 it is mentioned that discovery protocol will be updated. We need to 
> play with mentioned options for a little bit to conclude if they match our 
> needs:
> [http://www.cs.cornell.edu/Info/Projects/Spinglass/public_pdfs/SWIM.pdf]
> [https://github.com/scalecube/scalecube-cluster]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to