Nbpm - Simplifying Node Name to Port Mapping in Elixir

I grew tired of EPMD and made myself a module that converts node names to ports.

With Nbpm you don’t need EPMD daemon. No additional daemons, no additional configs. Easy and simple distribution without EPMD.

Key Features:

1. No additional daemon required

Does not start EPMD or any other service that needs to listen on any port, so you don’t need to add additional firewall rules to grant access to it.

2. Mix.Release compatibility

Nbpm effortlessly integrates with Mix releases, ensuring smooth production deployments. When you run "your_app remote" or "your_app rpc" commands, Nbpm automatically generates random port assignments, simplifying deployment.

3. Node Name to Port Number Mapping

Nbpm provides flexible methods for mapping node names to port numbers:

  • Last Up to 5 Digits: If your node name ends with digits, Nbpm extracts the last up to 5 digits as the port number. For example, if your node name is “my_node12345,” Nbpm assigns port 12345.
  • Special Prefixes: Node names starting with “rem-” or “rpc-” prompt Nbpm to assign random ports, ensuring compatibility with Mix releases.
  • Hash-Based Port: In the absence of the above conditions, Nbpm employs the :erlang.phash2 function to hash the node name, using the resulting hash as the port number. This approach guarantees consistent name-to-port mappings across different machine architectures and ERTS versions.

If anyone is interested, give it a try:

2 Likes

Version 0.3.0 released.

Added Mix task to get port number from node name.