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.