Support for horizontal scaling of OpenMRS instances

Welcome! The goal of this project is to make OpenMRS work in a container cluster environment such as Kubernetes with multiple replicas running at the same time to achieve high availability and distribute load.

When working on this project you will learn a lot and be exposed to different aspects of writing scalable applications.

There is a number of improvements that we need to do in openmrs-core to make it happen. Please read the following talk threads to get some background:

  1. https://talk.openmrs.org/t/cluster-and-cloud-support-for-openmrs/42684

  2. https://talk.openmrs.org/t/openmrs-3-in-the-cloud-with-kubernetes-and-helm-charts/44345

  3. https://talk.openmrs.org/t/today-share-your-cloud-hosting-needs-challenges-on-todays-platform-team-call/44334

  4. https://talk.openmrs.org/t/enabling-horizontal-scaling-in-openmrs/44636

There’s an epic in Jira that gathers all the work needed in core: TRUNK-6299: Support for horizontal scalingIn Progress

There’s also work in OpenMRS modules used in O3 that is not captured in the epic, but applies the same principles.

In the scope of the project is:

  1. Adjust codebase across core and O3 modules to use a new storage service.

    1. https://talk.openmrs.org/t/new-storage-service/44655

  2. Adjust code in core and O3 modules to use distributed caching.

  3. Experiment with Hibernate Search using OpenSearch as backend instead of a local Lucene index.

    1. https://talk.openmrs.org/t/distributed-search-for-patients-and-concepts-elasticsearch-or-opensearch/44812

  4. Synchronise startup and DB updates accross replicas: TRUNK-6306: Other replicas should wait until first replica runs DB updatesReady for Work

As you can see the work in core is in progress. The work in modules will follow up changes in core. The exact tasks for GSoC will be determined based on the progress we make in core by the time GSoC 2025 starts.

If you are interested in working on the project please follow the usual GSoC guidelines for applicants here and here, but in particular join discussions on talk around clustering and platform calls.

If you have any general questions about the project please start a talk thread. If you want to discuss something specific to your application please message me privately on talk.

 

Related content