There is a Docker in your assumptions
About a decade ago I remember getting a call from a customer that was very upset with RavenDB. They just deployed to production a brand new system, they were ready for high load so they wen with a 32 GB and 16 cores system (which was a lot at the time).
The gist of the issue, RavenDB was using 15% of the CPU and about 3 GB on RAM to serve requests. When I inquired further about how fast it was doing that I got a grudging “a millisecond or three, not more”. I ended the call wondering if I should add a thread that would do nothing but allocate memory and compute primes. That was a long time ago, since the idea of having a thread do crypto mining didn’t occur to me .
This is a funny story, but it shows a real problem. Users really want you to be able to make full use of their system, and one of the design goals for RavenDB has been to do just that. This means making use of as much memory as we can and as much CPU as we need. We did that with an eye toward common production machines, with many GB of memory and cores to spare.
And then came Docker, and suddenly it was the age of the 512MB machine with a single core all over again. That cause… issues for us. In particular, our usual configuration is meant for a much stronger machine, so we now need to also deploy separate configuration for lower end machines. Luckily for us, we were always planning on running on low end hardware, for POS and embedded scenarios, but it is funny to see the resurgence of the small machine in production again.
Comments
I would like to add, that docker workflows force another change, for which RavenDb 4 is not really prepared: Configuration as Code.
When I bring up my docker project from sratch, I expect that I do not need to do anything manually to any container. But with Raven4 that not really possible imo - you have to configure the DBs and certs somewhere (yes, you can configure your master cert, but not the db layout and their certs...) and there is no place to do that. That killed Raven4 for our current project, despite heavy lobbying from me - we don't want to write the intrastructure for that ourselves.
Christian, You can do that, however, quite easily. You just need to provide a custom settings.json file, which contains the already completed setup with everything you need.
Hi Ayende, I'm sorry - but I missed that. I have not seen that option in the Settings Class(es).
Is somewhere an example who does that? e.g.: Database "Test", encrypted with a Certificate "X" (Ideally just derived from the master cert already provided).
Comment preview