CS 514 Course Project
This handout is intended to get you started on your CS 514
course project. We’ve
organized it into three parts. The first part concerns our
goals for the project. Whether
you do the suggested topic or invent one of your own, the key
requirement is that your
project must achieve these goals. The second part describes
one idea for possible
projects. You can also come to Paul’s office and look at a
stack of final reports from
last semester’s projects.
You are not required to use our ideas or even the software
tools we suggest that you consider working with.
Ultimately, that is, choice of a project
is up to you. The last part of this handout describes what
you need to hand in, and when.
One thing we mentioned on day one (and on the home page)
but that should be stressed
again is that no extensions will be permitted on these
projects. The basic due date
will be the last day of classes – we’re planning on doing a
sort of project show-and-tell
that day in the CS UG Lab on the third floor of Upson.
CS514 has a posted final date,
and absolutely no work can be handed in beyond that date.
We’ll base your grade
(project and all) on what we have as of the afternoon of
the final day. Projects handed
in late (after the show-and-tell day but by the date of the
final) will be marked down
by five points per week (out of 100 points maximum), so
that handing a project in
after the show and-tell date won’t give the team doing the
project an advantage.
Part I: Our goals
The purpose of your project is to gain hands-on experience
with state of the art
middleware tools (such as C# for .NET, J2EE, Web Services,
ASP.NET, etc – or Linux,
CORBA, C++ if you prefer that sort of platform) and to use
them in a setting similar to
the kinds of things many people will be doing in the coming
decade or so in industry. In
addition, the project is a chance to learn practical skills
from online learning resources
and demos, and also to learn to work in a small team if you
opt to do so (teams of two or
three are encouraged but certainly not required). The CSUG
lab is available to you for
your work, but you can work on other platforms using other
software as long as we can
see a demo without taking a long hike to your dorm room on
the show-and-tell day.
The project needs to reflect the themes of this course. Up
to now, those themes have
been somewhat high level – gaining familiarity with the
major components of a
technology like Web Services or the major elements of an
Internet application. But the
remainder of the course will dive down into much more
detail in some specific areas
where we see a lot of value. For example, you’ll learn much
more about fault-tolerance
and replicating data or services than you ever wanted to
know! We expect that projects
will draw on this knowledge in interesting ways – not
blindly, but that you’ll think hard
about how to use some of these ideas to overcome specific
issues that arise in real
systems. If you can use these same tricks in a job two
years from now, CS 514 will have
been a big success in our eyes.
Part II: Some suggestions for possible projects
In fact, we are pretty flexible about what we’ll accept –
look at some of the older course
web sites or the stack in Paul’s office for additional
ideas. But here is one idea:
Adding Better Fault Tolerance Support for Web Services. As you know, if a
client has a timeout or other problem in a Web Services
setting, failing over to a
backup can be a challenge. It isn’t obvious how to find
that backup (in a naming
sense), how to force Web Services to rebind to it, or how
to resynchronize so that
the user won’t see a perceptible disruption – e.g. you
don’t want an air traffic
system to forget about a command that was supposedly
accepted by the system
before the fail-over, or to behave inconsistently. Our idea
is to have you build a
solution to these problems and to evaluate the performance
and scalability of the
resulting system.
Here’s what we want you to do. This may sound “high level”
but we don’t plan
to give more detail. Working out the details will be part
of your job.
Using a Web Services technology – J2EE or the ASP.NET
template from
Visual C# .NET – build a simple client-server application
that can somehow
demonstrate basic features of a Web Services architecture.
You might want to
build a fake air traffic control system to make it look
more realistic. The server in
that case would keep track of airplane flight plans and
trajectories. You don’t
need to have a real database behind the server, but if you
feel like doing so,
ASP.NET includes a simple way to use MS SQL Server for this
purpose. If not,
your Web Server program should have a data structure of its
own.
Measure the performance and scalability of your solution.
How fast is it, and how
is it impacted when more and more clients connect to the
server? Can you
estimate the maximum load it could achieve? Where do the
bottlenecks seem to
be? Could caching or other tricks speed it up?
Next, we would like you to implement a fault-tolerance
mechanism. On the
server side, you’ll want to change your server to run in a
group configuration with
2 or more servers in a group (ideally the group size could
be varied depending on
load). Think about the pros and cons of load-balancing
clients over this group.
How could that be done? Which approach would work best?
Now, we want you to extend the server so that the state it
maintains is replicated
among its instances – e.g. the MS SQL server data has to be
visible to many
servers or the actual data managed needs to be replicated.
If you make MS SQL
server data available to many Web Servers is it better to
have multiple instances
of MS SQL server, or to have one instance that several
front-ends can access?
Keep in mind that a system like an air traffic control console
needs 24x365
continuous uptime. Ten minute pauses to reboot SQL Server
would be extremely
dangerous!
You could implement your own data replication mechanism,
but if so it needs to
be fault-tolerant. Alternatively, you can download the
Cornell Ensemble package
or some other package such as JavaGroups from the web.
These will do data
replication and fault handling for you. There are many such
packages available,
including the ones mentioned, Eternal (a package for
CORBA), Spread (one for C
applications developed at John Hopkins University) and
others. If you go this
route, factor in two weeks or so to get the hang of using
the package you decide to
employ and for figuring out how to integrate your Web
Services system with the
package! If you build your own solution, of course, that
will take a few weeks
too. So don’t delay this stage of your project or you are
certain to end up with a
lame result and a low grade.
Finally, implement a client “fail-over” mechanism that
resynchronizes with the
servers and reissues any pending operation if one was
underway at the time of a
failure. We do not require that you support fail-over in
the middle of a Web
Services transaction but if you can pull that off, we’ll be
very impressed.
That’s it for implementation. Beyond this we want you to
evaluate the scalability
and performance and bottlenecks of the modified system and
prepare a simple
poster-style presentation for the demo day explaining what
you did, how it
worked before the replication mechanism was added and how
it worked
afterwards. During the demo, you should try and impress us
with the scalability,
speed and quick failover capabilities of your solution. All
group members should
be able to answer questions about any aspect of the
solution. All should have
written comparable amounts of code, and comparable
difficulty. You’ll also be
handing in a very short project summary that we can reread
offline.
People doing this as an MEng project are expected to do
more than a minimal
solution. A person working by themselves and just for CS514
might get
maximum credit for a considerably less ambitious “bare
bones” solution.
Part III: Handing stuff in.
You’ll be handing things in at the end of each of four
stages. On 9/19 we expect
you to hand in a project plan describing the project you
have decided to tackle
and laying out a timeline (.doc, .html)
for doing it. You must use the timeline
provided (honestly in part for our own grading convenience,
but in fact it is
a reasonable style of timeline and it will help your
project. If you insist on
using your own project management tools with their own
timeline styles, that’s
ok but you’ll still have to fill in this timeline).
In addition to the timeline, the project description must
of course state the team
members, and whether you are doing this for MEng
credit.
You should use this timeline to manage your project and
make sure you are
meeting your goals.
However, on 10/10 and 11/10, you must hand in very
brief status reports that include the timeline with the
“percentage completed”
dates filled in.
All of these handins count as homework.
CS514 homework
will diminish later in the class and we expect you to be
hard at work on your
project in the second half of the semester. If you slip on
your schedule and need
to reduce functionality, your status report should
summarize the issues and what
you plan to do.
(The ideal status report will have no slip, and so will consist
only of the single-page timeline. Few if any of you will actually manage to do
this, and if you manage your slippage well and still come
out with a decent project
compared to the other projects, the slippage won’t even
count against you.)
On the last day of classes we’ll hold our show-and-tell.
For that, bring a poster (Kinko’s
can help you make it, or just print things and paste them
on a suitable poster board)
showing the architecture of your overall system (one of
those pictures with lots of boxes
and arrows), a brief high level summary of the capabilities
you focused on and the tools
used. For the fault tolerant web services project, show
performance before and after the
replication and fault-tolerance mechanism was introduced. A
fancier report might drill
down to identify critical paths, show scalability in an
elegant way, etc. Please print
(black and white) the same material with the names of all
group members clearly shown
on page one and hand this in, with an additional one or two
pages of written material
covering what you will be presenting orally during the
show-and-tell. This should
summarize what you set out to do, what you actually did,
and how well things worked
out.
HELP! Who will teach me C#? Where are the documentation
books?
C# first. As noted early in the course, this is an advanced
course for people with a great
deal of background from courses like CS314 and CS414. We
assume that you are
already a strong programmer in C, C++, Java or some similar
language. The Visual
C# Web Services project will require learning new stuff,
though.
Since C# and Java are so similar, if you know Java this
transition will be easy. If you are
a C or C++ programmer the issues are perhaps a bit more
subtle. If you don’t know any
sort of object-oriented language, however, it may be hard
to learn C# fast enough to
become reasonably productive on .NET so start early or work
in some other language that
you know better. A project can be done in LISP, Fortran,
Python, Tcl/Tk, Visual Basic,
O’CaML or anything you like. In fact, many of these are
even supported in .NET!
Cornell has many online resources for learning C# built
right into Visual C# .NET. You
can also buy printed materials in the Cornell bookstore,
but you probably can do
everything without opening a single book if you stick to
our suggested projects.
For a person with reasonable background these will be
adequate to jump in and, after a
few bumps and groans, you should be able to do anything.
Start Visual C# for .NET, tell
it to create a new project, select the “windows forms”
template and begin playing with it
– eventually, this can become your client application. We
suggest that you begin with an
application that displays “Hello World” in a pop-up dialog
box that the user can dismiss
by clicking OK. (Hint: This specific Hello World
application is actually included in the
help materials and isn’t hard to find). As you get
comfortable you may want to think
about having multiple forms (multiple windows), threads,
etc.
To build the server you’ll use the ASP.NET template.
ASP.NET has a tutorial for
building a simple Web Service. Follow the instructions for
doing one of the demo
projects and then build your way “out” by modifying it into
what you need for the course.
If you are completely unable to write code and unable to
teach yourself some sort of
language, we aren’t going to be able to help very much. It
just isn’t the role of CS514 to
teach introductory programming, even in this new language
and new system. On the
other hand, if you do dive in and then get stuck, go to the
class news group first, and if
that doesn’t work go to Saikat..