Designing safe and highly available distributed applications
Conception d'applications distribuées correctes et hautement disponibles
Résumé
Designing distributed applications involves a fundamental trade-off between safety and performance as described by CAP theorem. We focus on the cases where safety is the top requirement.For the subclass of state-based distributed systems, we propose a proof methodology for establishing that a given application maintains a given invariant. Our approach allows reasoning about individual operations separately. We demonstrate that our rules are sound, and with a mechanized proof engine, we illustrate their use with some representative examples. For conflicting operations, the developer can choose between conflict resolution or coordination. We present a novel replicated tree data structure that supports coordination-free concurrent atomic moves, and arguably maintains the tree invariant. Our analysis identifies cases where concurrent moves are inherently safe. For the remaining cases we devise a conflict resolution algorithm. The trade-off is that in some cases a move operation "loses". Given the coordination required by some application for safety, it can be implemented in many different ways. Even restricting to locks, they can use various configurations, differing by lock granularity, type, and placement. The performance of each configuration depends on workload. We study the "coordination lattice", i.e., design space of lock configurations, and define a set of metrics to systematically navigate them.
La conception d'applications distribuées implique fondamentalement un compromis entre la sûreté et les performances. Nous nous concentrons sur les cas où la sûreté est la principale exigence. Dans le cadre des systèmes distribués basés sur l'état, nous proposons une méthodologie de preuve pour établir qu'une application donnée maintient un invariant donné. Notre approche permet de raisonner sur les opérations individuelles séparément. Nous démontrons que nos règles sont correctes et, à l'aide d'un moteur de preuve, nous illustrons leur utilisation par quelques exemples représentatifs. Pour les opérations conflictuelles, le développeur peut choisir entre la résolution de conflit ou la coordination. Nous présentons une nouvelle structure de données en forme d'arbre répliqué qui prend en charge les déplacements atomiques concurrents sans coordination et qui maintient l'invariant de l'arbre. Notre analyse identifie les cas où les déplacements concurrents sont intrinsèquement sûrs. Pour les autres cas, nous concevons un algorithme de résolution des conflits. La contrepartie est que dans certains cas, une opération de déplacement est "perdante". Étant donné la coordination requise par certaines applications pour la sûreté, elle peut être implémentée de nombreuses façons différentes. Même en se limitant aux verrous, ceux-ci peuvent utiliser diverses configurations qui diffèrent par: la granularité, le type et le placement. La performance de chaque configuration dépend de la charge de travail. Nous étudions le "treillis de coordination", l'espace de conception des configurations de verrouillage, et définissons un ensemble de mesures pour y naviguer systématiquement.
Origine | Version validée par le jury (STAR) |
---|