Introduction

<aside> 💡 NOTE: KySync v1.1 is released, but if you are new to KySync read this document first.

</aside>

KySync is an efficient way to distribute new data which makes use of older (but similar) data that you may already have present locally. KySync supports HTTP v1.1, but can easily be extended to support any server protocol which supports range queries.

KySync is released under the MIT Open Source License (see COPYING in root of repository).

KySync is a full rewrite of Zsync in modern C++. While no code was reused from Zsync, the awesome Zsync technical paper was the major resource used for the implementation of KySync.

The value proposition of KySync over Zsync is that it takes advantage of modern architecture features (multi-core multi-CPU systems as well as exceedingly fast IO subsystems, e.g. NVMe SSDs). KySync is 3x-10x (or more) faster than Zsync on such commonly available modern hardware. We have not spent much time optimizing KySync single-thread performance, so there are cases where with sufficiently high similarity, Zsync is faster when less then 4 threads are used in KySync.

During the development of KySync, two side projects emerged:

Both of these could be expanded and offered separately, but in this document I will focus only on the bare minimum necessary to build KySync, use it, and reproduce the experimental results presented.

We also have a presentation (WIP) explaining Rsync/Zsync basics, which eventually will cover KySync implementation details as well.

Some frequently asked questions will be addressed in our FAQ

Performance

In this section we compare the performance of KySync and Zsync along several dimensions on synthetically generated data. While we believe that the experiments are reasonably representative, we welcome feedback from the community on other experiments that may represent their scenarios.

Dimensions

The following are the dimensions along which we compare performance: