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 pieces 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, Ruby, C/C++, or C#) you
should talk to me ahead of time.
Can we use (insert really cool library or
package here) to help with our lab?
Maybe - talk to me on a case-by-case about this. In general, I'd
encourage you to take advantage of third-party packages, as long as
they don't make the lab trivially simple.
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
list of topics.
There's so much reading! Do we really have to do
it, or can we just look at the class slides?
The reading is required and I will expect you to do
it, preferably before the relevant class.
One useful skill I hope to help you pick up in this class is the
ability to quickly scan and synthesize written documentation. You
will not want to read all of this information from front to
back. Instead, you'll want to scan through it, looking for headers
and cues as to the subject matter. Then you'll want to go back and
spend more time on those sections that contain relevant material
that you are not familiar with.
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 also deals 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.