Benchmark for ocaml-rpc

Hi, I’m thinking of using ocaml-rpc in a distributed database (to replace a currently hacky messaging abstraction).

I have a couple of questions about it though:

  • Has anyone got some benchmark results for it (latency and throughput)?

  • Does it support concurrent outgoing requests?

  • Further than that can incoming request handlers be multi-threaded (or do you need another layer of abstraction)?

I’d probably recommend one of the more modern RPC stacks that are multilanguage interoperable using various interchange formats. For example, https://github.com/mirage/capnp-rpc is maintained and used in infrastructure projects such as the new OCaml-CI infrastructure coming up in https://github.com/ocurrent. The capnp-rpc README files has extensive details on how to try it out.

2 Likes

I agree with @avsm, however ocaml-rpc is deployed in production on XenServer and is still doing its job well. It does also allow to autogenerate an rpc server, ocaml and python library clients, an ocaml cli interface and nice looking documentation from a specification. I don’t think there are public benchmarks though.

2 Likes

Ok will have a look, my main concern was that it would not be the bottleneck (rather the networking overhead would be), with a secondary concern of how well used it is. Thus I was looking at the older and hopefully simpler systems.

That’s very true – I’ve forgotten how much the tooling has improved around ocaml-rpc in recent years! Didn’t mean to besmirch it – simply that the capnp interface is quite shiny in terms of things that a distributed database will probably eventually need (e.g. capabilities). I don’t know enough about what @cjen1 is trying to accomplish with the database to give anything more detailed than that.

1 Like