Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

basic SWIM implementation #30

Closed
kianenigma opened this issue Feb 2, 2017 · 1 comment
Closed

basic SWIM implementation #30

kianenigma opened this issue Feb 2, 2017 · 1 comment

Comments

@kianenigma
Copy link
Member

kianenigma commented Feb 2, 2017

our current ping system is known as heartbeat approach. It's robust but quite overloaded. The basic SWIM has the following properties:

  • an arbitrary node will choose a random ping target (M_i) at each ping period.
    • if the M-i answers successfully, the period ends.
    • if not, the node will choose K random ambassadors for indirect probing. It will send ping-req(M_i) to these K ambassadors. If all of them return a negative response, indicating that M_i is down, M_i will be kicked.
  • if M_i is detected as down, this message will be multicasted to all other nodes.
    • It is an important note that since the failure detection phase is pretty strict, (1 + K nodes must fail to probe a node to mark it as down), this phase is based in trust, meaning that everyone in the system will trust this multicast message and will apply it without any further investigation.

At first sight, our current pingInterval and onPingReceive is enough for this approach. One big drawback is that our current ping messages carry a huge weight (serializedPathTree + nodes). One major step toward being more efficient is to separate these two distinct concerns. In other words, SWIM emphasizes on separating failure detection and update dissemination, in our terminology, it should be the separation of failure detection and update dissemination and service dissemination.

To enhance this even further, it's fair to say that a UDP, or at most TCP packet, is enough for failure detection phase. Hence HTTP is a complete waste of resource and I MUST start implementing the TCP/UDP transport layer.

@kianenigma
Copy link
Member Author

This has been done, will stay open until heavy tests are applied to it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant