Routing VOIP telephone calls.
This is a somewhat easier project than the last two. If you read Roy Freedman's paper from 1996, you'll see that SS7 telephone systems had routers with attached coprocessors, each consisting of an HPC cluster that would have perhaps 8 or 16 nodes. When
an incoming 800 or 866 telephone call entered the router, the router would switch the call into the cluster, which would need to look up the actual phone number to route the call to, and then return it.
Thus for example you might call 1-800-PIZZASAP and the co-processor would be given a query: from your telephone, 1-607-227-9876 (currently located in the Cornell campus dorm area of Ithaca), you are placing a call to a pizza delivery associated with the nation-wide
chain, Pizza ASAP. It would have a database of pizza delivery trucks for that company, and the job of the co-processor would be to map the 800 number call to the pizza truck closest to the caller. With luck, you reach the truck and order that Pizza Fra Diavolo
with extra hot peppers and double cheese, and the delivery guy is at your door with it in minutes: the truck was parked right next to your dorm. If your friend at the University of Wisconsin made the identical call at the same time, that one would have routed
to a truck near the U Wisc. campus, etc.
Your job, then, is to implement the kind of mechanism Roy describes in his
. As you'll see, Roy worked with a much older version of Isis, but it worked much like Vsync. What he explains is that even though the solution needs a fault-tolerant multicast,
using Isis multicast in that role was a mistake.
Instead, he ends up using the Isis Toolkit to supervise and control his cluster solution, but he routes the actual telephone number mapping requests through the HPC cluster subsystem in a more efficient
way that actually runs mostly over TCP. In effect, he uses Isis to decide who should have a TCP connection to whom, and for other similar roles, but not to carry the actual queries.
However, Roy's paper was written long ago. Your job is to follow his lead but revisit those same questions using Vsync. Is the same architecture the best choice? What if the VOIP calls included client cookie files, rather than just a caller phone number
and a callee number? A cookie file could between 50 kb and perhaps as many as several megabytes in size. Would the need to move these files around impact the best design choices?
Implement a version of the VOIP call router and experiment to discover the ideal design point for a more modern solution of this kind. You'll need to generate synthetic (fake) data to test your code. By routing tens of thousands of calls through it, you
can measure min, max and average performance and even graph error bars, and you can experiment with various request sizes, corresponding to the range from just two phone numbers (two strings of size about 9 characters each) to a few hundred k bytes (e.g. a
substantial cookie). How well can your solution mask failures? Roy has a lot to say about that for his 1996 version... can you do as well as he did?