Medical Training Simulator – Rest API, DevOps, Database Admin
REST for the Weary
I was brought on this project in the early stages of the product, when only a prototype was created. However, I quickly determined that the existing architecture was not sufficient. I made the business case that the front-end and back-end should be developed separately, but in tandem. This allowed a separation of concerns, and easier management of data should we choose to expand beyond a web client in the future.
For this stage, I made the decision to go with a Mongo DB, Express, Angular, Node.JS stack. I determined that MongoDB was the best choice as the data templates that was being generated by the team of doctors we collaborate with was still too turbulent to lock down a traditional schema on a SQL based system.
Oceans to Clouds
Initially, we hosted our system on Digital Ocean, which I configured from a vanilla Ubuntu box. This allowed us to iterate quickly and build the basic foundation to demonstrate the viability of the new stack as recommended by me.
As we grew in functionality, we began to look for a more robust solution in our deploy. More specifically, how to host a staging and production environment, how do we achieve continuous deployment and integration. For this, I determined that Amazon Web Services
For this challenge, I turned to Dockerizing our deployment environment such that Staging and Production is mirrored. I also wrote several custom scripts to allow our deployment to seamlessly be built and deployed upon commits to our version control. After we verified our work on Staging, we would easily promote to Production with one click.
It was a challenging task as there wasn't much of a roadmap as improvising and determining which components would talk to each other. I learned a lot from this experience and I am glad I undertook and overcame the challenge.
I created a simplified architecture diagram to describe all the various components I used to create this robust, scalable solution.
To Infinity and Beyond
Post migration, I continued to make improvements to the cloud stack. Adjustments were made such that downtime was reduced on deployment as I migrated MongoDB to its own service task so it wouldn't need to terminate and restart on each deploy. I improved the Docker Image Repository by introducing more robust tagging such that it is clear which version production and staging is on respectively. I introduced load balancers and SSL redirects such that there is room to grow as we begin obtain more traffic.
In development now is the integration of the system sending