Confirm understanding of "Scaling and Performance Tuning with shinyapps.io"

Hi All!

As a consultant for data analysis work, Shiny is a great tool for data products and my clients are looking for solutions that can scale. I currently use the open source Shiny Server to provide prototypes. But, as I am not an IT professional, I struggle to maintain the server infrastructure and provide added value through authentification, scalability and security. Unfortunately, I am not yet at a stage where RStudio Connect is an option for me, but feel confident that shinyapps.io will cover my needs.

I would like to fully understanding scaling and performance tuning of a Shiny application hosted on shinyapps.io under the "standard" and "professional" plan. A detailed description and questions are below.

Thanks for your time.
Lars


My reference articles are:

(1) Scaling and Performance Tuning with shinyapps.io
(2) shinyapps.io user guide - Chapter 3 Applications
(3) RStudio support - How many users can access my application on shinyapps.io at once?

Based on Section "Examples:" in (1), here is my understanding of the maximum number of simultanoues Browser Connections (end users) of a Shiny application:

Standard Plan

  • Number of Instances per app: My choice 3 (the maximum would be 5, based on Table in Section 3.1.3 "Application Instances" of (2))
  • Max Worker Processes per instance: My choice 10 (maximum is 10 based on Section 3.7.1.1 "Max Worker Processes" of (2))

Configuration

  • Max Connections allowed per Worker Process: My choice 50
  • Worker Load Factor: My choice 10%
  • Instance Load Factor: My choice 10%

Results

  • New Worker Process starts at: 6 Browser Connections
    • Calculation: Max 50 of Concurrent connections per worker * Worker Load Factor 50 * 10% = 5
  • New instance starts at: 51 Browser Connections
    • Calculation: Max 50 of connections per worker * Max 10 worker processes * Instance Load Factor 50 * 10 * 10% = 50

Conclusions

The maximum number of simultanous Browser Connections is: 195.

It total is a sum of:

  • Instance 1:
    • 10 Worker Processes, each with 5 Browser Connections = 50.
  • Instance 2:
    • 10 Worker Processes, each with 5 Browser Connections = 50.
  • Instance 3:
    • 10 Worker Processes,
      • 9 with 5 Browser Connections = 45,
      • 1 with 50 Browser Connections = 50.

Questions

Based on the above and assuming that I would expect 100 simultanoues Browser Connections at a maximum, I would always use the maximum number of instances and a low Worker Load Factor to have as little Browser Connections as possible on each Worker Process.

Q1: Are these assumptions above correct?
Q2: Is there something I have missed?

Based on (3), "The default configuration for an application allows 150 simultaneous connections across three workers on a single application instance."

Q3: Is correct that this case is only true of the Worker Load Factor would be set to 100%?

Choosing the professional plan would allow for 10'000 active hours instead of 2'000 in addition to:

  • Number of Instances per app: 10 instead of 5 for standard plan (Section 3.1.3 of (2))
  • Max Worker Processes per instance: 10 (same as standard plan) (Section 3.7.1.1 of (2))

Q4: Is this correct?

1 Like