Scaling Configuration

This applies to: Visual Data Discovery

When deployed in Kubernetes, Symphony supports both vertical (adding resources) and horizontal (adding pods) scaling.

This topic covers:

Horizontal Autoscaling

By default, the Helm chart comes with horizontal autoscaling disabled. Follow this guide to learn more about Horizontal Pod Autoscaling and how to enable it.

Manual Scaling

If you decide not to enable autoscaling you can still scale the resources/pods manually.

Manual Horizontal Scaling

To set the number of replicas for a Symphony service such as zoomdataWeb do the following:

  1. Add the desired number of replicas to the values.yaml:

    zoomdataWeb:
      replicaCount: 2 # default is 1
  2. Install a new helm chart release or upgrade an existing one.

    Don’t use kubectl to change the number of replicas for Symphony pods. These changes will be overwritten on the next usage of Helm.

Manual Vertical Scaling

Configure each pod’s resource manually in the corresponding block of the values.yaml file, but it's always recommended to prefer horizontal over vertical scaling. Improper change of the resources may lead to application failure on startup or instability during the operation.

Since Symphony consists of a number of Java-based microservices, apart from generic pod resource types (i.e. CPU and memory), Symphony services also expose properties for configuring application JVM memory: heapSizeMin and heapSizeMax. For example, here are the resource-related defaults for the zoomdataWebservice:

zoomdataWeb:  
  # Initial JVM heap size
  heapSizeMin: "4G"
  # Maximum JVM heap size
  heapSizeMax: "4G"
  resources:
    limits:
      memory: "6Gi"
    requests:
      cpu: "3.5"
      memory: "6Gi"

If you decide to customize these properties, please follow these general recommendations:

  1. Memory request and limit should be the same.

  2. Memory request should be at least 25% bigger than JVM's maximum heap size to account for non-heap memory consumed by Java applications.

  3. CPU limit is empty.

Find more information about Symphony and Kubernetes here: Running Symphony in Kubernetes.