Small RavenDB nodes in Kubernetes

123 views
Skip to first unread message

Mario Z.

unread,
Nov 30, 2021, 4:35:57 AM11/30/21
to RavenDB - an awesome database
Hi RavenDB-Team

We are currently moving our infrastructure to Azure Kubernetes Services and are evaluating our RavenDB Pod setup.
Currently, we are using an Infrastructure as a Service environment where we have RavenDB nodes running on Linux. Consider the following:
  • Several dozens of customers 
  • The software consists of several modules which can be activated independently with a database per module (isolated from other customers and other modules)
  • 10 - 500'000 documents (avg. 10'000) in each database
  • Most databases are idle as it isn't a high traffic application with few concurrent users
These ≈500 databases are currently shared between 3 RavenDB nodes (no cluster). For AKS we are considering having one RavenDB Pod for each customer as every customer also gets their own API and frontend Pod. This way all the customer related data and traffic can be easily isolated. Additionally, we think about setting resource limits of 1 vCPU and 1GB - 2GB of RAM for our low traffic customers. The customers known to have higher traffic will get more resources.

Is such a resource constrained RavenDB setup reasonable or is it likely that RavenDB will crash the pod due to its limited (memory) resources? What would be your recommendation for our situation in a Kubernetes environment?

Thanks for your help!

Best regards,
Mario

Georgios Diamantopoulos

unread,
Dec 4, 2021, 3:30:29 AM12/4/21
to RavenDB - an awesome database
Very interested to know too! But wouldnt a quick load test convince us, Mario?

Oren Eini (Ayende Rahien)

unread,
Dec 5, 2021, 5:57:39 AM12/5/21
to rav...@googlegroups.com
Having such a system would work, yes. Given the load you are describing, a single pod should be sufficient. However, what about HA / backups / etc? 
You'll likely need to consider that scenario as well

--
You received this message because you are subscribed to the Google Groups "RavenDB - an awesome database" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ravendb+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ravendb/238c5d9b-8d1a-403d-bb7a-2e834746fa01n%40googlegroups.com.


--
Oren Eini
CEO   /   Hibernating Rhinos LTD
Skype:  ayenderahien
Support:  sup...@ravendb.net
  

georgiosd

unread,
Dec 7, 2021, 3:57:11 AM12/7/21
to RavenDB - an awesome database
Right. So I guess a constrained 3-node cluster is minimum for production.

Oren Eini (Ayende Rahien)

unread,
Dec 7, 2021, 7:51:44 AM12/7/21
to rav...@googlegroups.com
That is the general recommendation, yes

Mario Z.

unread,
Dec 9, 2021, 9:45:33 AM12/9/21
to RavenDB - an awesome database
Thanks for your response(s)!

We've done some (very) quick load testing which went well. For our production environment we'll definitely do some more though. We were mainly curious to hear if RavenDB should be able to work in the described environment so we can invest more time towards this approach.

At the moment we can live without HA. How we configure the backups is still an open question. Is there a way to configure (Server Wide) Tasks with the RavenDB CLI or other configuration methods? I couldn't find anything in the documentation.

Oren Eini (Ayende Rahien)

unread,
Dec 10, 2021, 2:38:42 AM12/10/21
to rav...@googlegroups.com
You can configure server wide backups, yes. There is REST API for that that you can use, but using the client API is probably easier

PUT /admin/configuration/server-wide/backup

Passing this object:


Via API:

var result = await store.Maintenance.Server.SendAsync(new PutServerWideBackupConfigurationOperation(new ServerWideBackupConfiguration
{
FullBackupFrequency = "0 2 * * 0",
AzureSettings = new AzureSettings()
{
AccountKey = "q",
AccountName = "w",
RemoteFolderName = string.Empty,
StorageContainer = "322"
},
FtpSettings = new FtpSettings()
{
Url = string.Empty,
},
GlacierSettings = new GlacierSettings()
{
RemoteFolderName = string.Empty,
AwsAccessKey = "q",
AwsSecretKey = "w"
},
GoogleCloudSettings = new GoogleCloudSettings()
{
RemoteFolderName = string.Empty,
BucketName = "b",
GoogleCredentialsJson = "{}"
},
S3Settings = new S3Settings()
{
RemoteFolderName = string.Empty,
AwsAccessKey = "q",
AwsSecretKey = "w"
}
}));

Mario Z.

unread,
Dec 10, 2021, 4:17:02 AM12/10/21
to RavenDB - an awesome database
Perfect! Thanks a lot for your help!
Reply all
Reply to author
Forward
0 new messages