Deploy Tiled for Bluesky#
Option 1. Embedded#
For “first steps”, tutorials, and “embedded” deployments, the
SimpleTiledServer is a good solution. It runs a Tiled server on a background
thread.
from tiled.server import SimpleTiledServer
tiled_server = SimpleTiledServer()
tiled_client = from_uri(tiled_server.uri)
By default, it uses temporary storage. Pass a directory, e.g.
SimpleTiledServer("my_data/") to use persistent storage.
Additionally, if the server needs access to any detector-written files, pass
SimpleTiledServer(readable_storage=["path/to/detector/data"])
Note
The SimpleTiledService does not currently support Tiled’s streaming Websockets
API, but support is planned in a future release of Tiled.
Option 2.Single-process#
Compared to an embedded deployment, this approach isolates the data access tasks to a separate process. It also provides more flexibility.
Quickstart#
Launch Tiled with temporary storage. Optionally set a deterministic API key (the default is random each time you start the server).
And, as above, if the server needs access to any detector-written files, pass
the option -r .... (You can pass -r ... multiple times to declare multiple
paths.)
tiled serve catalog --temp [--api-key secret] [-r path/to/detector/data]
Persistent storage#
To save Bluesky data Tiled needs:
a “catalog” database (e.g. SQLite) for metadata, and
a “storage” database (e.g. DuckDB) for the scalar data from Event documents consolidated in the tabular form.
Launching Tiled with the following command will initialize both databases:
tiled serve catalog --init ./catalog.db -w duckdb://./storage.db [--api-key secret] [-r path/to/detector/data]
If you desire to use the same Tiled instance to upload processed or analyzed
data, it is recommended to also provide Tiled with a writable filesystem
location, -w path/to/uploaded/data, which would be used to save array data (as
Zarr).
To enable the streaming Websockets capability, additionally pass a Redis
connection string such as --cache redis://localhost:6379 or
--cache rediss://username:password@localhost:6380.
Option 3. Containerized and Scalable#
For horizontally scaled deployments, PostgreSQL is currently recommended for both the catalog and storage databases. (Use separate databases! But they can share a PostgreSQL instance.)
At NSLS-II, we deploy Tiled horizontally-scaled in 24 containers load-balanced behind HAproxy.