Technical Specifications#
Cloud virtualisation#
The virtual machines created by VISA are built on an OpenStack Cloud instrastructure [1]. OpenStack provides a simple HTTP REST API allowing VISA to manage instances efficiently. A user who requests a new instance will be in general be able to access the instance within a minute of the request being submitted.
Remote Desktops#
Apache Guacamole via XRDP is used to provide the standard Remote Desktop functionality. This has proved efficient and stable over long periods.
WebX, developed at the ILL, binds directly the the X11 session in Linux instances and provides an alternative protocol to Guacamole. WebX optimises CPU and network usage, reducing the effect of latency on a connection and the load on the instance.
Source code#
The source code for VISA is publicly available on GitHub.
The main VISA REST API and Remote Desktop connections are managed by a Java application based on the Quarkus framework.
HTTP requests are proxied to the JupyterLab server running on each instance using a Node.JS HTTP proxy.
The VISA user interface is a single page web applicaiton built using Angular 16.
Database#
A number of different relational databases can be used for the persistence needs of VISA (we recommend however using PostgreSQL).
A Redis server must also be deployed if load balancing is to be used.
ETL (database extraction, transform and load)#
VISA requires data to be injected into the database from each facility. A number of tables contain information related to the instruments, scientific users, proposals and experiments need to be reguraly updated. Support is provided to each site to develop these ETLs, however the maintenance of these processes is the responsibility of the site in question.
Authentication#
Authentication is provided using OpenID Connect. Each site most provide a small amount of code to perform the connection their own SSO.
Deployment#
The full VISA platform is provided as Docker containers. Docker Compose is used as the principal orchestration mechanism.
Load Balancing#
VISA can be fully load balanced on a number of servers by using a simple round-robin reverse proxy in front of them.
As mentioned above, to fully enable load balancing, a Redis server must be available and configured with VISA.