CS 682: Distributed Software Devlopment
Here's the course description from the department handbook:
Prerequisite: CS - 601. Internet application development, including
server-side technologies such as scripting languages, template
frameworks, web page mining, and distributed computing issues such as
peer-to-peer, multi-cast, and distributed agents.
Could you be less specific?
The purpose of this class is to teach you about the technology,
principles, and algorithms needed to develop applications that utilize
or require multiple machines. We'll look both at specific
technologies for inter-machine communication, such as XML, RDF, and SOAP,
and also at algorithms and protocols for use in distributed environments.
What are the course requirements?
You must have satisfactorily completed cs 601 to take this
course. Throughout the course, you'll have a number of programming
assignments, each of which will provide you with some familiarity with
different technologies. You will then combine these piees together
into a larger application (a peer-to-peer client).
You will also have a midterm and a final. More detailed info can be
found on
the syllabus.
What language will be using?
For the most part, I will let you use whatever language you want, as
long as I have some familiarity with it. I will typically present
examples in either Python or Java.
In some cases, there will be one or two languages that are obvious
choices. For example, in working with SOAP, it will make sense to use
a language that has mature SOAP libraries developed. If you want to use
something esoteric (i.e. not Java, Python, Perl, C/C++, or C#) you
should talk to me ahead of time.
What's the class like?
We'll alternate between "lab-style" classes and traditional
lectures. In the lab-style classes, we'll have a short introduction to
some particular technology, followed by time for hands-on work and
interaction. Lectures will be in the more traditional format, and will
be used to cover more theoretical or algorithmic topics.
What will we learn about?
Some of the topics we'll cover are: distributed computing paradigms
(service-oriented, client/server, peer-to-peer), principles of
distributed systems (synchronicity, coherence, fault tolerance),
algorithms for ensuring coherency, liveness, leader election and
replication, distributed objects, discovery and naming systems,
large-scale distributed systems, resource allocation, and
multiagent systems. The
syllabus has a
list of topics.
How is this course different from Professor Pacheco's Parallel and
Distributed Computing (PDC) course or Professor Benson's Graduate OS course?
PDC focuses on tightly coupled processing units. The
assumption is that all of the nodes in a cluster or system have low
communication costs and latency, and are all controlled by the same
individual or organization. This allows you to do fine-grained parallelism.
We will be focusing on larger-scale systems, in which one or more
components may not be in the same organization, city, or even the same
hemisphere. In addition, these systems may not be administered by a
single entity, which leads to a focus on coarse-grained parallelism,
and protocols for effective communication.
Graduate OS will also be dealing with distributed systems and the
operating system functionality needed to provide these sorts of
services. The main difference between this class and graduate OS is
that we will focus our attention on "the transport layer and above."
That is, we will assume that the infrastructure for supporting
communication is already in place, and look at what can be done at the
application level to perform distributed computation.