  Background: Distributed data-intensive systems are increasingly designed to
be only eventually consistent. Persistent data is no longer processed with
serialized and transactional access, exposing applications to a range of
potential concurrency anomalies that need to be handled by the application
itself. Controlling concurrent data access in monolithic systems is already
challenging, but the problem is exacerbated in distributed systems. To make it
worse, only little systematic engineering guidance is provided by the software
architecture community regarding this issue. Aims: In this paper, we report on
our study of the effectiveness and applicability of the novel design guidelines
we are proposing in this regard. Method: We used action research and conducted
it in the context of the software architecture design process of a multi-site
platform development project. Results: Our hypotheses regarding effectiveness
and applicability have been accepted in the context of the study. The initial
design guidelines were refined throughout the study. Thus, we also contribute
concrete guidelines for architecting distributed data-intensive systems with
eventually consistent data. The guidelines are an advancement of Domain-Driven
Design and provide additional patterns for the tactical design part.
Conclusions: Based on our results, we recommend using the guidelines to
architect safe eventually consistent systems. Because of the relevance of
distributed data-intensive systems, we will drive this research forward and
evaluate it in further domains.
