Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

github.com/angelodel01/consistent-hashing-go

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/angelodel01/consistent-hashing-go

  • v0.0.0-20200515194253-fedcaad790d3
  • Source
  • Go
  • Socket score

Version published
Created
Source

consistent-hashing-go

An implementation of consistent hashing on a distributed system in Go note: this readme assumes that you understand consisten hashing as used in Amazon's DynamoDB implementation

Run Program

To run this program simply type

go run con_hash.go

In the terminal and you'll see the logs printing out

Understanding Logs

Adding Nodes

For every add node command you'll see the nodes adding themselves they'll print a log with this format:

Adding node: {id:<node id> hash_1:<first hash> hash_2:<second hash>}

For node virtualization each node hashes itself twice into the hash ring so you can see it's two hashes as well as it's id print in the log format. Example:

Adding node: {id:2 hash_1:7 hash_2:26}

Put Operations

For every put(key, value) command you'll see the nodes pringing the put operation results with this format:

Performing put(key: <key>, value: <value>) hashes to: <hash from key>, got node id: <node id>

Note that for the "hashes to" part is the hash from the key and isn't necessarily the hash of the node as consistent hashing will cause the hash to linearly probe after hashing. Example:

Performing put(key: 'Maria', value: 100) hashes to: 13, got node id: 1

Get Operations

For every get(key) command you'll see the nodes pringing the put operation results with this format:

Performing get(key: <key>) hashes to: <hash of key>, got node id: <node id>

Note that for the "hashes to" part is the hash from the key and isn't necessarily the hash of the node as consistent hashing will cause the hash to linearly probe after hashing. Example:

Performing get(key: 'Tim') hashes to: 5, got node id: 2

Node Death

Just like adding nodes, node death is fairly straight forward you'll see a node receiving and responding to a kill command formatted like this:

Node : <node id> dies

Example:

Node : 0 dies

note: I use the kill command to intentionally kill a node and then perform a get operation afterwards to simulate node death.

Ring Prints

You'll see 2 times that the hash ring itself will be printed, it will simply be an array where non hashed locations are '-1' and hashed locations are the id of the node that hashes there. Example:

Ring [-1 -1 -1 -1 -1 -1 -1 2 3 -1 -1 -1 0 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2 -1 -1 -1 -1 -1 -1 0 4 -1 -1 -1 -1 4 -1 -1 -1 -1 -1 -1 1 -1 -1 -1]

note: Because each physical node hashes to multiple virtual nodes you may see a node id multiple times within the ring. In a larger scale implementation of this there would be many virtual nodes to one physical node.

FAQs

Package last updated on 15 May 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc