# AnyCable RPC benchmarks AnyCable RPC server benchmarks. The benchmark is pretty simple: - Create N concurrent _clients_ (authenticate and subscribe to `BenchmarkChannel` within the RPC app) - Every client starts performing an action (`echo`) in a loop - Every call is collected (request time) - Wait for the specified amount of seconds and aggragate the results. Measuring **requests per seconds**. **NOTE:** this benchmark shows performance characteristics for both _clients_ and the server. The purpose of this benchmark is to measure the thoughout of RPC connection between AnyCable services. **NOTE 2:** "Noop RPC" is just a gRPC handling doing nothing except from responding with success result. Sources: - [Golang](https://github.com/anycable/anycable-go/blob/chore/benchmarking/cmd/rpc-bench/main.go) - [Erlang](https://github.com/anycable/simple-cable-app/tree/master/benchmarks) ## Erlang single connection RPC type \ Number of clients | 1 | 10 | 50 --------------------------------|------|------|---- AnyCable RPC | 100 | 110 | 130 Noop RPC | 100 | 115 | 125 Erlang client definitely has problems( Looks like HTTP2 streaming is working in _blocking mode_. Requires investigation. ## Erlycable connection pool (5-50) RPC type \ Number of clients | 1 | 10 | 50 --------------------------------|------|------|---- AnyCable RPC | 100 | 800 | 1700 Noop RPC | 100 | 900 | 2700 ## Golang single connection RPC type \ Number of clients | 1 | 10 | 50 --------------------------------|------|------|---- AnyCable RPC | 1600 | 2200 | 2400 Noop RPC with connection object building\* | 2200 | 3500 | 4000 Noop RPC | 3000 | 4600 | 5500 \* Only build Action Cable connection object without performing an action. ## Golang connection pool (5-50) RPC type \ Number of clients | 1 | 10 | 50 --------------------------------|------|------|---- AnyCable RPC | 1400 | 1500 | 1700 Noop RPC | 2100 | 3200 | 4000