The coursework focus of CS340V is a research project of publishable quality.
Each project should have a group of 2-3 students; while solitary projects
are possible, groups are strongly encouraged. Each group is responsible
for proposing a project in the third week of the quarter. Here are eight
Proximity Manager/Query Processor: Within a virtual world,
objects need to be able to learn and maintain what relevant objects
are around them. This relevance can pertain to distance (e.g., a proximity
detector that automatically opens a door) as well as
the size of the object (you can see Godzilla from much further away than
a mouse). How do objects query this information, what are the formats
of these queries, how does a proximity manager maintain this information
and how does a query processor answer queries? The query processor and
proximity manager both need to be distributable, as not all objects
might fit on a single host. Given an object, where is its information
stored, given a query, whom do you ask, and how does object information
move across servers?
Object Store: Objects need a persistent, non-volatile backing store
for their state. This backing store needs transactional semantics, as some
object operations involve financially relevant exchanges. What is the interface
to this backing store, and what semantics does it provide? It will encompass
many hosts, so how is object state spread across those hosts, and how can
replication improve reliability, performance, and load balancing? Logging
is critical, not only for correctness but also for historical inspection:
what is the lifetime of these logs? How are the stored? How are access
Object Host: Objects need a computational environment for their
active execution. What is the system architecture and execution environment
for objects? How do objects migrate? What is the migration granularity?
Objects in tight communication may benefit from being co-located physically,
and objects that are close in virtual distance are more likely to communicate
than those that are not: how does object placement relate to proximity
management? Users may need policies controlling migration: a company does not
want its objects migrating to another company's server. How are these policies
specified and enforced?
Space: An address space (3-dimensional coordinate space) is an
administrative domain that controls what objects are within it and where they
are. It needs to maintain and update this information, as well as provide
a query processor. How do spaces and object hosts communicate? What routing
strategies and traffic policies does a space institute? Could a space
take advantage of a highly parallel processor to better support physics
or collision detection, and if so, would a domain specific language help?
How do objects join and leave spaces, and how does a space manage resources
Scalable audio: An immersive virtual world needs realistic audio,
where objects hear sounds mixed based on their position. How would one
distribute this mixing to reduce its complexity from the product of the number of
inputs and outputs? Would using some kind of hiearchy work, and would it be
on inputs or outputs? For example, all of the sounds on a street might just
be a din to someone far away.
Object scripting language: What would an effective and useful object
scripting language look like? Should messages be explicit or implicit? How
are transactions handled, especially across objects? Are the transactions
implicit or explicit? What concurrency model is exposed? Does the language
reflect the cost of different operations (e.g., read vs. write)? What
consistency semantics do remote fields have?
Communication: "Last reliable," where the last datagram sent will
be delivered reliably, is a useful primitive for idempotent and self-contained
updates. Add such a primitive to structured streams. Note some of the difficulties
DCCP encountered in what seem like simple efforts.
Content-distribution network: While many objects are active state,
whose access is governed by address spaces, virtual worlds also require
large pieces of content that are more globally accessible, such as meshes
and textures. This data can be delivered through a separate content-distribution
network, which might use a variety of mechanisms, such as torrents, distributed
hash tables, or something more application specific. What do access patterns
look like? Are they zipf? Would installing caches and proxies help, e.g., for
multicast-unicast transformations? How much might centralized knowledge of
the world state itself help distribution (e.g., how seeds weight the torrents