Abstract

IceCube is a recent technology developed by Microsoft. Its purpose is to deal with the problem of merging or reconciling divergent replicas of some shared system state, which can occur in e.g. multi-user concurrent systems. In other words, when users of a computer system each make modifications to a local copy of some global state, it is necessary at some point to merge these modifications in order to obtain some new, updated global state. This new state should be consistent with all the modified local states, and this raises a number of issues such as what to do when there is a conflict between two or more distinct modifications. This paper will attempt to address the difficulty of understanding and using IceCube through the development of an educational model that simulates aspects of this technology.

The problems caused by merging divergent replicas are addressed in IceCube through a reconciliation algorithm. This algorithm relies heavily on the notion of dependencies between the modifications done by users. As these dependencies to some extent have to be specified by the application programmer, the use of IceCube can be a very difficult task. Also, as the algorithm itself is quite complex, understanding how it proceeds and accomplishes its task can be tricky. The paper will therefore address the reconciliation issue from two points of view: that of the application programmer who specifies the inputs to the algorithm, and that of the user who is trying to assess the benefits and the success of IceCube. These are distinct issues, but the author believes that they can both be addressed through a model with common properties.

To date, no formal analysis of the efficiency of IceCube has been published, although the technology itself has been extended through various research projects that aim to produce optimised solutions to the reconciliation problem outlined above in different settings. An Empirical Modelling study of IceCube could serve as an informal way of experimenting with its underlying concepts in order to see where it succeeds and where it fails. Through this it is not only possible to improve ones understanding of how to use IceCube, it might also help developers see new and improved solutions to the reconciliation problem.