Dash Enterprise for Kubernetes
Memory and CPU on the Replicated management node will increase as the users create and use more workspaces on the platform. We recommend that you plan to scale up as usage increases. To monitor usage, configure an external memory & CPU monitor like AWS Cloudwatch, Google Cloud metrics, or Azure Monitor. We recommend setting an alert when the memory usage reaches 70% so that you have time to plan an upgrade or communicate with your user base to optimize their workspace usage.
Memory and CPU on the Kubernetes cluster nodes will increase as the users create and deploy more user-managed services to Dash Enterprise on Kubernetes.
These recommendations are a lower bound of memory and CPU requirements. Your users may require much more memory or CPU, depending on the types of applications they build and viewership. See Behind the Recommendations below for details.
Dash apps, Workspaces, and Job Queues will consume memory while idle and awaiting requests. Depending on the user's code, the memory may or may not be substantially larger than these baseline requirements.
Dash Enterprise Core Services requirements: 4GB
This is the memory required on the Replicated Management node to run Dash Enterprise without any user-created Dash Apps, Workspaces, or Job Queues.
Standard Dash application service requirements:
- Barebones Workspace Container with minimal* data: 1.5G
- Recommended memory expansion factor: 1.5
Minimal data: A dataframe shaped with 10,000 rows & 3 columns loaded into memory with about a dozen pandas operations applied on it. Memory usage will be lower if data isn’t loaded into memory or higher if more data is loaded into memory.
* Consider the Minimal data and the app's stats one "application unit", consider measuring your applications’ resource consumption. The level of detail is up to you. Come up with an application number that you estimate will be hosted on DE and follow this formula:
Memory = 4GB + (Number of applications in application units * 1.5GB * 1.5)
With this data, 5 Dash Snapshots-enabled apps with five workspaces would require:
Memory = 4GB + (5 * 1.5GB * 1.5) = 15.25GB
Dash Enterprise Core Services requirements: 13GB
This is the memory required on each Kubernetes Cluster Worker node to run Dash Enterprise without any user-created Dash Apps, Workspaces, or Job Queues.
Standard Dash application service requirements:
- Barebones Dash App Snapshotting Job Queue Containers with minimal data* running four processes**: 1GB.
- Barebones Job Queue Container (required for Dash Snapshot Engine & updating data in the background): 1GB.
Memory = 14GB + (Number of applications in application units * 2GB)
** Each App is scaled using 4 "Preloaded" gunicorn workers that share memory instead of scaled with containers
Dash apps, Workspaces, and Job Queues will not consume CPU while idle and awaiting requests.
Dash Enterprise Core Services requirements: 6 CPUs
This is the number of CPUs required on each Kubernetes Cluster Worker node to run Dash Enterprise without any user-created Dash Apps, Workspaces, or Job Queues.
Since CPU is shared across the App Manager and all of the applications, the number of CPUs will depend on the maximum number of viewers & users interacting with apps or the App Manager at any given moment and how long the computations in the deployed applications take.
This is difficult to predict, which is why we recommend monitoring CPU usage and scaling up when the CPU exceeds 75% of the machine’s usage.
This will depend on your usage.
For example, if your apps are distributed to 100 people every morning at 9 AM, this may require between 1-10 CPUs. (behind these numbers*)
As a lower bound, consider 1 CPU for every Dash app & 1 CPU for every Workspace + 4 CPU for Dash Enterprise baseline services. Since CPU is shared, higher-traffic apps will use as many idle CPUs as available. If all of your apps and workspaces are in high demand at the same point in time, then you will need to scale this up. Monitoring your CPU usage is the best way forward.
Behind these numbers:
10 CPUs: All 100 people load the web page at the exact same time. The backend requests to load the web page take 3 seconds. The server will timeout after 30 seconds, so you need to serve everyone across 10, 3-second batches. Ten batches, 100 people: 10 CPUs. Some users will wait 27 seconds before seeing the page load.
1 CPU: All 100 people can load the web page evenly across 5 minutes: from 9:00 to 9:05. This allows for 300 seconds (5 minutes) / 3 seconds = 100 3-second batches. A single CPU could process each 3-second request every 3 seconds and service all 100 users after 5 minutes, which is slow, but this shows what a lower bound would look like for the above example.
That said, the minimum requirement for the number of CPUs is 4, but we recommend 8.
- Application docker images are built on the Replicated Management Node before being pushed to the docker registry.
- App metadata and code is stored on the Replicated Management Node's disk.
- Other architectural differences for disk space between DEK and DE Single Server are marginal.