Since the content of http://vocabulary.odm2.org/ is pretty much a whole pile of static files, only occasionally updated, you might be able to sidestep the scaling issues we saw today by generating a static version of the site for production.
Thanks, @jkreft-usgs! This makes a lot of sense. Specially if we do conclude that the problem we experienced with JupyterHub today was really due to the vocabulary server choking due to concurrent use.
Since the content of http://vocabulary.odm2.org/ is pretty much a whole pile of static files, only occasionally updated, you might be able to sidestep the scaling issues we saw today by generating a static version of the site for production.
https://django-bakery.readthedocs.io/en/latest/