Building a cloud-hosted platform to manage at-home medical patients with glucose monitors and insulin pumps (hard)
This is a fairly open-ended project and is hard because it expects you and your teammates to do most of the thinking. The challenges associated with using Vsync aren't so huge, but there are hard questions here associated with designing the solution in
First, learn about glucose monitoring and adjustment of insulin pumps. WebMD and the CDC web site are especially good sources for general knowledge about the challenges that arise. Try to write down a set of rules a system could use to control an insulin pump.
Your solution will need help knowing what the patient is eating and will often have to "bolus" a correction does after a meal.
Now design a user interface for the home user of the system. This might be, for example, the patient's mother or father, or the patient's child. The interface will focus on meals, exercise, and other factors such as whether the patient is ill. All of
those can impact the insulin pump settings that are used.
A second interface will be needed for at-home care providers such as nurses who might visit the patient once in a while to confirm that all is well. And a third one may be needed for physicians or nurse-practitioners who will be responsible for changing medications
and long-term pump settings such as the pump's so-called basal dose rate.
Now design the server side of your system. As you'll have seen in the video introduction to Vsync it may make sense to split the server into a database that keeps medical records, and a second distinct monitoring system that keeps one eye on the patient.
Which functionality belongs on each server?
We recommend that you implement your system initially without using Vsync at all, using a RESTful or WCS approach to interface clients to the servers. In effect, each server will be a kind of web service, and the client systems will talk to it via a RESTful
or WCF (Windows Communication Foundation) approach -- REST is more common on Linux and WCF on Windows, but both are very similar. WCF is more easily used for people who program in Windows: Visual Studio has built-in templates for this case, and you'll
end up just replacing a series of TODO comments with your specialized code). But neither is particularly hard to use. You might consider using MySQL for the medical database records.
Finally, explore the value of Vsync in this design. Before implementing anything, ask which aspects of the system could get overloaded if a small team of medical providers (perhaps a small hospital unit) were monitoring and managing a large number of home patients
(e.g. perhaps at a ratio of 1000:1 or more). You will need to think about how to scale your solution out, with multiple servers of each kind, and load-balancing of requests to the servers. Solutions like Amazon.com have this kind of load balancing built in.
If you will do development and testing on a home-brew cluster, just have your client systems randomly bind to one of the set of servers using any simple approach you like -- don't try to be fancy if you do this on your own. For example, if the servers
have computer names from some list, you could have the clients know that list, and pick randomly within it when they connect. Migrating such a solution to EC2, if you decide to do so, would be pretty easy.
Examples of ways Vsync could help include (but these are just ideas to consider -- you need to decide which ones, if any, make sense!)
- With multiple servers, each server can handle 1/n'th of the clients.
- With multiple servers, data can be replicated to allow local handling of reads.
- You can replicate the full database
- You can replicate just the actively in-use data
- You could adopt a sharded approach, replicating only on a shard-by-shard basis.
One question to consider: does the best solution for the monitoring service need to be identical to the one you use for the medical records database? How durable does the monitoring configuration data need to be? How durable does a medical database record need
to be? What about other issues such as loads and real-time properties? Will one or both run in the soft-state tier of the cloud or cluster? Try and justify your thinking in terms of the price of renting the servers you'll need, and the demands of the application
Now you should be in a position to implement your solution using Vsync. See the comments above on the directory server for suggestions about how to do this in a step by step way.