From 46d0de6d32fcbe78bde008ff49e0a8bc6926922c Mon Sep 17 00:00:00 2001 From: vinicius douglas cerutti Date: Tue, 28 May 2024 20:16:52 -0300 Subject: [PATCH 1/6] add infra docs and diagrams --- docs/docs/concepts/_category_.json | 8 ++ .../concepts/infrastructure-architecture.mdx | 90 ++++++++++++++++++ docs/static/img/jhub_service_diagram.png | Bin 0 -> 144028 bytes docs/static/img/jhub_single_native_proxy.png | Bin 0 -> 96925 bytes 4 files changed, 98 insertions(+) create mode 100644 docs/docs/concepts/_category_.json create mode 100644 docs/docs/concepts/infrastructure-architecture.mdx create mode 100644 docs/static/img/jhub_service_diagram.png create mode 100644 docs/static/img/jhub_single_native_proxy.png diff --git a/docs/docs/concepts/_category_.json b/docs/docs/concepts/_category_.json new file mode 100644 index 00000000..1b78cbc9 --- /dev/null +++ b/docs/docs/concepts/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Conceptual Overview", + "position": 4, + "link": { + "type": "generated-index", + "description": "Conceptual Overview" + } +} diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx new file mode 100644 index 00000000..791e478f --- /dev/null +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -0,0 +1,90 @@ +--- +sidebar_position: 1 +--- + +# Infrastructure Architecture + +JHub Apps, also known as JupyterHub Apps Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, dashboards such as Panel, Bokeh, Streamlit, standard JupyterLab instances, and any generic Python command. + +The system is built on a FastAPI framework as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup: + +
+```python title="jhub_apps/configuration.py#L42-L5" +c.JupyterHub.services.extend( + [ + { + "name": fast_api_service_name, + "url": f"http://{c.JAppsConfig.hub_host}:10202", + "command": [ + c.JAppsConfig.python_exec, + "-m", + "uvicorn", + "jhub_apps.service.app:app", + "--port=10202", + "--host=0.0.0.0", + f"--workers={c.JAppsConfig.service_workers}", + ], + ... + } + ] +) +``` +
+ +This service operates on the Hub's host at port 10202, with a set number of workers as specified in the `service_workers` configuration parameter. It is accessible to users through the Hub's proxy, which directs requests to this service URL. + +JupyterHub comprises four primary subsystems: + +- a Hub (tornado process) that serves as the core of JupyterHub, +- a configurable http proxy (node-http-proxy) that routes incoming browser requests, +- multiple single-user Jupyter notebook servers (Python/IPython/tornado) managed by Spawners, +- and an authentication module that governs user access. + +Upon its launch, Jhub-apps is integrated into JupyterHub as a new service. This addition modifies the Hub's homepage to feature the service's URL, thereby offering users not only access to other services but also control over spawning different frameworks beyond JupyterLab, like Streamlit and Bokeh, while utilizing JupyterHub's authentication and spawner mechanisms. + +The newly added Jhub-apps service introduces intermediate steps that tailor request routing based on the selected framework: + +- The Hub initiates a proxy, +- Jhub-apps is launched and registered with JupyterHub, +- The proxy initially routes all requests to the Hub, +- Jhub-apps modifies the Hub's homepage to include its URL, extending the service + selection options for users, who can now choose from a variety of frameworks. +- The Hub continues to handle logins and server spawning, +- Jhub-apps adjusts the request handling to direct users to the appropriate single-user server environments based on their selections. + +Below is a diagram illustrating the technical architecture of the JHub Apps service and its interaction with the JupyterHub system: + +## Technical Architecture Diagram +![JHub Apps Architecture](/img/jhub_service_diagram.png) + +Starting from the left of the diagram: +- users engage with the JupyterHub interface via their browsers, logging in through + their preferred OAuth providers (e.g., GitHub, Google). Authenticated users are + redirected to JHub's homepage, where they select and launch the desired service. +- As an external server managed by JHub, the JHub Apps service maintains full access to + JupyterHub’s authentication, authorization, and access controls. As a results, users + still maintain the capability to visit Hub's buil-in pages. +- On the homepage, users can choose the specific framework to deploy as a single-user server. JHub Apps then spawns the selected framework similarly to how JupyterLab is launched. The service redirects users to their individual server instances, where they can interact with the chosen framework. + +## Looking Under the Hood + +Proxies within JupyterHub act as gatekeepers, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. + +Jhub-apps introduces an additional layer of proxy management for custom frameworks, employing the [jhub-single-native](https://github.com/ideonate/jhsingle-native-proxy) to replace the standard jupyter-singleuser with any web service directly. + +Spawners are one of our major focal points in JupyterHub, acting as abstract interfaces to processes. They can +start, monitor, and stop single-user servers, and are responsible for managing the +lifecycle of the user's server. Jhub-apps extends this functionality to support a +variety of frameworks, enabling users to launch different server types beyond +JupyterLab. + +When a user selescts a framework, JHub Apps balances the given requests into to possible +proxies, each one corresponding to a different framework type. For conventional +jupyterlab instances, the request is directed to the standard jupyter-singleuser proxy. +For other frameworks, the request is routed to the jhub-single-native proxy, which +handles the request and launches the appropriate server instance. + +Bellow we can see another diagram that illustrates the interaction between the two +proxies, in a kubernetes environment: + +![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png) diff --git a/docs/static/img/jhub_service_diagram.png b/docs/static/img/jhub_service_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..14219c5bd9ce4a45e8ddf6fae2bda89b49eebbcc GIT binary patch literal 144028 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

oj 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 z

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 J;f*^_{uj1GV734N literal 0 HcmV?d00001 From d95706515116dff1feacf36f1784baaf06ac9f19 Mon Sep 17 00:00:00 2001 From: "Vinicius D. Cerutti" <51954708+viniciusdc@users.noreply.github.com> Date: Tue, 18 Jun 2024 10:34:26 -0300 Subject: [PATCH 2/6] Apply suggestions from code review Co-authored-by: Kim Pevey --- .../concepts/infrastructure-architecture.mdx | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx index 791e478f..00b5dea0 100644 --- a/docs/docs/concepts/infrastructure-architecture.mdx +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -4,7 +4,7 @@ sidebar_position: 1 # Infrastructure Architecture -JHub Apps, also known as JupyterHub Apps Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, dashboards such as Panel, Bokeh, Streamlit, standard JupyterLab instances, and any generic Python command. +JHub Apps, also known as JupyterHub (Jhub) App Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, any generic Python command, standard JupyterLab instances, and dashboards such as Panel, Bokeh, Streamlit. The system is built on a FastAPI framework as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup: @@ -33,14 +33,14 @@ c.JupyterHub.services.extend( This service operates on the Hub's host at port 10202, with a set number of workers as specified in the `service_workers` configuration parameter. It is accessible to users through the Hub's proxy, which directs requests to this service URL. -JupyterHub comprises four primary subsystems: +JupyterHub itself is comprised of four primary subsystems: - a Hub (tornado process) that serves as the core of JupyterHub, - a configurable http proxy (node-http-proxy) that routes incoming browser requests, - multiple single-user Jupyter notebook servers (Python/IPython/tornado) managed by Spawners, - and an authentication module that governs user access. -Upon its launch, Jhub-apps is integrated into JupyterHub as a new service. This addition modifies the Hub's homepage to feature the service's URL, thereby offering users not only access to other services but also control over spawning different frameworks beyond JupyterLab, like Streamlit and Bokeh, while utilizing JupyterHub's authentication and spawner mechanisms. +When JHub Apps is launched, it is integrated into JupyterHub as a new service. This addition modifies the Hub's homepage to feature the service's URL, thereby offering users not only access to other services but also control over spawning different frameworks beyond JupyterLab, like Streamlit and Bokeh, while utilizing JupyterHub's authentication and spawner mechanisms. The newly added Jhub-apps service introduces intermediate steps that tailor request routing based on the selected framework: @@ -52,18 +52,20 @@ The newly added Jhub-apps service introduces intermediate steps that tailor requ - The Hub continues to handle logins and server spawning, - Jhub-apps adjusts the request handling to direct users to the appropriate single-user server environments based on their selections. -Below is a diagram illustrating the technical architecture of the JHub Apps service and its interaction with the JupyterHub system: ## Technical Architecture Diagram + +Below is a diagram illustrating the technical architecture of the JHub Apps service and its interaction with the JupyterHub system: + ![JHub Apps Architecture](/img/jhub_service_diagram.png) Starting from the left of the diagram: -- users engage with the JupyterHub interface via their browsers, logging in through +- Users engage with the JupyterHub interface via their browsers, logging in through their preferred OAuth providers (e.g., GitHub, Google). Authenticated users are redirected to JHub's homepage, where they select and launch the desired service. - As an external server managed by JHub, the JHub Apps service maintains full access to - JupyterHub’s authentication, authorization, and access controls. As a results, users - still maintain the capability to visit Hub's buil-in pages. + JupyterHub’s authentication, authorization, and access controls. As a result, users + still maintain the capability to visit Hub's built-in pages. - On the homepage, users can choose the specific framework to deploy as a single-user server. JHub Apps then spawns the selected framework similarly to how JupyterLab is launched. The service redirects users to their individual server instances, where they can interact with the chosen framework. ## Looking Under the Hood @@ -78,13 +80,15 @@ lifecycle of the user's server. Jhub-apps extends this functionality to support variety of frameworks, enabling users to launch different server types beyond JupyterLab. -When a user selescts a framework, JHub Apps balances the given requests into to possible +When a user selects a framework, JHub Apps balances the given requests into two possible proxies, each one corresponding to a different framework type. For conventional -jupyterlab instances, the request is directed to the standard jupyter-singleuser proxy. -For other frameworks, the request is routed to the jhub-single-native proxy, which +JupyterLab instances, the request is directed to the standard `jupyter-singleuser` proxy. +For other frameworks, the request is routed to the `jhub-single-native` proxy, which handles the request and launches the appropriate server instance. -Bellow we can see another diagram that illustrates the interaction between the two +The diagram below illustrates the interaction between the two proxies, in a kubernetes environment: ![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png) + +:: Insert explanatory text here :: From 818c3a2dd2067fd58669815c4e1ba0f504f093d9 Mon Sep 17 00:00:00 2001 From: viniciusdc Date: Tue, 18 Jun 2024 17:42:39 -0300 Subject: [PATCH 3/6] update and rework the proxying sections --- .../concepts/infrastructure-architecture.mdx | 147 +++++++++++------- docs/static/img/jhub_subsystems.png | Bin 0 -> 44586 bytes 2 files changed, 93 insertions(+), 54 deletions(-) create mode 100644 docs/static/img/jhub_subsystems.png diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx index 00b5dea0..37751a8f 100644 --- a/docs/docs/concepts/infrastructure-architecture.mdx +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -6,52 +6,56 @@ sidebar_position: 1 JHub Apps, also known as JupyterHub (Jhub) App Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, any generic Python command, standard JupyterLab instances, and dashboards such as Panel, Bokeh, Streamlit. -The system is built on a FastAPI framework as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup: - -

- -This service operates on the Hub's host at port 10202, with a set number of workers as specified in the `service_workers` configuration parameter. It is accessible to users through the Hub's proxy, which directs requests to this service URL. - -JupyterHub itself is comprised of four primary subsystems: - -- a Hub (tornado process) that serves as the core of JupyterHub, -- a configurable http proxy (node-http-proxy) that routes incoming browser requests, -- multiple single-user Jupyter notebook servers (Python/IPython/tornado) managed by Spawners, -- and an authentication module that governs user access. +## High Level Overview + +The system is built on a FastAPI framework as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup. + +This service operates on the Hub's host at port [`10202`](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/configuration.py#L56), with a set number of workers as specified in the `service_workers` configuration parameter. + +## JupyterHub subsystems + +Before we dive into the specifics of JHub Apps, it is essential to understand some basic +concepts of JupyterHub's architecture. JupyterHub itself is comprised of four primary subsystems: + +- **Hub** (tornado process) that serves as the core of JupyterHub, +- **Proxy** [configurable http proxy](https://github.com/jupyterhub/configurable-http-proxy) + that dynamically routes incoming browser requests, +- **single-user Jupyter notebook server** (Python/IPython/tornado) managed by [Spawners](https://jupyterhub.readthedocs.io/en/stable/reference/spawners.html#spawners-reference), +- **Authenticator**, an authentication module that governs user access. + +The most critical component of JupyterHub is the Hub, which manages the user's +lifecycle, including authentication, spawning, and routing requests to the appropriate +single-user server. The Hub also serves as the primary entry point for users, providing +a web interface for logging in, selecting services, and launching single-user servers. + +Then there is the configurable http proxy, which acts as a gatekeeper, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. + +Last but not least, the Spawners are abstract interfaces to processes that can start, +monitor, and stop single-user servers. They are responsible for managing the lifecycle +of the user's server, including spawning and stopping the server, as well as monitoring +its status. + +![JupyterHub’s Major subsystems](/img/jhub_subsystems.png) + +For more information on JupyterHub's architecture, please refer to the official +[JupyterHub Technical Overview](https://jupyterhub.readthedocs.io/en/stable/reference/technical-overview.html#) documentation. + +## JHub Apps Integration When JHub Apps is launched, it is integrated into JupyterHub as a new service. This addition modifies the Hub's homepage to feature the service's URL, thereby offering users not only access to other services but also control over spawning different frameworks beyond JupyterLab, like Streamlit and Bokeh, while utilizing JupyterHub's authentication and spawner mechanisms. The newly added Jhub-apps service introduces intermediate steps that tailor request routing based on the selected framework: -- The Hub initiates a proxy, -- Jhub-apps is launched and registered with JupyterHub, -- The proxy initially routes all requests to the Hub, -- Jhub-apps modifies the Hub's homepage to include its URL, extending the service +- The Hub initiates its own proxy server, +- Jhub-apps is launched and registered within JupyterHub as an external service, +- The proxy initially routes all requests to the Hub, while complying with the + extensions and modifications made by Jhub-apps, +- Jhub-apps modifies the Hub's homepage to include its URL (dynamically handled by the + proxy above), as well as extending the service selection options for users, who can now choose from a variety of frameworks. - The Hub continues to handle logins and server spawning, -- Jhub-apps adjusts the request handling to direct users to the appropriate single-user server environments based on their selections. - +- Jhub-apps adjusts the request handling to direct users to the appropriate single-user + server environments based on their selections. ## Technical Architecture Diagram @@ -64,31 +68,66 @@ Starting from the left of the diagram: their preferred OAuth providers (e.g., GitHub, Google). Authenticated users are redirected to JHub's homepage, where they select and launch the desired service. - As an external server managed by JHub, the JHub Apps service maintains full access to - JupyterHub’s authentication, authorization, and access controls. As a result, users + JupyterHub’s endpoint API's: authentication, authorization, and access controls. As a result, users still maintain the capability to visit Hub's built-in pages. - On the homepage, users can choose the specific framework to deploy as a single-user server. JHub Apps then spawns the selected framework similarly to how JupyterLab is launched. The service redirects users to their individual server instances, where they can interact with the chosen framework. +Once a framework is selected it will determined which Spawner and proxy will be +responsible for it. The Spawners will be responsible for granting that the +server instance, it is, the container/kubernetes pod, or any process that will run the chosen +framework, being it a custom web-service or a standard JupyterLab instance is up and +running. The proxy, on the other hand, will be responsible for keeping the access to the +server instance and the user's browser in sync, managing the routing of the requests +between the two. + ## Looking Under the Hood Proxies within JupyterHub act as gatekeepers, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. -Jhub-apps introduces an additional layer of proxy management for custom frameworks, employing the [jhub-single-native](https://github.com/ideonate/jhsingle-native-proxy) to replace the standard jupyter-singleuser with any web service directly. - -Spawners are one of our major focal points in JupyterHub, acting as abstract interfaces to processes. They can -start, monitor, and stop single-user servers, and are responsible for managing the -lifecycle of the user's server. Jhub-apps extends this functionality to support a -variety of frameworks, enabling users to launch different server types beyond -JupyterLab. - When a user selects a framework, JHub Apps balances the given requests into two possible -proxies, each one corresponding to a different framework type. For conventional -JupyterLab instances, the request is directed to the standard `jupyter-singleuser` proxy. -For other frameworks, the request is routed to the `jhub-single-native` proxy, which -handles the request and launches the appropriate server instance. +proxies, each one corresponding to a different framework type: +- For standard JupyterLab instances, the request is only managed by the default +[jupyter-server-proxy](https://github.com/jupyterhub/jupyter-server-proxy), which +launches the JupyterLab instance, under your usual `/lab` URL. +- For other frameworks, an additional proxy layer is launched within the web-service, the +[jhsingle-native-proxy](https://github.com/ideonate/jhsingle-native-proxy), which +works in a similar fashion as the above, but is designed to remove the dependency on the +jupyter notebook and jupyterlab services, while also allowing for a direct connection to the +selected framework (webs service) during its lifecycle. + +Here’s a simplified explanation of the interaction between the two proxies: + +1. **Public Proxy:** + - Acts as a gatekeeper, receiving requests from users trying to access their `/lab` + instances and the usual JupyterHub endpoints. + - This proxy decides where each request should go based on the user's information and routes it accordingly. + +2. **Internal Proxy (jhub-single-native):** + - This internal proxy sits behind the public proxy and handles specific user requests + when a custom framework is selected. + - Similar to the public proxy, it also dynamically updates the available route table + based on the framework selected by giving it a special route endpoint, while also + handling the routing of the web-service's internal endpoints. + - It wraps an arbitrary web application so it can replace the Jupyter notebook + interface, allowing users to work directly with their preferred web services. + +### How does all Work Together? The diagram below illustrates the interaction between the two -proxies, in a kubernetes environment: +proxies, in a kubernetes environment, to grasp the general concept of how the routing is +handled, you can disregard the specifics of the kubernetes environment, such as the +`Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: ![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png) -:: Insert explanatory text here :: +- **Request Handling:** + 1. A user sends a request to access their selected framework through the JHub Apps + home page. + 2. The public proxy receives the request and forwards it to the Jhub Apps service + internally, which then launches the selected web-service through the internal proxy + in a containerized environment. + 3. The internal proxy then ensures that the user’s specific web application is + available and properly set up, by wrapping its execution in a supervised process. + While also handling a socket connection with jupyterhub's internal API for errors + and to keep the heartbeat and the user's session. + 4. The user interacts with their web application as if they were directly connected. diff --git a/docs/static/img/jhub_subsystems.png b/docs/static/img/jhub_subsystems.png new file mode 100644 index 0000000000000000000000000000000000000000..847a885db4f63dcfd3dfb17424c7072e37ef9424 GIT binary patch literal 44586 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 literal 0 HcmV?d00001 From c3ca8fe58a7a742e394e2c3b1cc8de9b71508e3a Mon Sep 17 00:00:00 2001 From: viniciusdc Date: Tue, 18 Jun 2024 18:02:09 -0300 Subject: [PATCH 4/6] fix confusion with proxies names --- .../concepts/infrastructure-architecture.mdx | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx index 37751a8f..dcc505cf 100644 --- a/docs/docs/concepts/infrastructure-architecture.mdx +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -97,26 +97,30 @@ selected framework (webs service) during its lifecycle. Here’s a simplified explanation of the interaction between the two proxies: -1. **Public Proxy:** - - Acts as a gatekeeper, receiving requests from users trying to access their `/lab` - instances and the usual JupyterHub endpoints. +1. **Public Proxy (configurable-http-proxy):** + - Acts as a gatekeeper, for all receiving requests. - This proxy decides where each request should go based on the user's information and routes it accordingly. -2. **Internal Proxy (jhub-single-native):** - - This internal proxy sits behind the public proxy and handles specific user requests - when a custom framework is selected. - - Similar to the public proxy, it also dynamically updates the available route table - based on the framework selected by giving it a special route endpoint, while also - handling the routing of the web-service's internal endpoints. - - It wraps an arbitrary web application so it can replace the Jupyter notebook - interface, allowing users to work directly with their preferred web services. +2. **Internal Proxies:** + - jupyter-server-proxy: + - Jupyter Server Proxy lets you run arbitrary external processes (such as RStudio, + Shiny Server, Syncthing, PostgreSQL, Code Server, etc) alongside your notebook + server and provide authenticated web access to them using a path like /rstudio + next to others like `/lab`. + - jhub-single-native: + - Similar to the public proxy, it also dynamically updates the available route + table, it is, allows a public facing endpoint to be created for the selected + web-service (framework), though its main difference is that it is designed to be + a lightweight proxy, removing the dependency on the jupyter notebook and + jupyterlab services. ### How does all Work Together? -The diagram below illustrates the interaction between the two -proxies, in a kubernetes environment, to grasp the general concept of how the routing is -handled, you can disregard the specifics of the kubernetes environment, such as the -`Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: +The diagram below illustrates the interaction between the two given +proxies (http--jupyter-server-proxy or http--jhub-single-native), in a kubernetes +environment, in the context of JHub Apps. To grasp the general concept of how the +routing is handled, you can disregard the specifics of the kubernetes environment, such +as the `Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: ![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png) @@ -126,6 +130,8 @@ handled, you can disregard the specifics of the kubernetes environment, such as 2. The public proxy receives the request and forwards it to the Jhub Apps service internally, which then launches the selected web-service through the internal proxy in a containerized environment. + - Based on the selected framework, we will end up spawning different proxies, as + explained in the previous paragraph. Though, the overal routing logic is the same. 3. The internal proxy then ensures that the user’s specific web application is available and properly set up, by wrapping its execution in a supervised process. While also handling a socket connection with jupyterhub's internal API for errors From 061d122c36458f22be73183f8911e88279205bcc Mon Sep 17 00:00:00 2001 From: viniciusdc Date: Wed, 3 Jul 2024 13:13:09 -0300 Subject: [PATCH 5/6] add review suggestions --- .../concepts/infrastructure-architecture.mdx | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx index dcc505cf..2205cac4 100644 --- a/docs/docs/concepts/infrastructure-architecture.mdx +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -8,7 +8,7 @@ JHub Apps, also known as JupyterHub (Jhub) App Launcher, is an [Externally-Manag ## High Level Overview -The system is built on a FastAPI framework as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup. +The system is built on a FastAPI as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup. This service operates on the Hub's host at port [`10202`](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/configuration.py#L56), with a set number of workers as specified in the `service_workers` configuration parameter. @@ -42,20 +42,28 @@ For more information on JupyterHub's architecture, please refer to the official ## JHub Apps Integration -When JHub Apps is launched, it is integrated into JupyterHub as a new service. This addition modifies the Hub's homepage to feature the service's URL, thereby offering users not only access to other services but also control over spawning different frameworks beyond JupyterLab, like Streamlit and Bokeh, while utilizing JupyterHub's authentication and spawner mechanisms. - -The newly added Jhub-apps service introduces intermediate steps that tailor request routing based on the selected framework: - -- The Hub initiates its own proxy server, -- Jhub-apps is launched and registered within JupyterHub as an external service, -- The proxy initially routes all requests to the Hub, while complying with the - extensions and modifications made by Jhub-apps, -- Jhub-apps modifies the Hub's homepage to include its URL (dynamically handled by the - proxy above), as well as extending the service - selection options for users, who can now choose from a variety of frameworks. -- The Hub continues to handle logins and server spawning, -- Jhub-apps adjusts the request handling to direct users to the appropriate single-user - server environments based on their selections. +When JHub Apps is launched, it integrates into JupyterHub as a new service. This +integration modifies the Hub's homepage to feature the service's URL, providing users +with access to other services and control over deploying various apps beyond JupyterLab, +such as Streamlit Bokeh, Panel and many others. + +Throughout the following sections, these apps will be referred to as "frameworks," the +main focus of the JHub Apps service. More information on supported frameworks and their +configurations can be found under the [create apps](/docs/category/create-apps) section. + +The newly added JHub Apps service introduces intermediate steps to the JupyterHub +subsystems lifecycle introduced above: + +- The Hub initiates its own proxy server. +- JHub Apps is launched and registered within JupyterHub as an external service. +- The http-proxy initially routes all requests to the Hub, adhering to the extensions and + modifications made by JHub Apps. +- JHub Apps modifies the Hub's homepage to include its URL (dynamically handled by the + proxy), extending the service selection options for users to choose from various + frameworks. +- The Hub continues to manage logins and server spawning. +- JHub Apps adjusts request handling to direct users to the appropriate single-user + server environments based on their framework selections. ## Technical Architecture Diagram @@ -67,25 +75,18 @@ Starting from the left of the diagram: - Users engage with the JupyterHub interface via their browsers, logging in through their preferred OAuth providers (e.g., GitHub, Google). Authenticated users are redirected to JHub's homepage, where they select and launch the desired service. -- As an external server managed by JHub, the JHub Apps service maintains full access to +- As an external service managed by JupyterHub, JHub Apps service maintains full access to JupyterHub’s endpoint API's: authentication, authorization, and access controls. As a result, users still maintain the capability to visit Hub's built-in pages. -- On the homepage, users can choose the specific framework to deploy as a single-user server. JHub Apps then spawns the selected framework similarly to how JupyterLab is launched. The service redirects users to their individual server instances, where they can interact with the chosen framework. - -Once a framework is selected it will determined which Spawner and proxy will be -responsible for it. The Spawners will be responsible for granting that the -server instance, it is, the container/kubernetes pod, or any process that will run the chosen -framework, being it a custom web-service or a standard JupyterLab instance is up and -running. The proxy, on the other hand, will be responsible for keeping the access to the -server instance and the user's browser in sync, managing the routing of the requests -between the two. +- On the homepage, users can choose the specific framework to deploy as a single-user + server. JHub Apps then spawns the selected framework similarly to how JupyterLab is + launched. The service redirects users to their individual server instances, where they + can interact with their deployed application. ## Looking Under the Hood -Proxies within JupyterHub act as gatekeepers, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. - When a user selects a framework, JHub Apps balances the given requests into two possible -proxies, each one corresponding to a different framework type: +proxies, each one corresponding to a different deployment type: - For standard JupyterLab instances, the request is only managed by the default [jupyter-server-proxy](https://github.com/jupyterhub/jupyter-server-proxy), which launches the JupyterLab instance, under your usual `/lab` URL. @@ -99,15 +100,15 @@ Here’s a simplified explanation of the interaction between the two proxies: 1. **Public Proxy (configurable-http-proxy):** - Acts as a gatekeeper, for all receiving requests. - - This proxy decides where each request should go based on the user's information and routes it accordingly. - + - This proxy decides where each request should go based on the user's information and + routes it accordingly. 2. **Internal Proxies:** - - jupyter-server-proxy: + - [jupyter-server-proxy](https://github.com/jupyterhub/jupyter-server-proxy): - Jupyter Server Proxy lets you run arbitrary external processes (such as RStudio, Shiny Server, Syncthing, PostgreSQL, Code Server, etc) alongside your notebook server and provide authenticated web access to them using a path like /rstudio next to others like `/lab`. - - jhub-single-native: + - [jhub-single-native](https://github.com/ideonate/jhsingle-native-proxy): - Similar to the public proxy, it also dynamically updates the available route table, it is, allows a public facing endpoint to be created for the selected web-service (framework), though its main difference is that it is designed to be @@ -116,11 +117,13 @@ Here’s a simplified explanation of the interaction between the two proxies: ### How does all Work Together? -The diagram below illustrates the interaction between the two given +As an example, the diagram below illustrates the interaction between the two given proxies (http--jupyter-server-proxy or http--jhub-single-native), in a kubernetes -environment, in the context of JHub Apps. To grasp the general concept of how the -routing is handled, you can disregard the specifics of the kubernetes environment, such -as the `Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: +environment. + +To grasp the general concept of how the routing is handled, you can disregard the +specifics of the kubernetes environment, such as the `Ingress (Route)`, and `Service +(Proxy-public)` in the diagram bellow: ![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png) @@ -131,9 +134,9 @@ as the `Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: internally, which then launches the selected web-service through the internal proxy in a containerized environment. - Based on the selected framework, we will end up spawning different proxies, as - explained in the previous paragraph. Though, the overal routing logic is the same. + explained in the previous paragraph. Though, the overall routing logic is the same. 3. The internal proxy then ensures that the user’s specific web application is available and properly set up, by wrapping its execution in a supervised process. While also handling a socket connection with jupyterhub's internal API for errors - and to keep the heartbeat and the user's session. + and to keep the heartbeat and the user's session running. 4. The user interacts with their web application as if they were directly connected. From 682d902f953d1cd9644733aedb96b8ac48db0c4d Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Wed, 24 Jul 2024 14:52:44 +0100 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: Kim Pevey --- .../concepts/infrastructure-architecture.mdx | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/docs/concepts/infrastructure-architecture.mdx b/docs/docs/concepts/infrastructure-architecture.mdx index 2205cac4..f2b076fb 100644 --- a/docs/docs/concepts/infrastructure-architecture.mdx +++ b/docs/docs/concepts/infrastructure-architecture.mdx @@ -4,31 +4,31 @@ sidebar_position: 1 # Infrastructure Architecture -JHub Apps, also known as JupyterHub (Jhub) App Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, any generic Python command, standard JupyterLab instances, and dashboards such as Panel, Bokeh, Streamlit. +JHub Apps, also known as JupyterHub (JHub) App Launcher, is an [Externally-Managed JupyterHub service](https://jupyterhub.readthedocs.io/en/stable/reference/services.html#externally-managed-services) designed to enable users to launch various server types including API services, any generic Python command, standard JupyterLab instances, and dashboards such as Panel, Bokeh, and Streamlit. ## High Level Overview -The system is built on a FastAPI as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), managed by the JupyterHub service manager upon startup. +The system is built on FastAPI as detailed in the [services.apps module](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/service/app.py). It initializes and runs through a [Uvicorn](https://www.uvicorn.org/) server (a WSGI HTTP server), and is managed by the JupyterHub service manager upon startup. -This service operates on the Hub's host at port [`10202`](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/configuration.py#L56), with a set number of workers as specified in the `service_workers` configuration parameter. +This service operates on the Hub's host at port [`10202`](https://github.com/nebari-dev/jhub-apps/blob/main/jhub_apps/configuration.py#L56) with a set number of workers as specified in the `service_workers` configuration parameter. ## JupyterHub subsystems Before we dive into the specifics of JHub Apps, it is essential to understand some basic concepts of JupyterHub's architecture. JupyterHub itself is comprised of four primary subsystems: -- **Hub** (tornado process) that serves as the core of JupyterHub, -- **Proxy** [configurable http proxy](https://github.com/jupyterhub/configurable-http-proxy) - that dynamically routes incoming browser requests, -- **single-user Jupyter notebook server** (Python/IPython/tornado) managed by [Spawners](https://jupyterhub.readthedocs.io/en/stable/reference/spawners.html#spawners-reference), -- **Authenticator**, an authentication module that governs user access. +- **Hub** (tornado process) that serves as the core of JupyterHub +- **Proxy** [configurable HTTP proxy](https://github.com/jupyterhub/configurable-http-proxy) + that dynamically routes incoming browser requests +- **single-user Jupyter notebook server** (Python/IPython/tornado) managed by [Spawners](https://jupyterhub.readthedocs.io/en/stable/reference/spawners.html#spawners-reference) +- **Authenticator** an authentication module that governs user access The most critical component of JupyterHub is the Hub, which manages the user's lifecycle, including authentication, spawning, and routing requests to the appropriate single-user server. The Hub also serves as the primary entry point for users, providing a web interface for logging in, selecting services, and launching single-user servers. -Then there is the configurable http proxy, which acts as a gatekeeper, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. +Then there is the configurable HTTP proxy, which acts as a gatekeeper, dynamically updating internal routing to direct traffic efficiently and securely to the appropriate server instance. This setup not only supports default proxies but also allows for custom proxy configurations to manage various external applications seamlessly. Last but not least, the Spawners are abstract interfaces to processes that can start, monitor, and stop single-user servers. They are responsible for managing the lifecycle @@ -122,7 +122,7 @@ proxies (http--jupyter-server-proxy or http--jhub-single-native), in a kubernete environment. To grasp the general concept of how the routing is handled, you can disregard the -specifics of the kubernetes environment, such as the `Ingress (Route)`, and `Service +specifics of the Kubernetes environment, such as the `Ingress (Route)`, and `Service (Proxy-public)` in the diagram bellow: ![JHub Apps Proxy Interaction](/img/jhub_single_native_proxy.png)