Beitragsbild_Shiny_Apps_skalieren

Shiny Apps skalieren @DataUniversity2019

Lea Waniek Blog

Vom 09.-10. Oktober präsentieren wir von STATWORX gemeinsam mit BARC die Data University an der Goethe-Uni in Frankfurt. 2 Tage lang werden wir dort unser geballtes Data Science Wissen in praxisorientierten Workshops an die Teilnehmenden weitergeben.

In zwei besonders spannenden Workshops von unserem Kollegen David dreht sich am zweiten Schulungstag alles um das R Paket Shiny. Vormittags wird es eine “Einführung in Shiny Apps” geben. Nachmittags geht es in einer zweiten Session mit dem etwas komplexeren Thema “Shiny Apps skalieren” weiter.

Eine kleine, einfache Shiny App zu bauen, ist recht leicht:

require(shiny)
require(argonDash)

# UI
ui <- argonDashPage(

    # Header -----------------------------------------------------------------
   header = argonDashHeader(tags$img(src = "https://www.data-university.de/wp-content/uploads/2019/06/logo-data-university-weiss-small.png"),
                            background_img = "https://www.data-university.de/wp-content/uploads/2019/04/data-university-header-1.jpg",
                            separator = TRUE,
                            height = 400,
                            mask = TRUE,
                            opacity = 1),
   
   
   # Body --------------------------------------------------------------------
   body =  argonDashBody(
       
           fluidPage(
           
           tags$style(HTML("a{color: #124D71; font-size: 150%;}
                            a:hover{color: #69D0D0;}
                            h1{color: #69D0D0; font-size: 250%;}")),
           
           fluidRow(column(width = 8,
                           tagList(
                               br(),
                               br(),
                               htmlOutput("hi")
                          )
                    ),
                   
                    column(width = 3,
                           align = "right",
                           br(),
                           
                           textInput("text",
                                     label ="",
                                     value = "Wie heißt du?"),

                           actionButton("goButton", "OK!"))
                    )
          )
          )
)

# Simple server logic
server <- function(input, output) {
   
   observeEvent(input$goButton, {
       
       your_name <- ifelse(isolate(input$text) == "Wie heißt du?",
                           "",
                           paste(" ", isolate(input$text)))
   
       output$hi <- renderText({ paste0("<h1> Hi",
                                       your_name,
                                       ", werde Teil der Data University! </h1> </br>
                                       <a href='https://www.data-university.de/tickets/'> Aber klar doch - klick !-</a>")
                      })
      })
}

# Run the app
shinyApp(ui = ui, server = server)

Wie du siehst, kannst du mit Shiny in wenigen Code-Zeilen bereits ein schönes Frontend bauen. Wenn du diesen Code ausführst, sieht das Ergebnis folgendermaßen aus:

Screenshot-ShinyApp

Schwieriger (und mitunter kostspielig!) wird es erst, wenn eine fertige App effizient und zuverlässig einem breiteren Publikum zugänglich gemacht werden soll. Doch um das ganze Potenzial von Shiny auszuschöpfen, ist ein Deployment für eine größere Zahl von Usern, also die Skalierung einer App, unerlässlich.

Warum Shiny?

App-Entwicklung in R

Shiny ermöglicht es, interaktive Web-Applikationen direkt mit R zu entwickeln. Der umfangreiche Funktionsumfang von R kann so ganz leicht mit einer interaktiven Benutzeroberfläche verbunden werden. Beispielsweise können Data Scientists in R, mit Hilfe von Shiny, Modelle direkt in interaktive Nutzeranwendungen einbinden, ganz ohne die Hilfe von Web Developern oder die Verwendung proprietärer BI-Tools. Aber die mit Shiny umsetzbaren Funktionalitäten gehen weit über bloßes Dashboarding hinaus.

Völlige Flexibilität in der Nutzung von Webtechnologien

Um eine Shiny-App zu entwickeln, sind absolut keine Web Development-Skills notwendig. Allerdings können Shiny-Apps nach Belieben mit gängigen Webtechnologien wie HTML5, CSS oder JavaScript kombiniert werden. Diese Tools erlauben es, die Funktionalitäten und das Styling von Shiny-Apps beliebig zu erweitern oder zu individualisieren.

Vor allem im Enterprise-Kontext ist die Entwicklung einer Shiny-App nur die halbe Miete, denn erst Deployment und Skalierung ermöglichen einer größeren Anzahl an Usern die professionelle Nutzung einer App, ganz ohne lokale Kopien von RStudio, Code- oder Datenfiles.

Skalierung von Shiny-Apps

Kommerziell: Shiny Server Pro & Shinyapps.io

RStudio’s Shiny Server Pro ist ein kommerzielles Produkt für das komfortable On-Premises Deployment. Der Shiny Server Pro ermöglicht die einfache Skalierung von Shiny-Apps und bietet Tools für einfaches Load Balancing sowie User Management, und bietet Unterstützung für Maintenance und die Konfiguration der Server.

RStudio bietet mit Shinyapps.io zudem eine allumfassende Cloud-Lösung für Deployment und Skalierung von Shiy-Apps an. Hier übernimmt RStudio das komplette Deployment inklusive Skalierung, Security und Infrastruktur. (Auch RStudio Connect )

Natürlich sind diese Lösungen mitunter relativ kostenintensiv.

Open-Source: ShinyProxy

Neben der Nutzung kommerzieller Produkte sind auch andere Deployment Lösungen möglich. Hierzu zählt insbesondere der ShinyProxy, der ähnlich wie der Shiny Server Pro grundlegende Enterprise-Funktionalitäten wie Authentifizierung und Skalierung bereitstellt, allerdings auf Basis von Open Source Technologien. Unter anderem die Server Konfiguration, Sicherheit, und das Serving von containerten Shiny-Apps liegen hier ganz in der Verantwortung – aber auch Kontrolle! – jedes Data Engineers selbst.

Join us @DataUniversity2019 !

Natürlich ist das Aufsetzen eines ShinyProxy nicht ganz trivial, aber komm doch einfach zur Data University und lerne mit uns hands-on, wie du deinen eigenen Shiny Proxy Server aufsetzen kannst!

Stelle dir auf der Homepage der Data University deinen persönlichen Stundenplan aus 24 Intensivkursen zusammen und erweitere Deinen Blickwinkel auf die Themen Data Strategy, Data Engineering, Data Science und Data Technology. Wir freuen uns auf dich!

Über den Autor
Lea Waniek

Lea Waniek

I am a data scientist at STATWORX, apart from machine learning, I love to play around with RMarkdown and ggplot2, making data science beautiful inside and out.

ABOUT US


STATWORX
is a consulting company for data science, statistics, machine learning and artificial intelligence located in Frankfurt, Zurich and Vienna. Sign up for our NEWSLETTER and receive reads and treats from the world of data science and AI. If you have questions or suggestions, please write us an e-mail addressed to blog(at)statworx.com.