"Anycast for Any Service"

OASIS

Overlay Anycast Service InfraStructure

•• Project home page
•• Brief overview and news
•• Using OASIS
•• Current deployment
•• Current services
•• Mailing Lists
•• Publications and people
•• Source code

Source Code

No official release for OASIS is yet available, but you are welcome to check out the latest version of OASIS replica code from the CVS repository. This "alpha" version is experimental and under active development.

OASIS is implemented in C++ and is free software, licensed under the GPLv2. We have successfully run this implementation on Linux, OpenBSD, and FreeBSD.

For information about the role of OASIS replicas in the larger system, please see our NSDI '06 paper.

If you are looking to adopt OASIS for your system deployed on PlanetLab, we already run OASIS replicas as a PlanetLab service. Thus, you only need to follow our registration and integration instructions, and do not need to build or run OASIS replicas yourself.

SFS

OASIS requires the async I/O and RPC libraries supplied by SFS. Note that you only need to build SFS in order to link against the libraries it provides. You do not need to run the SFS file system, nor follow its instructions regarding adding an sfs user or group (as this is only required for running the file system). In the future, we hope to provide a version of "SFS lite" directly in our source tree; for now, please download the code from the SFS anon CVS repository.

Obtain SFS as documented at
fs.net. Only use the anonymous CVS repository to get the latest version of SFS. OASIS will not work with the last "released" version of SFS 0.7.2.
   ~> cvs -d :pserver:sfscvs@cvs.fs.net:/cvs login
   CVS password:  press return 
   ~> cvs -z5 -d :pserver:sfscvs@cvs.fs.net:/cvs co -P sfs1
OASIS will not build against older versions of SFS (at least up to 0.7.2). To build SFS you'll need a few tools:
  • GCC 2.95 or 3.x (not 2.96). Support for 4.x is mixed. Please report success/problems/patches.
  • autoconf, automake, etc.
In order to do an "out of place" build, do the following steps. (The SFS build process is documented in depth at the SFS home page). To avoid needing to add the sfs, remove the call to "SFS_USER" in configure.in (line 40). Then, in the sfs source directory:
   ~/sfs1/> ./setup
If your home directory is mounted remotely (such as over NFS), you might want to build the source in some different build directory on your local disk. If you are using a stand-alone workstation, this step is not necessary. From this (optional) build-directory:
   ~/sfs1-bld/> ~/sfs1/configure [--with-dmalloc] 
   ~/sfs1-bld/> make
Certain BSD users may use gmake instead of make. The dmalloc option helps to debug memory issues. It can be downloaded at the dmalloc site.

OASIS

Public anonymous CVS access

OASIS's anonymous CVS repository is updated hourly. To obtain and build the latest source code, make sure that your environment variable CVS_RSH is set to ssh, then do the following.

   ~> cvs -d :pserver:coralcvs@coralcvs.scs.cs.nyu.edu:/cvs login
   CVS password:  press return 
   ~> cvs -z5 -d :pserver:coralcvs@coralcvs.scs.cs.nyu.edu:/cvs co -P oasis

   ~> cd oasis
   ~/oasis> ./setup
   ~/oasis> ./configure [--with-dmalloc] --with-sfs=sfs1-bld 
   ~/oasis> make
As before, configure can be run in a separate build directory if desired. Now you are ready to start playing!


Read/Write CVS access

Getting read/write access requires an account on the SCS file servers, so this route is currently open only to SCS members and affiliates.

First, make sure you are a part of the coraldev group by editing the /etc/group file on ludlow. Now check out the sources from ludlow:

   ~> cvs -d $USER@ludlow.scs.cs.nyu.edu:/disk/u1/coralcvs/ co -P oasis
Then, just follow the same build instructions as for anonymous CVS access.


Running OASIS Replicas

Once you build a OASIS replica, you can launch them via the command:

   ~/oasis> ./service/oasissrv -C ./config.def/oasissrv.conf 
              -V ./config.def/oasissrv.services.conf

Note that you need to execute this command as root (or via sudo) so that the oasissrv can bind a raw socket to perform probing.

Before your run the OASIS replica, however, you need to make some configuration file changes. The source directory includes configuration files in oasis/config.def.

Specifically, in the services configuration file oasissrv.services.conf, you need to include the appropriate information about your local application service to which the replica will be connecting. The following lines are commented '#XXX' in the cvs install. They must be uncommented and set before running:

   KnownService [your_service_name]
   LocalServicePort [port application listens on]
   LocalServiceCode [secret code < MAX_UINT]

In the replica configuration file oasissrv.conf, you need to set the latitude and longitude of the machine on which your replica will be running. (Again the line is currently commented out with '#XXX'.)

   # Latitude should be [-90,90], Longitude [-180,180]
   ServiceNodeCoords [Latitude],[Longitude]
Finally, to connect your replica up with the OASIS core, you must simple uncomment the OASISHostDNSLookup and KnownOASISHost configuration lines in oasissrv.conf.

Please do not attempt to link up your replica to the OASIS core until you finish testing your local application's integration.


Registering your service

You must register your service name with us before attempting to add a new service; otherwise, service registration will fail. To register your service, please contact us.

We will require some additional information from you. As an example, CoralCDN's service policy uses the following:

   KnownService coralcdn
   DomainAlias nyud.net coralcdn
   DomainAlias nyucd.net coralcdn
   SortType latencycap
   MaxAddrRec 2
   MinAddrRec 1
   AddrRecTTL 60

This policy says that CoralCDN wants OASIS to return between 1 and 2 address records per DNS request, each with TTL of 60 seconds, using the "latencycap" policy for server selection. This default policy prefers nodes based on locality, unless the nearer node is overloaded (load >= capacity).

Our NSDI '06 paper describes several techniques to integrate OASIS using its DNS, RPC, or HTTP interfaces; the simplest way is for users to just then issue a DNS query to coralcdn.nyuld.net, using the above example.

OASIS does support aliases, which use longest suffix matching, so users could also issue requests to *.nyud.net given the above configuration (e.g., example.net.nyud.net). To support this aliasing, you simply must point the NS records for your domain (nyud.net, in this example) to OASIS's nameservers. For a list of OASIS's primary nameservers, please see whois nyuld.net.


Integrating your local application

To integrate your local application with the OASIS replica, your application simply needs to listen on a TCP server socket on the configured port (LocalServicePort). Then, when the local OASIS replica connects to your application, simple accept the connection, immediately send the following 12 bytes of data (all in network-byte order), then close the connection.

   struct oasserv_localapp_res {
     u_int32_t srvid;
     u_int32_t load;
     u_int32_t cap;
   };
where srvid is your "secret code", given in oasissrv.services.conf, load is your process's current load, and cap is your process's load capacity. To just "get it working" with OASIS's latency-based server selection, you can always provide a load of 1 and capacity of 10. By default, your application will get such a "keepalive" connection from the OASIS replica once every 15 seconds.

If you are looking to adopt OASIS for your system deployed on PlanetLab, you only need to follow these integration instructions (i.e., listen on a local TCP socket): An OASIS replica is already running on most PlanetLab hosts as a public service we offer the PlanetLab community.


Source code for integrating your local application

While integrating OASIS into your applications really is quite easy, please find below some links to some existing code that might prove useful.

  • Libasync-based C++: For applications also using SFS's libasync libraries, the OASIS CVS repository described above includes the files utils/regapp.[hC] to easily integrate OASIS.

  • SEDA-based Java: The Bamboo Java code for OpenDHT integrates OASIS as a SEDA stage. Please look for src/bamboo/util/Oasis.java in the Bamboo CVS snapshot as of March 3, 2006.

  • Apache module in C: The Na Kika project adopts OASIS as an Apache module for their Apache-based web proxies. Please see here for a tar ball of this mod_oasis, written in C.

If you think the code you write to integrate OASIS into your application may be useful for others (based on your programming language and/or environment), please contact us and we'll add it to this page.


NYU Secure Computer Systems / Project IRIS   ·   7th Floor · 715 Broadway · New York, NY 10003 · USA