Overview
This assignment is to explore some of the most interesting writings on distributed systems architecture, including:
- Remote Procedure Calls — by Andrew Birrell and Bruce Nelson
- RFC 2616 - the specification for the HTTP Protocol
- Roy Fielding's PhD Thesis, which introduced REST
This assignment is different from most earlier reading assignments: with the exception of core features of RFC 2616 it's not expected that you will understand in complete detail even the assigned sections of these papers. Do NOT drive yourself crazy trying. Learning to get something out of readings that you only partly understand is one of the most impotant things we do in computer science! Do your best, and our in class discussions will fill in much of what you miss.
Like the end-to-end paper, the Birrell and Nelson paper is one of the most famous systems papers of the late 20th century. It defined the concept of Remote Procedure Call (RPC). It's also a more traditional example of a well written research paper, documenting implementation experience as well as theory. Similarly, Roy Fielding's thesis is considered one of the most important writings on Web architecture. It was this thesis that defined the concept of REST, giving a post-facto theory to support HTTP, much as End-to-End did for the Internet.
So, your goal for now is to get some of the highlights of each of these readings. From the Birrell and Nelson paper you should get at least a pretty good idea of what RPC is and why it might be useful. The REST paper tends to be more abstract. Try to get some sense of what issues Roy is exploring as he sets off to define REST.
There are some short questions that you must answer for this assignment, but most of your time will be spent on the reading. The questions themselves are very short (and this written submission counts significantly less than the larger ones like end-to-end).
Assignment
Required reading
Please read the following:
- Implementing Remote Procedure Calls by Andrew Birrell and Bruce Nelson
- Read all of chapter 1 carefully
- Don't worry about chapter 2 unless you're interested
- Try to get the highights of Chapter 3 through the end of the paper
- RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
- Read lightly the beginning through end of chapter 3: this is all useful, but it's very long and has lots of detail you don't need. Just get a general sense of what's in there. Note that 3.2.2. builds on RFC 3986 to define http-scheme URIs in particular
- Read chapters 4-6 pretty carefully. Can you relate this to your experiments with curl? You definitely don't need to understand or memorize all the details here: the idea is to understand in general how RFC 2616 specifies the structure of HTTP
- At the top of the RFC you will now see a note saying Obsoleted by: 7230, 7231, 7232, 7233, 7234, 7235. Indeed, the version of the HTTP 1.1 specification I'm asking you to read
has been replaced.
If you were to read the new ones carefully would find that they clarify lots of details but leave the underlying protocol essentially unchanged. That's what you'd expect: there are millions of machines out there speaking this protocol every day, and it would be very hard to change retroactively.
By all means take a look at the new specifications if you're curious. You'll find that they have been factored into multiple documents, and that many things that had short explanations originally are now spelled out in much more detail. Perhaps this will give you some sense of why my assignment instructions tend to be very detailed too. When you try to build interoperable systems, it's very tempting to write simple and somewhat informal explanations at first. Later you often find that the details matter and have to be spelled out quite carefully even if the results are clumsier to read.
Also, there are now completely new versions like HTTP/2 (RFC 7540) and the still evolving HTTP/3 (https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-34), but HTTP 1.1 remains an active standard and is a good place to start when learning about the Web. The older RFC 2616 is easier to navigate and it was the specification that was in effect for much of the Web's hypergrowth period. It's a classic, so that's why I have assigned it.
- Architectural Styles and the Design of Network-based Software Architectures by Roy Fielding
- There's a lot here, so I'll point you to some chapters out of context. Try to get a feel for how Roy is defining REST in terms of known patterns like client/server, and how it's aimed at meeting the goals of the Web.
- You can mostly skip until the start of chapter 4, but skim a bit to get a sense of what the early chapters cover
- Read more carefully all of Chapter 4, and Chapter 5 up to but not including 5.2.2 (Connectors)
- Read lightly through the end of Chapter 5
Getting the References
All references are available online:
- Implementing Remote Procedure Calls ACM Transactions on Computer Systems (TOCS) Volume 2 Issue 1, February 1984 pp. 39 - 59 ,
- RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 ,
- Architectural Styles and the Design of Network-based Software Architectures ,
Getting the Questions
As usual, questions are provided in an HTML files, copies of which you can download. You must supply your answers by inserting them in the spaces provided in the downloaded HTML file, and when you are done, you must submit your answers using the usual Tufts CS department "provide" command. See instructions below.
For full credit, your file should validate as HTML5 using the official validator for uploaded files. It may not be possible in all cases for the graders to check the validity of every submission, but we reserve the right to do so when we suspect trouble, and to deduct credit for validation failures. You can ignore the warning about "Using experimental feature: HTML5 Conformance Checker"; that's just because the HTML5 validator is still experimental at W3C (because the specification for HTML5 isn't final).
Review questions for this assignment - Download questions for this assignment
Submitting your answers
Download the HTML file with the questions using the link above. Fill in your answers, use your local browser to check formatting, and the HTML validator to make sure your HTML is correct. You may ignore warnings about character encodings. Then use provide to submit:
provide comp117 dist_models distributionquestions.html
Note that comp117 is lowercase; provide will choke if you get that wrong. As always, detailed grading will be done only on your final submission.