APGM7.2x10-2的真空是多少?

译者:Aceking,极数云舟技术合伙人,数据库内核研发专家,负责企业级云原生数据库ArkDB等核心数据库产品,华中科技大学计算机系数据库方向研究生毕业,原达梦数据库产品研发工程师,负责达梦数据库内核开发,长期致力于数据库原理和源码开发,精通C/C++,公司内部流传有他的名言:以后再也不敢说精通C++了。

Aurora是亚马逊网络服务(AWS)的一个组成部分,对外提供一个OLTP负载类型的关系数据库服务。本文描述这种架构设计考量。我们确信,高吞吐量的数据处理的主要约束已经从计算、存储转移到网络中来了。Aurora给出一个新颖的架构来解决这个约束,其最显著的特点是把重做日志(redo)处理下放到专门为Aurora设计的存储服务中。文章会介绍如何既能减少网络流量,又能快速崩溃恢复(crash recovery), 还能实现复制失效不损失数据,以及存储上的容错,自愈。然后介绍Aurora在多存储节点中的保持持久状态的一致性的高效异步方案,避免了代价高昂繁复的恢复协议。最后,我们分享了18个多月运营Aurora产品的经验,这些经验是从现代云应用的客户们对数据库层的期望中总结的。

数据库; 分布式系统; 日志处理; 仲裁模型; 复制; 恢复; 性能; OLTP

越来越多的IT负载转移到公有云中,这种全行业的转变的重大原因包括:公有云服务商能够弹性按需提供容量,以及只需支付运营费用而不用支付资产费用的模式。许多IT负载需要一个OLTP的关系型数据库。因此,提供一种等效甚至超越的预置数据库用以支持这种转变显得至关重要。

越来越多现代分布式云服务,通过解耦计算与存储,以及跨越多节点复制的方式实现了弹性与可伸缩性。这样做,可以让我们进行某些操作,例如替换失误或者不可达的主机,添加复制节点,写入节点与复制节点的故障转移,拓展或者收缩数据库实例的大小等等。在这种环境下,传统的数据库系统所面临的IO瓶颈发生改变。因为IO可以分散到多租户集群中的多个节点和多个磁盘中,导致单个磁盘和节点不在是热点。相反,瓶颈转移到发起这些IO请求的数据库层与执行这些IO请求的存储层之间的网络中。除了每秒包数(packets per second , PPS)以及带宽这种基本瓶颈外,一个高性能的数据库会向发起存储机群并行的写入,从而放大了网络流量。某个异常存储节点的性能,磁盘或者网络通路,都会严重影响响应时间。

虽然数据库大部分的操作可以互相重叠执行,但是有一些情况需要同步操作,这会导致停顿和上下文切换(可能是线程上下文切换,也可以是内核态与用户态切换--译者注)。情况之一,数据库由于缓冲缓存(buffer cache)未命中,导致进行磁盘读,读线程无法继续只能等待磁盘读取完成。将脏页强制赶出并且刷盘,用以给新页腾出空间。也会导致缓存(cache)不命中。虽然后台处理,例如检查点,脏页写入线程能减少这种强制行为,但是仍然会导致停顿,上下文切换以及资源争用。

事务提交是另一个干扰源。一个正在提交的事务的停顿,会阻止另一个事务的进行。处理多节点同步协议的提交,如两阶段提交(2PC)对云级规模(cloud-scale)的分布式系统来说更是一个挑战。这些协议不能容忍失败。但是高规模(high-scale)总是充斥着软硬件失效的“背景噪声”。同时还有高延迟,因为高规模系统总是跨多个数据中心分布的。

本文中,我们介绍Amazon Aurora,一种新型的数据库服务,通过大胆激进的使用高分布性的云环境中的日志来解决上述问题。我们给出了一种使用多租户可伸缩的存储面向服务的架构(图1),这种存储服务与数据库实例集群松耦合,并且从中提取虚拟的分段的重做日志(redo log).虽然每个数据库实例仍然有大部分的传统的数据库内核(查询处理,事务,锁,缓冲缓存,访问方法,回滚管理), 但是一些功能(重做日志,持久存储,崩溃恢复,备份恢复)已经剥离,放到存储服务中。

我们的架构与传统方法相比,有三大明显优势:首先,把存储建为一个容错、自愈、跨多个数据中心的独立服务,我们可以保护数据库,使得网络层或存储层的性能差异,暂时或永久的失效,对数据库不再有影响。我们观察到持久存储的失效可以作为一个长时-可用性事件(longlasting availability event)来建模, 而可用性事件可以作为一个长时性能变动来建模,长时性能变动已经有一个设计良好的系统统一处理。 其次,通过存储写日志的方式,可以把网络的IOPS减少一个量级。一旦我们移除了这个瓶颈,就可以大胆的在大量的其他争用点上做优化,就能获取比我们基于的MySQL基线源码更明显的吞吐量的提升。第三,我们把一些最重要最复杂的功能(如:备份、日志恢复)从数据库引擎中一次性代价高昂的操作转变为分摊到大型分布式机群的连续异步的操作。从而获得近乎瞬时的崩溃恢复,无需检查点,同时,备份的代价也不高昂,不会影响前台处理。

本文介绍了我们的三点贡献

如何分析云级规模下的持久性,如何设计具有对相关失效具有弹性的仲裁系统。(段2)

如何使用灵巧的分离存储,使得到存储的负载低于传统的1/4。(段3)

如何在存储分布式系统中消除多阶段同步,崩溃恢复,检查点。(段4)

我们把三个创意组合在一起,设计出Auraro总体架构(段5),随后(段 6)检视我们的性能结果,(段7)展示我们的运营经验,(段8)概述相关的工作,(段9)给出结束语。

如果数据库不做其他的事情,必须满足如下要求:一旦写入,必须可读。不是所有系统可以做到这一点。在本段中我们讨论了aurora仲裁模型背后的原理,为什么我们要将存储分段,如何将持久性与可获得性结合在一起,减少抖动,并且帮助解决大规模存储机群的运营问题。

不同,saleFore.com采用的多租户模式是,所有用户都在同一模式统一的表中,在行级记录中标记租户。结果是,我们看到进行数据库整合的用户拥有巨量的表。生产实例中拥有超过150,000个表的小数据库非常的普遍。这就给管理如字典缓存等元数据的组件带来了压力。这些用户需要(a)维持高水平的吞吐量以及并发的多用户连接,(b)用多少数据就购买提供多少的模式,很难进一步预测使用多少存储空间,(c)减少抖动,最小化单个用户负载尖峰对其他租户的影响。Aurora支持这些属性,对这些SaaS的应用适配得很好。

7.2 高并发自动伸缩负载

互联网负载需要处理因为突发事件导致的尖峰流量。我们的主要客户之一,在一次高度受欢迎的全国性电视节目中出现特殊状况,经历了远高于正常吞吐量峰值的尖峰,但是并没有给数据库带来压力。要支持这样的尖峰,数据库处理大量并发用户连接显得十分的重要。这在Aurora是可行的,因为下层存储系统伸缩性如此之好。我们有些用户运行时都达到了每秒8000个连接。

对象-关系映射)。导致对于应用开发人员来说,数据库模式改变非常容易,但是对DBA来说,如何升级数据库模式就成为一种挑战。在Rail应用中,我们有关于DBA的第一手资料:“数据库迁移“,对于DBA来说是"一周做大把的迁移“,或者是采用一些回避策略,用以保证将来迁移的不那么痛苦。而Mysql提供了自由的模式升级语义,大部分的修改的实现方式是全表复制。频繁的DDL操作是一个务实的现实,我们实现了一种高效的在线DDL,使用(a)基于每页的数据库版本化模式,使用模式历史信息,按需对单独页进行解码。(b)使用写时修改(modify-on-write)原语,实现对单页的最新模式懒更新。

7.4 可用性与软件升级

我们的客户对云原生数据库如何解决运行机群和对服务器的补丁升级的矛盾,有着强烈的期望。客户持有某种应用,而这些应用有主要使用Aurora作为OLTP服务支持。对这些客户来说,任何中断都是痛苦的。所以,我们许多客户对数据库软件的更新的容忍度很低,哪怕是相当于6周30秒的停机时间。因此,我们最近发布了零停机补丁(zero downtime patch)特性。这个特性允许给用户补丁但是不影响运行的数据库连接。

如图5所示,ZDP通过寻找没有活动事务的瞬间,在这瞬间将应用假脱机到本地临时存储,给数据库引擎打补丁然后更新应用状态。在这个过程中,用户会话仍然是活动的,并不知道数据库引擎已经发生了改变。

在本段中,我们讨论其他人的贡献,这些贡献与Aurora采用的方法相关。

存储与引擎解耦虽然传统的数据都被设计成单内核的守护进程。但是仍有相关的工作,将数据库内核解耦成不同的组成部分,例如,Deuteronomy就是这样的系统,将系统分为事务组件(Tranascation Component, TC)和数据组件(Data Componet ,DC).事务组件提供并发控制功能已经从DC中做崩溃恢复的功能,DC提供了一个LLAMA之上的访问方法。LLAMA是一个无闩锁的基于日志结构的缓存和存储管理系统。Sinfonia 和 Hyder则从可拓展的服务抽出了事务性访问方法,实现了可以抽象使用这些方法的数据库系统。Yesquel系统实现了一个多版本分布式平衡树,并且把将并发控制从查询处理中独立出来。Aurora解耦存储比Deuteronomy、Hyder、Sinfonia更为底层。在Aurora中,查询处理,事务,并发,缓存缓冲以及访问方法都和日志存储解耦,并且崩溃恢复作为一个可拓展的服务实现的。

分布式系统 在分区面前,正确性与可用性的权衡早已为人所知,在网络分区去情况下,一个副本的可串行化是不可能的,最近Brewer的CAP理论已经证明了在高可用系统在网络分区的情况下,不可能提供“强”一致性。这些结果以及我们在云级规模的经验,激发了我们的一致性目标,即使在AZ失效引起分区的情况下也要一致性。

HATs)的问题。他们已经证明分区或者高网络延迟,并不会导致不可用性。可串行化、snapshot隔离级、可重复读隔离级与HAT不兼容。然而其他的隔离级可以达到高可用性。Aurora提供了所有的隔离级,它给了一个简单的假设,即任何时候都只有一个写节点产生日志,日志更新的LSN,是在单个有序域中分配的。

Google的Spanner提供了读和写的外部一致性,并且提供了跨数据在同一个时间戳上全球一致性读。这些特性使得spanner可以一致性备份,一致性分布式查询处理以及原子模式更新,这些特性都是全球规模的,哪怕是正在运行的事务的时候,也支持。正如Bailis解释的一样,Spanner是为google的重-读(read-heavy)负载高度定制的。采用两阶段提交,读/写事务采用两阶段锁。

并发控制弱一致性与弱隔离级模型在分布式数据库中已为人所知。由此产生了乐观复制技术以及最终一致性系统在中心化的系统中,采用的其他的方法,有基于锁的悲观模式(),采用如多版本并发控制乐观模式,如Hekaton,如VoltDB采用分片方法,Deuteronomy和Hyper采用时间戳排序的方法。而Aurora给数据库系统提供了一个持久存在的抽象的本地磁盘,允许引擎自己处理隔离级与并发控制。

日志结构存储1992年LFS就引入了日志结构存储系统。最近Deuteronomy和LLMA的相关工作,以及Bw-tree以多种方式在存储引擎栈中采用日志结构技术,和Aurora一样,通过写入差量而不是写整页减少写放大。Aurora与Deuteronomy都实现了纯重做日志系统,并且跟踪最高持久化的LSN,用以确认提交。

传统数据库依赖于ARIES的恢复协议,现在有些数据库为了性能而采用了其他途径。例如,Hekaton与VoltDB采用某种形式的更新日志来重建崩溃后的内存状态。像Sinfonia系统采用如进程对以及复制状态机的技术来避免崩溃恢复。Graefe描述一种使用每页日志记录链的系统,可以按需逐页重做。可以提高崩溃恢复的速度。Aurora与Deuteronomy不需要重做崩溃恢复的过程。这是因为Deuteronomy会将事务延迟,以便只有提交的事务的修改才会写入到持久存储中。因而,与Aurora不同,Deuteronomy能处理的事务大小必然受到限制。

我们设计出了高吞吐量的OLTP数据库Aurora,在云级规模环境下,并没有损失其可用性与持久性。主要思想是,没有采用传统数据库的单核架构,而是从计算节点中把存储解耦出来。实际上,我们只从数据库内核中移走了低于1/4的部分到独立的弹性伸缩的分布式服务中,用以管理日志与存储。由于所有的IO写都要通过网络,现在我们的基本的约束就在于网络。所以我们关注于能缓解网络压力并能提高吞吐量的技术。我们使用仲裁模型来处理大规模的云环境下的相关的复杂失效。并且避免了特殊节点带来的性能惩罚。使用日志处理减少总的IO负担。采用异步共识方法消除多阶段提交同步协议的繁复交互与高昂的代价,以及离线的崩溃恢复,和分布式存储的检查点。我们的方法导致了简化系统架构,能降低复杂性,易于伸缩能为未来的发展打下基础。

Plane中,数据库引擎那个框包住了Caching,而存储服务那个框,也包住了Caching。耐人寻味。可以猜测,Cache是共享内存,数据库引擎和存储服务都可以访问。而且Cache不光是数据库引擎的一部分,而且也是存储服务的一部分。全文大部分篇幅讲如何优化写请求带来的网络负担,而只字未提读请求是否带来网络负担。因此,可以大胆猜测,一次写操作,不光是把日志应用到磁盘存储中,同时也把已经在cache的页也应用了,因此大部分的读请求不需要真实的存储IO,除非该页在cache中没有命中。从段6的Aurora测试可以看到,Aurora实例拥有的缓存相当大,一般的应用软件的数据库数据都能放在内存中。从图3也可以看到,AZ1主实例,也会向AZ2,AZ3数据库从实例发送日志与元数据,既然已经将日志处理从数据库引擎解耦出来了,发送的日志由谁应用呢?个人认为,AZ2与AZ3接收到日志,仍然是有存储服务应用的,只不过Cache是存储服务与数据库引擎共享的。

而且有这个猜测,我们进一步解读零停机补丁的实现方式。ZDP如何保持用户连接实现假脱机?个人认为,应用到数据库之间有proxy。使用proxy来保持应用程序的连接,并重新与更新后数据库实例建立连接,而且要做到用户会话无感觉,Cache是共享内存是必要的。因为Cache保存了大部分数据库运行状态,重启后的数据库实例仍然继续进行用户会话的查询。这个和使用共享内存的postgre有点像,你随意杀死postgre某些进程,并不影响用户会话的查询。

此外,个人认为,Aurora的计算节点,有可能也是存储节点。虽然逻辑上是存储与计算分离的,但是也可以享受不分离带来的好处,比如,存储服务可以直接往Cache应用日志,使得数据库引擎在大部分读请求不需要真实的IO。

Aurora的PGMRPL可以认为是检查点。LSN小于这个点的数据页已经刷盘,而大于这个点的页可以刷盘,也可以不刷盘,LSN小于这个点的日志都可以丢弃。PGMRPL在逻辑上与存储引擎的检查点是等效的。可以认为是PG上的检查点。

Aurora与Polardb都是存储与计算分离、一些多读、共享分布式存储的架构。很显然,polardb在写放大上面没有做优化。从节点需要同步主库的脏页,共享的存储,私有的脏页,是个很难解决的矛盾。因此polardb的读节点会影响写节点。而Aurora可以认为没有脏页。日志即数据库,可以把日志应用器看作更慢的存储,存储服务与缓存都可以认为是日志应用器的Cache。

从节点与主节点之间有延迟,而aurora存储的数据页有多版本,文中明确指出存储有旧页回收处理。从节点依据读取点LSN读取到指定版本的页,文中段4.2.4指出,写节点到读复制节点之间的延迟小于20ms,因此,不可回收的旧版本页应该不会太多。

每个读节点虽然只有查询操作,但是查询操作会生成临时表用以保存查询的中间结果。生成临时表数据是不会产生日志的。但是这里仍有写IO,个人认为,Aurora有可能直接写在本地存储,这样不会产生网络上的负担。

}

本说明书描述了利雅路燃气燃烧器电子仪表调节rs310rs410rs510rs610:利雅路常见故障利雅路说明书利雅路燃烧机参数利雅路控制器利雅路燃烧机故障代码利雅路燃烧机亮红灯利雅路燃烧机怎么接线利雅路低氮燃烧器利雅路减压阀利路雅燃烧器利雅路燃烧器故障代码利雅路燃烧机说明书利雅路燃烧机故障利雅路燃烧机接线利雅路燃烧器配件利雅路燃烧器故障利雅路燃烧器接线图利雅路燃烧机接线图利雅路燃烧器调试利雅路燃气燃烧器说明书


}

我要回帖

更多关于 真空度是多少pa 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信