CS340V: Networked Systems for Virtual Worlds

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 sample topics:

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 permissions managed?

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 across objects?

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 they feed)?