A scalable RPC library for Erlang-VM languages using a mailbox-per-node architecture to avoid distributed port congestion.
gen_rpc is a scalable remote procedure call library for Erlang and Elixir applications running on the Erlang Virtual Machine. It solves performance issues in high-traffic distributed systems by using a mailbox-per-node architecture and dedicated TCP connections, preventing bottlenecks in the standard `rpc` library and distributed Erlang ports. The library supports both plain TCP and SSL for secure communication, module version control, and integration with external discovery services.
Erlang and Elixir developers building distributed systems that require high-throughput, low-latency remote procedure calls across multiple nodes, especially in production environments with significant inter-node traffic.
Developers choose gen_rpc over the standard `rpc` library because it eliminates scalability limits by avoiding single-mailbox bottlenecks and distributed port congestion, supports secure SSL communication for global deployments, and offers fine-grained configuration for timeouts and connection management while maintaining full API compatibility.
A scalable RPC library for Erlang-VM based languages
Implements a mailbox-per-node design with dedicated TCP connections per node, preventing mailbox flooding and distributed port congestion as detailed in the Rationale section, enabling high throughput.
Maintains 100% compatibility with the standard `rpc` library's function interface and return values, making migration straightforward without code changes, as stated in the API section.
Provides opinionated, secure SSL defaults with PFS ciphers and CN verification, allowing secure communication over insecure channels for globally distributed systems, as explained in the SSL Configuration.
Offers configurable timeouts for authentication, connection, transmission, and inactivity, optimizing resource usage in production environments, as listed in the Application settings.
Cannot execute anonymous functions shipped over RPC due to Erlang's implementation, a known issue that also affects the standard `rpc` library, limiting certain dynamic use cases.
Requires complex setup for SSL certificates, timeouts, and external discovery, which can be daunting for simple deployments compared to the plug-and-play nature of the built-in `rpc`.
Relies on the hut library for logging, adding an extra dependency and configuration step, whereas native Erlang logging might be simpler for some teams.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.