Introduction
We want to find the best way to support the Midwest species selector tool. Based on my initial investigation it’s currently hosted on one digital ocean droplet that contains the following tools.
Row crop Vue.js application
Row crop PHP API
MySQL data entry tool Vue.js application
MySQL data entry tool PHP API
Vegetable tool Vue.js application (on the develop server)
Vegetable tool PHP API (on the develop server)
WordPress site
MySQL database that stores data for all of the above(?)
Questions for Juliet
Is there anything else on either server that I’m missing?
How are deployments onto the digital ocean droplets handled? I didn’t see git repositories, how is new code pulled?
How is code deployed from develop to production server?
How is data from MySQL deployed from develop to production?
Are all the tools using the same MySQL installation, databases?
Will the servers startup cleanly after a reboot?
Challenges with supporting the current build
Because there are so many tools on a 1GB memory server, it would be very easy for a high traffic scenario to cause downtime
Because there are so many projects all hosted on one server, it’s easy for bugfixes, deployments, or over utilization of any app to cause downtime for one or more of the tools. When I started looking at how the cover crop row tool is architected, it caused an outage for the MCCC WordPress site even though those tools should be logically independent.
The tech stack is somewhat outdated.
More JavaScript developers are familiar with React.js over Vue.js.
Most entry level developers don’t have PHP experience.
Reduced redundancy
Possible solutions
Rebuild.
Rebuild the tool using the stack that our team is familiar with. Move each service into it’s own server. Move the DB to a managed azure instance to implement further redundancy. Setup CI/CD to handle deployments in a controlled matter.
Pros
Improve the speed of future bug fixes and maintenance.
Maintain independence between the tools and avoid unrelated downtime.
Have automated builds, deployments.
Data will be hosted on a managed instance and much less likely to be corrupted/lost.
Cons
This will likely increase the initial time needed to fix the issues.
Use existing code base
Use existing code base but split into multiple VMS. Make a copy of the current develop server (this step will cause guaranteed downtime, but the timing can be controlled) and then divorce out the tools listed above into their own servers so that they aren’t comingled. Move the DB to a managed azure instance to implement further redundancy. Then update the DNS to point to the new VMs (this step will also cause guaranteed downtime).
Pros
This will allow development of one tool to be independent of the others.
Data will be hosted on a managed instance and much less likely to be corrupted/lost.
Cons
The danger of this solution is that the develop server may not start up cleanly after making a copy. This may prolong the downtime for one or more of the above tools.
Setting up CI/CD will be difficult, deployments will still be manual.
Bug fixes and maintenance will be slower.
Make changes to the live server without divorcing out the tools. This is the most dangerous solution because at any time a change to one tool could cause an outage to one or more of the others.
Pros
May save time assuming no downtime.
Cons
Will likely cause downtime.
Very little redundancy.
The server is undersized for the amount of things on it.
Setting up CI/CD will be difficult, deployments will still be manual.
Data has little redundancy.
Bug fixes and maintenance will be slower.
Add Comment