Projects for students experimenting with high assurance cloud-computing:

This section offers a series of projects, in categories: easy ones where I'll give you templates and more or less step-by-step help, medium difficulty ones where I'll give pointers but less specific help, and bigger things that you would need to tackle more independently. The intent is that eventually I'll run a true MOOC on cloud computing and the students would do these projects online, compare solutions and basically help each other out. For now, email me with any questions!

Directory Service (easy).
Your task is to flesh out the ideas seen in the video demo of Vsyncinto a full-fledged web search solution for a white pages phone service. It should support both lookup in a standard way, with the full name, but also inverse lookups (from phone number to name) and partial name lookups (e.g. perhaps with a first name and a rough idea of the address). Start by watching the video of the Vsync demo. This will really help, so don't attempt the project before you've watched the demo and understood the associated code -- you'll want to build on that code!

Testing your understanding of Ordering (easy).
In the videos, we talked about the pros and cons of the g.OrderedSend+g.Flush approach versus g.SafeSend. This is offered as an easy small project. As we saw in the videos (and you must watch the videos on ordering and other properties), Vsync is unusual in offering a range of ways to implement a given kind of functionality. In the case of data replicated within a group, the system has a fast option for replication within processes hosted on "soft state" machines, and a slower one for processes hosted on machines with "durable" storage.

Test your understanding of Locking (easy).
This project involves an experiment on managing replicated data in a service that uses the g.ReadLock/g.WriteLock API.
This is intended to be a similar project to the g.OrderedSend+g.Flush one. Design an experiment that will let you measure the costs of accessing data in a group with and without locks.

Design and build a fault-tolerant cloud file system with locking and security (medium)
Read about Zookeeper, a popular file system for high-assurance computing. This project builds a similar kind of file system using Vsync as the communications and coordination tool. In fact you could even transform Zookeeper into the suggested solution!

Build a medical computing solution for managing at-home medical patients (hard).
The videos included an example case in which a medical team manages some large number of at-home patients who need online continuous monitoring and case. We'll build a mock-up solution! This is a fairly hard project for a team, and it expects you to do most of the design work.

Build an Air Traffic Control solution (hard)
Air Traffic Control systems are good examples of high assurance systems that can find a solution like Vsync helpful, but on the other hand can't just be implemented directly on Vsync without a lot of thought. We'll describe an approach that was first used by IBM in a system they built for the US FAA in 1995. (Their effort wasn't completely successful, but they didn't know about Vsync!)

A distributed, highly robust stock exchange (medium/hard)
Modern stock exchanges are more and more automated. In the past, the Isis Toolkit was used to build several real exchanges, This project lets you "think with your hands" as you develop a trading platform. It starts with a minimal stock trading solution that isn't very hard, but then suggests some add-on features that would be more challenging to build and test, but would also take your project into the twenty-first century...

Photo caching service for geographically distributed systems (medium)
You'll develop a next-generation photo cache, like the Facebook photo cache (Huang SOSP '13), but extended to allow dynamic capture of photos and to update dynamically so that all cached data accesses return correct, current images.
Read about Facebook image caching at Facebook caching

Routing VOIP telephone calls (medium).
In this project, you'll be designing a smart VOIP routing system that routes 800-number calls to the right place and can operate in a scalable, highly reliable distributed way.
Read about VOIP routing at VOIP Telephony.

Building services for smart building and cities (easy/medium).
Modern cities and even buildings are increasingly "smart". In this project, you'll build high assurance solutions aimed at such settings. For example, you might create a service to monitor traffic loads and pedestrian density in the city, and then dynamically adapt traffic light patterns to optimally reduce congestion. Some of these sub-projects are quite easy; others will require a bit more thought, more
careful design, and will be harder to build and validate.

Information services for self-driving smart vehicles (hard).
What makes it hard to build infrastructure support tools for smart vehicles that need help from the cloud is that navigation for a smart car is a safety critical task. If a car experiences multiple failures, for
example by having a malfunctioning lidar system just when the cloud also gives it
wrong information about its surroundings, it could
steer into oncoming traffic or crash through a storefront.
Your job isn't just to build an infrastructure, but also to quantify its safety properties.

Help make the smart power grid smart (hard).
The goal here is to design an operator's console for a next generation smart power grid, using LDO4GridCloud and Vsync. The goal is to visualize the grid on a large pad or tablet, offer drag-and-drop apps that do power grid computational and analysis tasks, and address the security needs of the setting. You'll build on the existing ldo4gridcloud.codeplex.com and liveobjects.codeplex.com code bases. This is hard partly because there are so many technologies to integrate.

Last edited Nov 19, 2015 at 9:15 PM by birman, version 3