COMP 655: Distributed/Operating Systems - Summer 2011
2024-05-05 16:40:28 UTC
Home
Lectures
Assignments
Books, web, tools
 
Turnitin.com
Guidelines
Writing help
Plagiarism
 
DiNo
Glassfish
RESTful client
Menu service
JAX-RS
JAXB
EJB
Java
 
Bulletin board
Contact
 Programming project requirements

Contents

Overview
Domain model
Use cases
Quality attributes
Constraints
Controlled unreality


Overview

Google's Notebook data API (now deprecated) provided access to notebooks. Notebooks are named sets of clippings from web pages. The clippings in a notebook are named, and they can be organized into sections. Notebooks belong to Google accounts. By default they are private, accessible only to the user who created them. The owner can make a notebook public, which makes it accessible to anyone. As an example, Don Swartwout created a public notebook that contains clippings about distributed systems.

You will design and implement DiNo (Distributed Notebook), a distributed server-side implementation of a notebook API inspired by Google's, but much simpler, with update and replication features added.

Omitted features include:

  • Notebook ownership (all notebooks will be public, and writeable by anyone)
  • Notebook authorship
  • Authentication and authorization (not needed since notebooks are un-owned and writeable by anyone)
  • Note titles
  • Sub-dividing notebooks into sections
  • Creation and last-update dates for notebooks and notes
  • Searching within notebooks
  • HTML notes

Back to top


Domain model and rules

  • Every notebook has one primary server
  • Every notebook has zero or more secondary servers
  • A notebook's primary server cannot be a secondary server for that notebook
  • Notebook titles are unique across the DiNo system
  • Notebook IDs are unique across the DiNo system
  • Every notebook must have a title, which must be a character string that begins with a non-whitespace character.
  • Notebook updates must be done through the primary server
  • The primary server is responsible for propagating updates to secondary servers, if any
  • A notebook can be empty (that is, contain no notes)
  • For every note, the content must be non-empty
  • Note IDs are unique across a notebook
  • The content of a note must be a string
  • The content of a note must not contain any XML tags

Back to top


Use cases

  • Create a notebook
    • primary actor: ordinary user (using an ordinary client)
    • main success scenario
      • client requests creation of a notebook and supplies the notebook title
      • system checks that the title is valid and does not already exist
      • system creates the notebook and assigns a notebook id
      • system returns the notebook id to the client
    • major alternative scenarios
      • failure: the title already exists
  • List all notebooks
    • primary actor: ordinary user (using an ordinary client)
    • main success scenario
      • client requests the list of all notebooks
      • system returns the list
  • Add a secondary server for a notebook
    • primary actor: administrator (using an admin client)
    • main success scenario
      • admin client requests creation of a secondary copy and supplies the notebook id
      • the server that receives the request validates the notebook id
      • the server sets up a secondary copy of the notebook
    • major alternative scenarios
      • failure: there is no notebook with the given id
      • failure: the server already has a secondary copy of the notebook
      • failure: the server is the primary server for the notebook
  • Remove a secondary server for a notebook
    • primary actor: administrator (using an admin client)
    • main success scenario
      • admin client requests deletion of a secondary copy and supplies the notebook id
      • the server that receives the request validates the notebook id
      • the server removes its secondary copy of the notebook
    • major alternative scenarios
      • failure: there is no notebook with the given id
      • failure: the server does not have a secondary copy of the notebook
      • failure: the server is the primary server for the notebook
  • Delete a notebook
    • primary actor: administrator (using an admin client)
    • main success scenario
      • admin client requests deletion of a notebook and supplies the notebook id
      • system validates the notebook id
      • system removes all copies of the notebook
    • major alternative scenarios
      • failure: there is no notebook with the given id
  • Create a note
    • primary actor: ordinary user (using an ordinary client)
    • main success scenario
      • client requests creation of a note and supplies the notebook id and note content
      • system validates notebook id and note content
      • system assigns a new note id
      • system creates a new note in the given notebook with the given content and the newly assigned id
      • system adds the new note to the notebook's secondary copies, if any
      • system returns the new note to the client
    • major alternative scenarios
      • failure: there is no notebook with the given id
  • Replace a note's content
    • primary actor: ordinary user (using an ordinary client)
    • main success scenario
      • client requests replacement of a note and supplies the note's URI and revised content
      • system validates note URI and note content
      • system replaces the note's content with the given content
      • system replaces the notes' content in the notebook's secondary copies, if any
    • major alternative scenarios
      • failure: there is no notebook with the given id
      • failure: there is no note in the given notebook with the given note id
  • Delete a note
    • primary actor: ordinary user (using an ordinary client)
    • main success scenario
      • client requests deletion of a note and supplies the note's URI
      • system validates note URI
      • system removes the note from all copies of the notebook
    • major alternative scenarios
      • failure: there is no notebook with the given id
      • failure: there is no note in the given notebook with the given note id

Back to top


Quality attributes

Quality attributes are observable aspects of a system that don't directly correspond to functional requirements. For example, a system's quality attributes include capacity, responsiveness, availability, modifiability, and security. Systems usually meet their functional requirements, but they often fail to provide one or more critical qualities. The table below will be populated with values we brainstorm in class. I will pick compromise values among the proposals from different groups. Some qualities that we brainstorm and discuss in class may be impractical to test in the lab (for example, 99.9% availability). I'll leave such qualities out of this table.

Quality attribute Value for a
real system
Value to be
tested in our lab
Maximum number of notebooks 50M
Concurrent reads 20K
Concurrent writes 5K
Transactions/min 100K
Maximum notebook size 500 notes
Maximum number of DiNo servers 5K
Response time (all request types, not counting network) < 1 sec

Back to top


Constraints

Back to top


Controlled unreality

Class projects have to be do-able in the time available, emphasize the content of the course they belong to and have a reasonable connection with the real world. These constraints mean that projects in 655 resemble real-world distributed systems in some ways, but they are always simplified in one or more flagrantly unrealistic ways, in order to make them fit the time available. Unrealistic aspects of DiNo include

  • no security
  • tiny capacity, compared to a web-scale implementation
  • the architectural constraints (some of these might turn out to be OK in a real implementation, but they are imposed on DiNo to keep installation, integration and grading manageable)

Back to top