CSCI 8060 Advanced Software Engineering Spring 2001

Course: CSCI 8060 Advanced Software Engineering
Lecturer: Krys J. Kochut
Text: Distributed Systems: Concepts and Design. Edition 3 by George Coulouris, Jean Dollimore and Tim Kindberg, Addison-Wesley 2001.
Grading: Presentations: 100
Final: 150
Grading Scale: 90% - 100% A
80% - 89% B
70% - 79% C
60% - 69% D
below 60%

In this course we will study advanced techniques of distributed software development. We will begin with introductory discussion of the general design principles of distributed systems and then move on to various specific issues, such as security, fault tolerance, distributed transactions, and many others. The course will include the Unified Modeling Language (UML) as applied to distributed systems design.

A portion of the course will be devoted to programming techniques, geared for distributed systems development. Most likely, the programming projects will be done in Java. We will include a short overview of Java and the relevant JDK classes, including reflection, networking. Tools for component based interoperability (Java Beans, CORBA, XML, etc.) will also be discussed. The projects will be assigned and discussed at a later date. A significant portion of the course work will concentrate on reading research papers in the areas related to distributed systems design and implementation. The students will give short class presentations on the selected papers.

Each student is expected to do his/her own work. All suspected cases of academic dishonesty will be handled in strict accordance with department and university policy. The grade of I (incomplete) is reserved for special cases only, such as a serious illness, and will be decided on individual basis.

Readings for class presentations:

Presentation 1:

  • W. W. Keller and J. Coldewey, "Accessing Relational Databases", Pattern Languages of Program Design 3, Addison-Wesley, 1998, pp. 313-343.

  • Supplemental readings (not mandatory):
  • W. W. Keller and J. Coldewey, "Object/Relational Access Layers," Proceedings of the 3rd European Conference on Pattern Languages of Programming and Computing, 1998.

Presentation 2:

  • D. Schmidt, "Acceptor and Connector", Pattern Languages of Program Design 3, Addison-Wesley, 1998, pp. 191-229.
  • D. Schmidt, "Reactor: An Object Behavioral Pattern for Concurrent Event Demultiplexing and Event Handler Dispatching, " in Pattern Languages of Program Design (J. O. Coplien and D. C. Schmidt, eds.), pp. 529-545, Reading, MA.

Presentation 3:

  • G. Lavender  and D. Schmidt, "Active Object, An object behavioral Pattern for Concurrent Programming," in Pattern Languages of Programming Design 2, Greg Lavender, editor, Addison Wesley, 1995, pp. 483-499.
  •  D. Riehle, W. Siberski, D. Baumer, D.l Megert, and H. Zullighoven., "Serializer", Pattern Languages of Program Design 3, Addison-Wesley, 1998, pp. 293-312.

Presentation 4:

  • I. Pyarali, T. Harrison, and D.C. Schmidt. "Asynchronous Completion Token," in Pattern Languages of Program Design 3, Addison-Wesley, 1998,  pp. 245-260.
  • P. Sommerlad and M. Stal, "The Client-Dispatcher Server," in Pattern Languages of Program Design 2, Addison Wesley, 1995, pp. 475-482.

Presentation 5: Specification and Verification: LOTOS

  • TBA

Presentation 6: Specification of protocols (SDL)

  • TBA

Presentation 7: 

·         L. Lamport "Time, Clocks, and the ordering of events in a distributed system", CACM Vol 21 No. 7, pp. 558-565.

Presentation 8: 

  • K.M. Chandy and L. Lamport, "Distributed Snapshots: determining the global states of distributed systems", ACM Trans. On Computer Systems, Vol 3, No. 1, pp. 63-75.
  • I.C. Garcia and L.E. Buzato, "Progressive Construction of Consistent Global Checkpoints", 19-th IEEE Conf. On Distributed Computing Systems, 1999, pp. 55-62.

Presentation 9: 

  • H. Garcia-Molina, "Elections in Distributed Computer Systems", IEEE Trans. On Computers, vol. C-31, No. 1, 1982, pp. 48-59.

Presentation 10: 

  • L. Lamport, R. Shostak and M. Pease, "The Byzantine Generals Problem", ACM Transactions on Programming Languages and Systems, 4 (3), 1982, pp. 382-401.

Presentation 11:  PGP

  • Alma Whitten and J.D. Tygar, "Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0," in Proceedings of the 8th USENIX Security Symposium, August 1999.
    Supplemental readings (not mandatory):
  • Introduction to Cryptography, Network Associates, Inc., 1999.

Presentation 12: Time Warp

  • TBA

Presentation 13: 

  • R. Ladin, B. Liskov, L. Shirira, and S. Ghemawat, "Providing Availability Using Lazy Replication," ACM Transactions on Computer Systems, 10(4), 1992, pp. 360-91.

Presentation 14: 

  • P. Narashimhan et al., "Providing Support for Survivable CORBA Applications with the Immune System", 19-th IEEE Conf. On Distributed Computing Systems, 1999, pp. 507-516.

Presentation 15: 

  • M. Wiesman et al., "Understanding Replication in Databases and Distributed Systems", 20-th IEEE Conf. On Distributed Computing Systems, pp. 464-474, 2000.
Projects: Programming Project 1 (Warmup) [10 pts]
  1. Implement (in C++) a simple EchoServer that accepts a connection on a given port and then prints the received lines on the standard error stream. Test your program by connecting Web a browser to your server (you may use the standard HTTP protocol:
    If you want, you may send a simple response page to the browser. Remember to output two lines ahead of your simple response page:
       HTTP/1.0 200 OK
       Content-type: text/html
    followed by an empty line, as in:
       cout << "HTTP/1.0 200 OK" << endl;
       cout << "Content-type: text/html" << endl << endl;
    before outputing the text of the response page.
  2. Implement (in C++) a simple page retriever that establishes a connection with a given Web browser (use our in testing) and retrieves the default page from the server, printing out the retrieved lines on the standard error stream.

Homework 1 [10 pts]

Analyze the source code for the multiplexor server, as presented during the class lecture. The code is available on gemini in my home directory (the path is cs8060/net/netsrv).

Write a report in which you will detail the organization and inner-workings of the program. The report should include a discussion and description of:

  1. the architecture,
  2. existing threads of control,
  3. interfacing with the backend program (the legacy application),
  4. handling of client connections,
  5. handling of signals.

You should also present a sequence of events within the system, from the startup time, accepting two client connections, servicing the connection, and then closing the connection, and eventually shutting down the system.

Programming Project 2 (CORBA) [20 pts]

Convert the Polling program (our CORBA example) into the one that uses dynamic invocation only.

Submit (using submit) the directory containing your server. (You should submit it to the user cs8060.)

CSCI 8060 Term Projects (Pick one)

E-Voter system

The system should offer:

Excellent reliability

High availability

Robust security

Absolute integrity

Offer excellent user interface (ease of use)

Allow the election commission to:

Define the election questions with subdivision to national and local sections

Both sections should be definable by contents and presentation

Identify basic problems to tackle and offer solutions

Create a design of an electronic voting system

Chat room

Chat room with (optional) secure communication

The system should offer:

Good reliability

Robust security

Allow the user to:

Selecting a name and join an existing topic (“room”),

Request all of the prior messages for the past 5, 15, 30, 60 minutes

Create a new topic (room), possibly restricting access to a few named users.

Replication for CORBA

Similar to solution proposed in one of the papers presented in class.

Provide a user controlled mechanism for replicating CORBA objects.

A configuration (created dynamically) should specify participating hosts for replication

Objects should be replicated to the specified hosts.

A number of “managers” should control the traffic  

Load balancing for CORBA

Provide a  way to “balance” the objects distributed among a number of participating hosts.  Ask for details of this project.

Name service for Orbacus

The name service should be implemented as a WEB server storing object names

Each object name should be bound to an object reference (IOR)

The user should be able to create directories of names

The user should be able to query the name service and obtain IOR’s.

Date   Topic Presenter(s)
2/21/01 Wed Pres. 1: Accessing Relational Databases Jorge Cardoso
2/22/01 Thu Pres. 2: Acceptor and Connector AND Reactor Zhu X. and Wang, Q.
2/27/01 Tue Pres. 3: Active Object AND Serializer Chandrasekaran and Selvaraj
3/1/01 Thu Pres. 4: Asynchronous Completion Token AND The Client-Dispatcher Chinwala and Malhotra
3/13/01 Tue Pres. 5: Specification and Verification: LOTOS Pan and Zhang, W.
3/15/01 Thu Pres. 6: Specification and Verification: SDL Wang, X. and Zhong, W.
3/21/01 Wed Pres. 7: Time, Clocks..., Lamport ’78 Dhawan
3/22/01 Thu Pres. 8:  Chandy and Lamport '85 AND Garcia and Buzato '99 Sun and Zhu, J.
3/28/01 Wed Pres. 9:  Elections in Distributed Computer Systems, Garcia-Molina ’82 Ji, R.
3/29/01 Thu Pres. 10:  Byzantine Generals Problem; Lamport '82 Huang, J. and Ling, Y.
4/5/01 Thu Pres. 11:  PGP Sipani & Verma
4/11/01 Wed Pres. 12: Time Warp Xiao, H.
4/18/01 Wed Pres. 13:  Survivable CORBA Narasimhan '99 Yi, X.
4/19/01 Thu Pres. 14:  Replication in DB and Distrib. Systems Wiesmann '00 Tao Wu
4/24/01 Tue Pres. 15:  Gossip architecture Ladin ’92 Whetehrly B. and Burte
Exam date: Final May 8, 2001, 12:00 - 3:00 pm