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.


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.

Our trace analysis shows that the I/O pattern served by block storage has limited locality to exploit. Therefore, instead of using SSDs as a cache layer, URSA proposes the SSD-HDD-hybrid storage structure that directly stores primary replicas on SSDs and copies backup replicas on HDDs, using journals to bridge the performance gap between SSDs and HDDs. URSA integrates the hybrid structure with designs for high reliability, scalability, and availability. Experiments show that URSA in its hybrid mode achieves almost the same performance as in its SSD-only mode (storing all replicas on SSDs), and outperforms other block stores (Ceph and Sheepdog) even in their SSD-only mode while achieving orders of magnitude higher CPU efficiency (performance per core).

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 in the zip file for details.


Download URSA's individual components.


Contact us

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

Last modified: 6 Nov., 2018 /