\[
\def\po{\mathsf{\textcolor{red}{po}}}
\def\so{\mathsf{\textcolor{purple}{so}}}
\def\soo{\mathsf{\textcolor{purple}{soo}}}
\def\wr{\mathsf{\textcolor{teal}{wr}}}
\def\ww{\mathsf{\textcolor{red}{ww}}}
\def\rw{\mathsf{\textcolor{blue}{rw}}}
\def\co{\mathsf{\textcolor{orange}{co}}}
\def\SO{\mathsf{\textcolor{purple}{SO}}}
\def\WR{\mathsf{\textcolor{teal}{WR}}}
\def\CM{\mathsf{\textcolor{orange}{CM}}}
\def\CO{\mathsf{\textcolor{brown}{CO}}}
\def\AR{\mathsf{\textcolor{pink}{AR}}}
\def\vis{\mathsf{\textcolor{orange}{vis}}}
\def\VIS{\mathsf{\textcolor{orange}{VIS}}}
\def\hb{\mathsf{\textcolor{pink}{hb}}}
\def\hbo{\mathsf{\textcolor{pink}{hbo}}}
\def\A{\mathsf{A}}
\def\E{\mathsf{E}}
\def\cc{\mathsf{cc}}
\def\ec{\mathsf{ec}}
\def\sc{\mathsf{sc}}
\def\rc{\mathsf{rc}}
\def\mav{\mathsf{mav}}
\def\rr{\mathsf{rr}}
\def\sameobj{\mathsf{sameobj}}
\def\oper{\mathsf{oper}}
\def\txn{\mathsf{txn}}
\def\sametxn{\mathsf{sametxn}}
\def\withdraw{\mathtt{withdraw}}
\def\deposit{\mathtt{deposit}}
\def\getBalance{\mathtt{getBalance}}
\def\heta{\hat{\eta}}
\def\RYW{\mathbf{RYW}}
\def\MR{\mathbf{MR}}
\def\MW{\mathbf{MW}}
\def\WFR{\mathbf{WFR}}
\]
摘要
面向用户的在线服务采用地理分布的数据存储来减少延迟并容忍部分故障,以提供快速且始终可用的体验。然而,地理分布并非没有代价;应用程序开发者需要处理弱一致性行为,并且缺乏构建高级复制数据类型的抽象机制,这导致了复杂的应用程序逻辑,并不可避免地将不一致性暴露给用户。一些商业分布式数据存储和多个学术提案提供了一致性级别的层次结构,更强的一致性保证会带来更高的延迟和吞吐量成本。然而,正确为操作分配合适的一致性级别需要细致的推理,并且通常是一个容易出错的任务。
在本文中,我们提出了
QUELEA,一种针对最终一致性的数据存储(ECDS)的声明式编程模型,它配备了一种契约语言,能够指定细粒度的应用层一致性属性。一个契约执行系统分析这些契约,并自动生成受保护方法所需的一致性协议。我们在一个现成的支持无协调事务的
ECDS 之上实现了
QUELEA。通过包括两个大型网络应用在内的几个基准测试,展示了我们的方法的有效性。
关键词:最终一致性、可用性、CRDT、公理合约、合约分类、分布式事务、SMT
求解器、可判定逻辑、Quelea、Cassandra、Haskell