SessionStore:边缘的会话感知数据存储

SessionStore:边缘的会话感知数据存储

SessionStore: A Session-Aware Datastore for the Edge

摘要

对于设计在边缘数据中心上运行的存储系统来说,通过依赖最终一致的模型复制数据来避免与地理分布相关的高延迟是很常见的。最终一致性适用于许多边缘应用程序,因为只要客户端与相同的副本进行交互,存储系统就可以提供会话一致性。一种更强的一致性模型,它有两个额外的重要属性:(i) read-your-writes,当客户端读取更新过的对象时,将返回更新后的值或更新的值;(ii)monotonic reads单调读取,如果客户端已经看到一个对象的特定值,后续读取将返回相同的值或更新的值。虽然会话一致性不保证不同的客户端会以相同的顺序感知更新,但它仍然呈现给每个单独的客户端一个直观的世界观,与客户端自己的行动是一致的。不幸的是,随着时间的推移,当客户机与位于不同数据中心的多个副本交互时,这些一致性保证就会失效,这可能是由于应用程序分区或客户机或代码迁移的原因。

SessionStore是一种用于雾/边缘计算的数据存储,它确保了在最终一致的副本上的会话一致性。SessionStore通过将相关的数据访问分组到一个会话中,并使用一个会话感知的协调算法,在副本之间切换时,只协调与会话相关的数据,从而实现会话一致性。与完全复制协调相比,这种方法减少了高达90%的数据传输和延迟。

INTRODUCTION

边缘计算用额外的数据中心层扩展了传统的云架构,这些数据中心层提供更接近最终用户或设备的计算和存储。例如,服务于一个国家的广域云数据中心可以通过覆盖城市、社区和建筑级别的数据中心层次来扩大。边缘计算促进了下一代移动和物联网(Internet of Things)应用程序的发展,这些应用程序需要低延迟,或产生可能淹没网络的大量数据。

最新的边缘[3]-[6]存储系统通常依赖于最终一致的[7]、[8]模型来复制数据。这些系统在后台传播更新,并保证如果没有对一个对象进行新的更新,最终所有副本将收敛到相同的值。在许多应用程序中,客户端在会话期间与相同的副本进行交互时,最终一致性有很好的表现。原因是只要客户端与相同的副本交互,存储系统实际上就提供了会话一致性[7]。这是一种更强的一致性模型,具有额外的重要属性:read-your-writes, 后来来读数据的客户端读到的数据是被更新后的数据;monotonic reads单调读取,如果客户端已经看到一个对象的特定值,后续读取将返回相同的值或更新的值。虽然会话一致性不保证不同的客户端会以相同的顺序感知更新,但它仍然呈现给每个单独的客户端一个直观的世界观,与客户端自己的行动是一致的。可以从边缘会话一致性中受益的应用程序示例包括身份验证服务、文件存储应用程序和消息传递应用程序。我们将在第三节中描述更多关于边缘会话一致性的使用场景。

然而,当连续的客户端请求被发送到不同的副本时,会话一致性可能得不到保证。这种情况可能发生在边缘应用中: (i) 移动客户端在边缘[9][10]之间切换; (ii)功能在边[11]之间动态重新分配;或者 (iii)应用程序的功能被划分到不同的数据中心[12]-14。如果连续的客户端请求在复制客户端请求所需的数据之前被发送到不同的副本,应用程序可能无法读取自己的写入或进行单调的读取。

图1演示了两个这样的场景。在图1a中,客户端1在Edge1上写入对象O。作为迁移的结果,客户端1将它的关联切换到另一个Edge2,并在后续读取时观察O的旧值。在图1b所示的第二个场景中,客户机2发出一个命令,导致在Edge1上覆盖对象O。然后客户端1读取这个值并移动到Edge2。如果客户端1发出另一个读取Edge2上对象O的请求,将返回一个旧的值。在前面的示例中,客户机直接读写存储系统的副本,这纯粹是为了便于解释。实际上,客户端与部署在每个边缘数据中心上的服务副本(例如HTTP服务器)进行通信,该服务副本运行访问复制数据存储的应用程序代码。
我们提出了SessionStore,一种为雾/边缘计算量身定制的分布式数据存储,它确保了一个层次结构之间的会话一致性,否则最终的一致性副本。以前的[15]、[16]方法在最终的一致性存储系统之上提供会话一致性,目标是运行在相对较少的云数据中心上的应用程序,而SessionStore是为运行在大量且数量可变的edge/fog数据中心上的应用程序而设计的。SessionStore通过利用部分复制和仅按需复制数据来支持资源有限的数据中心。

SessionStore使用一种感知会话的协调算法来支持会话一致性,该算法只对客户端写入或读取源副本的键进行协调。SessionStore通过不传输目标上已经存在的最新数据来进一步减少数据传输。在我们的示例应用程序用例中,就数据传输而言,这种节省高达95%。

本文的主要贡献是:(i)一个会话感知的协调算法,通过只传输相关的客户端数据来强制会话一致性;(ii)实现我们算法的原型;(iii)一个基于微基准测试和RUBBoS基准测试的实验性评估表明,SessionStore能够以较强一致性实现的一小部分延迟和带宽成本来保证会话一致性。

相关工作

一些强一致性方法可以实现节点之间会话一致性,但不适合用在边缘,因为传输完整的数据对于边缘设备资源比较紧缺的情况来说是不合适的。本文希望找到一个只用移动复制部分会话关键数据实现会话一致性。

文献[7],[24],[28]中关于会话一致性的其他解决方案结合了以下基本技术:(1)保持会话可以确保客户端维护的会话内的所有读写总是与单个副本通信,(2)在客户端维护状态,这样当一个会话并改变副本,客户端可以从缓存服务请求到最新的副本数据,(3)为请求使用向量时间戳,并确保每个读或写都以满足会话保证的方式在副本上被服务或接受。第一种方法不适用于边缘计算场景,在这些场景中,由于客户机移动或访问部署在不同数据中心上的功能,客户机会随着时间切换副本。第二种方法只适用于客户端完全受信任且有足够资源存储数据的情况。对于将原始数据保存在服务器上并以中介形式提供给客户机以响应显式应用程序请求的多用户应用程序来说,这是不现实的。最后,当副本数量很大且随着开销随复制因子线性增长而动态增长时,需要矢量时间戳的方法将被分解。虽然有一些方法可以削减向量[26]和[27],但它们的代价是非常复杂的,并且需要复制品之间的强大协调,这使得在边缘上使用这些系统是不可行的。

事务性数据库[31]、[32]和大多数键值存储都支持某种形式的跨副本[33]、[34]的数据协调。然而,在前一种情况下,这些解决方案都是重量级的,这是保证ACID事务性所必需的。常见键值存储中的协调函数通常实现为通用的“停止并迁移”技术,这种技术不仔细跟踪客户端数据子集。这将导致客户端出现大量停机时间。另一方面,SessionStore要轻得多,因为它保证了会话一致性,而不是ACID事务性。本文以研讨会论文[35]为基础。虽然上一篇文章主张在边缘数据存储上需要会话一致性,但它没有提供完整的设计或功能性解决方案,只包括初步的评估。

用例

在本节中,我们将给出需要会话一致性的场景示例,以保证来自同一客户机的请求能够体验到与客户机自己的操作一致的底层数据视图。我们考虑部署在具有两个或更多级别的边缘网络上的应用程序。例如,图2显示了一个样本边缘网络,包括一个云数据中心和两个移动网络,每个移动网络的核心都有一个数据中心,以及在边缘位置(如基站)的一个或两个额外的数据中心。每个数据中心都有一个数据存储的副本,以及用于运行应用程序代码的附加服务器。我们假设云数据中心存储了数据存储的一个持久的完整副本。其他每个数据中心都承载一个部分副本,并按需复制数据。在读取访问时,如果数据在本地副本上还不可用,则递归地从其父副本获取数据。类似地,更新应用于本地副本,并通过后台的副本层次结构传播。
在这里插入图片描述
我们根据特定于应用程序的考虑,将相关的数据存储访问分组到一个会话中,从而加强会话一致性。在下面的例子中,我们使用一个会话将代表同一用户执行的数据访问组合在一起;然而,也可以将一个应用程序或一个模块需要访问的数据组合在一起表示一个会话。我们考虑属于同一会话的请求在不同副本上执行的几个原因:1 用户的移动 2 应用程序的不同部分部署在不同的数据中心 3 代码迁移.下面的用例遵循无状态服务器设计模式,其中所有应用程序状态都保存在数据存储中,应用程序被实现为独立的无状态函数的集合。

移动客户端在这个场景中,当用户四处移动时,他/她的请求被路由到最近的边缘数据中心。当连接到一个边缘数据中心的状态在用户切换到另一个边缘后再次被访问时,需要会话一致性。考虑一个用户利用边缘计算来编辑视频的情况。用户在手机上录制完一段视频后,将其上传到edge视频编辑服务,该服务将其存储在数据存储中。然后用户登上一辆公共汽车,通过应用一系列滤镜(如图像稳定化、裁剪)来编辑视频。通过将代表用户执行的操作分组到单个会话中,提供会话一致性的数据存储可以保证每个过滤操作的效果被保留,即使后续操作可能在总线运行时沿路线的不同边缘上运行。

场景2:功能分区。在这个场景中,应用程序的功能被分区并部署在不同的数据中心上。当在一个数据中心上执行一个函数的结果应该对在另一个数据中心上运行的另一个函数可见时,就需要会话一致性。例如,考虑一个简单的访问控制服务,它包含三个功能:登录、注销和授权。客户端通过提供密码登录到系统,以验证存储在数据存储中的散列。在云数据中心上部署登录功能,确保敏感密码信息不被复制到其他地方。验证成功后,login将一个具有用户权限的证书添加到数据存储中。类似地,为了登出用户,登出修改证书以表明它不再有效。在第一次运行authorize后,后续的客户端请求(例如,读电子邮件,发送消息)在一个边缘数据中心上执行,这涉及到从数据存储中读取用户的证书以验证其有效性。通过将代表一个客户机执行的操作分组到一个会话中,提供会话一致性的数据存储将保证authorize读取的版本是最近一次调用登录或注销创建的证书版本。

场景三:功能迁移。在这个场景中,应用程序(或应用程序组件)在数据中心之间重新分配。当任务的需求超过当前执行位置的本地可用资源时,或者为了提高体验质量,可以出于负载平衡的目的进行迁移。迁移后,当应用程序从新数据中心的数据存储读取在旧数据中心读或写的状态时,需要会话一致性。如,一个交互性web管理游戏,游戏的状态存储在datastore里,当网络经历较低的排队延迟时,应用程序在云上运行,但当广域网流量的增加降低了用户体验时,就迁移到边缘的数据中心。通过将代表每个用户执行的操作分组到它自己的会话中,一个提供会话一致性的数据存储保证了迁移后呈现给用户的游戏状态与用户的最后一次移动相对应。

前面的用例也可以在提供更强一致性保证的数据存储上正确运行,比如顺序一致性或临时一致性;然而,就带宽和延迟而言,更强的特性需要付出很大的代价,正如我们在第6节中通过实验展示的那样。相反,它们只需要反映属于同一会话的操作动作的世界视图。本文的其余部分展示了会话一致性如何以较低的数据传输开销和复制切换成本来提供这种保证。

DESIGN CONSIDERATIONS

在本节中,我们将详细介绍如何为运行在方便边缘计算的数据中心层次结构上的复制数据存储添加会话一致性支持的设计选择。我们考虑三个维度:何时同步状态,同步什么状态,以及如何跟踪或识别需要同步的状态。

会话一致性可以主动执行,也可以被动执行。在主动实现中,数据被连续地主动发送到其他副本。这种方法支持在副本之间快速切换;但是,它会导致高带宽消耗。另一方面,响应式实现只在客户端切换到新的副本后才能确保会话一致性。在新副本上代表客户端运行代码之前,所有相关状态都必须同步,这可能会导致延迟。

我们认为响应式方法更适合边缘计算因为边缘计算的延迟和弹性需求让移动客户端必须经常使用最接近的副本。主动的方法需要大量的服务器副本,负载因子非常高,也导致边缘需要更多的资源。我们的实验证明了使用主动的方法,即使是有适度的负载因子,仍然有较高的更新延迟和较大的数据量。相反,使用响应式复制保持副本的同步,在切换时延迟相对较小。

副本之间的状态可以使用完全副本协调( full
replica reconciliation)或会话感知的数据协调(session-aware data reconciliation)来同步。在前者中,目标副本将会在所有副本进行交换之前同步所有副本的所有可用记录。这种方式是概念简单,但是会导致切换时间高且交换数据的带宽消耗高。在后面一种方式中,只有与会话相关的数据(不管是读写)会被同步。就数据传输与时间切换方面来说这种方法是很有效率的。然而,它更加复杂并且需要应用程序支持识别会话相关的数据。我们的实验证明这种方法减少了贷款需求与延迟。此外在我们的实验中查找标签所花费的努力也是适度的。
为了跟踪认证需要被同步的状态,我们使用了两种方法。可以根据读写信息标记个人纪录,或者用一个更高的抽象,例如用用户查询来捕捉访问模式。标记个人纪录的好处是简单,但为了存储客户对象会有潜在的显著的额外存储开销。与之相反,我们选择通过记录对副本执行的类似sql的查询来跟踪数据访问。虽然这种方法更加复杂,但是在认证数据对象时只需要存储简单的查询,开销更小。

session store

session store是我们所设计的用于边缘计算的一个分布式存储,它在最终一致性的副本上保证会话的一致性。保证会话一致性简单高效的方法的基本思想是:我们将相关的数据存储操作分组到一些会话中,并且通过跟踪会话执行的查询来跟踪会话中的读写。当客户端从源副本切换到目标副本时,我们要确保在新的查询之前,目标副本上存在会话相关联的行的相同或更新的版本。在下面将先描述分布式存储,保证了从云到网络边缘的所有副本的最终一致性。接下来描述如何在这个最终一致性的存储上添加会话一致性的支持。

A 最终一致性操作

我们的会话一致性存储基于PathStore,[3]中引入的最终一致性对象存储。PathStore是一个由多个副本组成的层次结构,配置为一棵树,根是一个持久的副本,下面是无限多层的部分副本。我们的实现使用Cassandra[36],它可以运行在典型的笔记本[37]甚至Raspberry Pi的[38]上,使其成为edge部署的可行选择。每个副本运行一个独立的Cassandra环,我们的代码负责在其他独立环之间复制数据。我们根据需求按行粒度复制数据以响应应用程序查询。每个独立的Cassandra环可能依次由多个服务器组成,为了容错或性能,Cassandra可以在内部复制数据。在PathStore结构的数据中心里,副本用Cassandra部署表示。
具体的实现先不看了

总结

fog计算的一个关键原则是,客户端和应用程序功能可以在托管服务或应用程序数据副本的不同边缘数据中心之间无缝重定向。在本文中,我们提出了一种新的存储系统SessionStore,它可以在客户端在不同边缘位置的副本之间切换时提供会话一致性。我们的会话感知的协调算法通过跟踪会话访问或影响的键,然后以最小的开销在目标副本上执行细粒度的协调,以最小的代价强制会话一致性。作为未来的工作,虽然我们的调和算法确保只迁移与会话相关的数据,但我们希望探索其他减少数据传输的优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值