The Ursa Project Dota Hero

Ursa is a famous hero in DOTA with impressive attack/defense abilities, representing our block store's ultra high I/O performance (including IOPS, latency, and throughput), reliability, scalability, and availability.


Overview

URSA is an ultra fast, reliable, scalable and available block store that provides block storage both for our cloud (one of the largest O2O platforms in the world) and for various third-party applications such as online booking, gaming, and data analytics. In production environments like our cloud that is implemented on top of thousands of commodity servers, we face challenges not only in satisfying requirements on performance, reliability, scalability and availability, but also in handling operational issues such as component upgrade and software fault tolerance.

URSA's virtual disks, which can be mounted like normal physical ones, enable cloud-oblivious POSIX applications to run efficiently in VMs that reside on our cloud servers. For durability, URSA supports both replication and erasure coding (EC) at the backend of its virtual disks. URSA explores different points in the design space including structure, parallelism, and consistency both for replication and for EC.

Although the policy restricts us from releasing the full system, we are concentrating on releasing more individual components.

1. st-pio: It encapsulates libaio, and convert the event-driven model to a synchronous model. It provides the user a set of interface similar to pread/pwrite. It is based on the state threads library.

2. st-redis: It encapsulates the asynchronous interface of hiredis, and convert the event-driven model to a synchronous model. It provides the user a set of interface similar to that of synchronous hiredis. It is based on the state threads library.

3. Logging lib: Light-weight logging library that supports dyanmic configuration reloading, based on signals.

4. crc32: Ultra high-performance CRC32 caculation library for a sequence 4KB blocks, as well as variable length blocks. It achieves about 10GB/s on a single core for 4KB blocks, by combining the following optimizations: (1)SSE instructions, (2) loop unrolling, (3) block scheduling to exploit more instruction-level parallelism.

5. Testing scripts: See README.md in the zip file for details.

Downloads

Download URSA's individual components.

Funding

Contact us

We welcome feedback, suggestions, patches, and so forth. Send them to ...


Last modified: 22 Apr., 2017 /