Guys, I have an idea of merging all net components to one.
Now we have the following components interacting via network: 1. discovery 2. communication 3. rest 4. odbc 5. ignite-hadoop 6. time processor (being removed together with clock mode) 7. IPC communication endpoint 2-6 use GridNioServer each with different set of selector threads which may result to exceeding the number of cores. Tcp discovery uses blocking socket API. All above mean that we may require many TCP ports opened on nodes. When it comes to some secured environments with firewalls and gathering special permissions to open new ports Ignite installation may become painful. What if we have the only TCP port per node (of course we can still bind all the components to different ports) and single component that encapsulates all the network activities and resource management? All components that need network interaction may register filter chain to the network component and start getting/sending network messages. In other words, I suggest to have a single set of nio-selectors and clean API to install network listeners to satisfy demands of all other components. E.g. discovery, communication and rest will not open their own servers but go to the new NetworkProcessor and setup listeners chain on some ports (possibly on the default one and NetworkProcessor will properly dispatch incoming connections between the components) Current implementation has the following drawbacks that will be fixed by new approach. 1. may require too many ports opened 2. may have selector threads count exceeding number of CPU which may lead to performance degradation. Please share your thoughts or ask questions. --Yakov