文章目录
现代的分布式云服务通过将计算和存储进行解耦来获得更强的可扩展性和弹性。Amazon认为现在的分布式云服务还存在一些问题:
Aurora通过将rodo logging和storage从database中分离出来以解决上述问题,其具体架构如下图所示。

相比传统数据库,Aurora具有以下优点:
在分布式数据库服务中,instance lifetime和storage lifetime并不相关联,这种特性是有利于实现存储计算分离。但是,一旦将storage进行分离,disk和storage node就有可能发生故障,因此必须建立容错机制。
一种常见的容错机制是使用quorum-based voting,完成读操作需要 V r V_r Vr的投票数,完成写操作需要 V w V_w Vw的投票数,且其需要满足以下约束:
Amazon认为常见的故障有两种:
为了提高Aurora地耐用性,Amazon认为Aurora需要容忍以下集群异常:
Aurora采用了3个AZ,每个AZ内2个replica nodes总共6个replica servers的方法来进行容错备份。 V = 6 , V w = 4 , V r = 3 V=6,V_w=4,V_r=3 V=6,Vw=4,Vr=3,Aurora可以容忍任何一个AZ出现故障,而不会影响写服务,任何一个AZ出现故障,以及另外一个AZ中的一个节点出现故障,不会影响读服务且不会丢失数据。
只要保证AZ故障和single node故障不要短时间内大量同时发生,就可以保证数据库永久可用。衡量数据库耐用性通常用两个指标,平均两次故障间隔时间(MTTF)和平均故障修复时间(MTTR)。 由于MTTF是不可控因素,因此Aurora通过减少MTTR来降低故障同时发生的概率。
Aurora将数据分为固定10GB大小的segments,每个segments有6个备份,每个segments的所有备份共60GB组成一个PG(Protection Group)。6个备份被平均分配在3个AZ中,每个AZ两个。Segments是出现故障和修复的最小单元,在Aurora中每个10GB segment在10Gbps网络下仅需要10s就能完成修复。 根据Amazon的使用情况,目前该方案能够保证数据库系统的长期运行。
Aurora的3个AZ,每个AZ内部两个replica的复制方案带来了极强的容错性和弹性。然而,这种备份方式却不能直接用于MySQL等传统数据库,因为MySQL在一次写操作时实际上会触发大量的I/O操作,并且replication机制会将高I/O操作再次放大。
考虑一个传统的MySQL数据库执行一次写操作的流程,具体如下图所示。

上图展示了primary-standby模式下运行的MySQL数据库执行一次写操作的流程。在第一步和第二步中,primary instance向EBS发出写操作请求,然后EBS将其发送到同AZ中的本地EBS镜像,并等待这两个操作完成。在第三步中,primary instance将数据同步给replica instance。最后,在第四步和第五步中,replica instance将数据写入使用的EBS及同AZ中的EBS镜像。
在上述整个步骤中,存在以下几个问题:
在Aurora系统中,一次写操作中仅仅需要保留redo log的传输即可,并且redo log的写入可以异步进行。 Aurora摒弃了传统MySQL的复杂写入机制,提升了系统的写吞吐量。
Aurora会直接将redo log发送到storage,data page的更新操作从传统的数据库层下沉到storage层,具体如下图所示:

Aurora数据库实例中的log applicator会直接将redo log record推送给存储层(storage service),而storage service则会在后台或者需要的时候基于redo log生成数据库的data page。 当然,基于redo log每次都从头去应用redo log进而生成data page的代价是非常大的。因此,Aurora的存储服务会不断在后台去应用redo log 从而生成数据库data page,以避免每次都从头开始重新生成它们,这个过程称之为后台物化(background materialization)。 在写入过程中,primary instance仅将redo log record写入存储服务,并将这些redo log record以及元数据更新信息流式地传输到replicate instance。不同与传统的MySQL数据库,数据库引擎在收到4个storage的回复,便认为数据已经写入成功。
相比传统的MySQL数据库,该措施大大提升了系统吞吐量。

对于crash recovery而言,传统的数据库需要从最近的checkpoint开始重新应用redo log。在Aurora中,data page的更新操作一直由storage service负责进行,如果读取到的data page不是最新的,则需要等待storage进行background materialization。 由此,data page的更新操作被分散在了每次读操作中,数据库启动和故障恢复几乎不需要花费任何时间。
Aurora设计的核心要点是最小化database处理write request的时延。 传统数据库中,storage processing和compute processing都处在一个节点上,因此storage service的操作会直接影响database的性能。 为了实现这个目标,Aurora将大量的跟存储有关的操作从database转移到storage service。并且,由于batabase和storage service之间的性能解耦,Aurora可以充分利用这个关系来让CPU为disk服务。例如,Aurora不必在storage node繁忙时进行old redo log的垃圾回收,可以等到storage service空闲时在进行垃圾回收,

Aurora完成一次write request的具体I/O流如上图所示:
在上数步骤中,主要影响database性能的是1,2步,其它步骤均可以异步执行。
Aurora将database建模为redo log stream,并且通过日志来保障Aurora的一致性。Aurora摒弃了性能较差的2PC协议,转而使用了gossip协议来保证replicate log之间的一致性。 由于database中由很多独立执行的隔离事务,因此database需要决定这些事务的执行顺序。当database宕机或故障时,database需要决定哪些事务需要进行roll back,事务的追踪和回滚操作由database engine完成。然而,除了database的事务recovery机制,storage service也有自己的一套基于gossip的recovery机制,如何将两者协调起来,是Aurora要解决的问题。
为了保证一致性和可恢复性,Aurora定义了以下概念:
Aurora在进行crash recovery时,会截断所有大于VDL的日志。 例如:VCL=1007,database记录的CPL为900,1000,1100,Aurora则会将1000后面的日志全部截断。database和storage server的交互过程如下:
基于此过程我们可以发现,Aurora阶段截断VDL而不是截断VCL的原因是为了保证mini-transaction的有序原子性。 因为只有CPL标记才能唯一标识mini-transcation的执行结束。
在Aurora中,database向storage service传递redo log,达成多数派后将事务标记为提交状态,然后推进VDL,使数据库进入一个新的一致状态。为了避免database处理事务的速度过快,导致LSN大幅度领先VDL,使得storage service称为性能瓶颈,Aurora规定了LSN和VDL的差距阈值LAL。
由于底层数据被划分为segments,当一个事务涉及到修改多个不同的segments时,事务对应的日志会被打散到多个segment上,每个segment只能看到这个事务的部分日志。 为了确保各个分片日志的完整性,每条日志中都包含一个前向链接,前向链接指向了前一条log record。 通过前向链接就可以遍历分布在PG中各个segment上的所有redo log,进而构建一份完整的SCL(Segment Complete LSN)链表。SCL主要用于各个storage node通过gossip协议查找和交换各自缺失的redo log record。

在Aurora中,事务提交是异步完成的。 每个事务由若干个日志组成,并包含有一个唯一的“commit LSN”,当VDL大于事务的commit LSN时,表示这个事务redo-log都已经持久化,可以向客户端回包,通知事务已经成功执行。在Aurora中,有一个独立的线程处理事务成功执行的回包工作,而工作线程不会等待事务提交完成,它们会继续处理其它的事务。

在Aurora中,数据页的请求从buffer cache中获取,只有当buffer cache中不存在时,才会用disk上获取。当buffer cache满时,需要进行置换算法将某些页换出,传统的数据库还需要将dirty page进行刷回,而Aurora不会将需要被置换出去的数据页刷写到磁盘,而是直接丢弃。
Aurora在进行page置换时,只会将page LSN小于等于VDL的页进行淘汰。 这一条件保证了:
Aurora在进行读操作时,正常情况下,不需要quorum read。 每当database处理读请求时,会将该读请求发生时的VDL值标记为read-point。database只需要访问VCL大于等于read-point的segment就可以得到最新的数据。 由于database存储了SCL和metadata等信息,因此其知道每个segment处理过的读请求中的minimum read-point,database通过统计所有的segments就可以得到全局的minimum read-point。所有LSN低于minimum read-point的redo log都可以被垃圾回收, 因为后续所有读操作的read-point一定大于等于minimum read-point。
在Aurora中,一个writer可以和最多15个read replicas共享一套storage volume。因此增加read replicas并不会造成写放大,也不会增加磁盘存储资源。这也是共享存储的优势,在不增加存储成本的前提下增加新的read replicas,从而提升读能力。 为了减小writer和read replicas之间的log lag,wrtier往storage node发送日志的同时也会向read replicas发送日志。read replicas在进行日志回放时,如果所需要的page在reader buffer中,则直接将log应用到page上,如果不在则直接丢弃该条log。 可以丢弃的原因在于,storage node拥有所有日志,storage node根据read-point,可以构造出特定版本的数据页。wrtier向read replica发送日志是异步的,writer执行提交操作并不受read replicas的影响。
read replcias回放日志时需要遵守两个基本原则:
CSDN优秀解读:https://blog.csdn.net/jiaoyangwm/article/details/1266387752021https://arxiv.org/pdf/2103.14259.pdf关键解读在目标检测中标签分配的最新进展主要寻求为每个GT对象独立定义正/负训练样本。在本文中,我们创新性地从全局的角度重新审视标签分配,并提出将分配程序制定为一个最优传输(OT)问题——优化理论中一个被充分研究的课题。具体来说,我们将每个需求方(锚框)和供应商(GT标签)的单位传输成本定义为他们的分类和回归损失加权之和。在公式化后,找到最好的分配方案即为最小传播成本解决最优传输方案,
Two-StreamConvolutionalNetworksforActionRecognitioninVideos双流网络论文精读论文:Two-StreamConvolutionalNetworksforActionRecognitioninVideos链接:https://arxiv.org/abs/1406.2199本文是深度学习应用在视频分类领域的开山之作,双流网络的意思就是使用了两个卷积神经网络,一个是SpatialstreamConvNet,一个是TemporalstreamConvNet。此前的研究者在将卷积神经网络直接应用在视频分类中时,效果并不好。作者认为可能是因为卷积神经
论文常见数学符号及其含义(科研必备)返回论文和资料目录数学符号在数学领域是非常重要的。在论文中,使用数学符号可以使得论文更加简洁明了,同时也能够准确地描述各种概念和理论。在本篇博客中,我将介绍一些常见的数学符号及其含义(省去特别简单的符号),希望能够帮助读者更好地理解数学论文。高等数学∑i=1nxi\sum_{i=1}^nx_i∑i=1nxi(求和符号):表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1,x2,…,xn中的所有数相加,例如∑i=1nxi\sum_{i=1}^nx_i∑i=1nxi表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1,x
目录文章信息写在前面Background&MotivationMethodDCNV2DCNV3模型架构Experiment分类检测文章信息Title:InternImage:ExploringLarge-ScaleVisionFoundationModelswithDeformableConvolutionsPaperLink:https://arxiv.org/abs/2211.05778CodeLink:https://github.com/OpenGVLab/InternImage写在前面拿到文章之后先看了一眼在ImageNet1k上的结果,确实很高,超越了同等大小下的VAN、RepLK
ChatGPT是一款引人注目的产品,它的突破性功能在各个领域都创造了巨大的需求。仅在发布后的两个月内,就累计了超过1亿的用户。它最突出的功能是能够在几秒钟内完成各种文案创作,包括论文、歌曲、诗歌、睡前故事和散文等。与流行的观点相反,ChatGPT可以做的不仅仅是为你写一篇文章,更有用的是它如何帮助指导您的写作过程和写作方法。接下来手把手教你利用ChatGPT辅助完成写作的五种方法。1.使用ChatGPT生成论文的观点在开始写作之前,我们需要让ChatGPT帮我们充实想法,找到论文切入点。当老师布置论文时,通常会给予学生一个提示,让他们可以自由地表达和分析。这时,我们需要找到论文的角度和思路,然
目录 YOLO简介argpares模块detect模块导入部分主函数main()run()资源处理for循环输出结果 YOLO简介YOLO是目前最先进的目标检测模型之一,现在博客上常有的是如何使用YOLO模型训练自己的数据集,而鲜有对YOLO代码的精读。我认为只有对算法和代码实现有全面的了解,才能将YOLO使用的更加得心应手。这里的代码精读为YOLO v5,github版本为6.0。版本不同代码也会有所不同,请结合源码阅读本文。本文使用注释完成对每行代码的解读,文段来概括总结每个代码段。yolov5代码6.0版本github代码地址argpares模块在了解yolov5代码之前,首先要了解py
IV.SYSTEMIMPLEMENTATIONWeadoptmodulardesignfollowingtheintegrationofblockchain.Itbringsmoreflexibilitybyseparatingtheimplementationofdifferentfunctionalities,sowecouldleveragetheadvantagesoftheblockchain-basedsmartcontractwhilereducingoverhead.Figure3illustrateshowdifferentmodulesareinvolvedintheint
【前言】去年的这个时候,一边准备考研复试,一边撰写本科毕设论文,读了很多论文,惊叹于其美观的伪代码算法,所以在之前的教程中教大家使用Aurora在Word中插入伪代码,具体可以看使用Aurora在Word中插入算法伪代码教程!!!亲测有效!!!写论文必备https://blog.csdn.net/jucksu/article/details/116307244效果如图所示(附图是本科毕设当中的K-Means聚类算法伪代码),不算很差但不是很美观,包括一些下标,公式,语法,编辑器反应慢,编程体验差,相关参考资料少等方面的缺陷。研究生以来,接触了Latex,学习了overleaf,所以现在教大家使
目录一种简单上手的暴力论文分析方法——以区块链为例【含项目源码】太长不看版本:最终成果:情况说明论文推荐方面论文投稿方面以下是具体的实现,有其他研究方向想自行确定的请仔细阅读,授人以鱼不如授人以渔第一章、确定对象——研究热点的中国计算机研究生第二章、思路——基于爬虫结合关键字过滤暴力获取所需论文信息第一步:从CCF推荐目录中获取网址01、背景介绍02、数据预处理03、数据写入表格第二步:从中科院分区中获取期刊对应分区第三步:从期刊/会议对应网址中爬取到子网页并进入,获取到其中的标题、年份等信息第四步:针对获取到的表格数据进行分析和整理实际爬取数据量【其实就论文的标题+对应年份】
不同格式的符号命名规则符号latex表示意义x\mathcal{x}x$\mathcal{x}$标量x\bm{x}x$\bm{x}$向量x\mathbf{x}x$\mathbf{x}$变量集A\mathbf{A}A$\mathbf{A}$矩阵I\mathbf{I}I$\mathbf{I}$单位矩阵χ\chiχ$\mathbf{\chi}$样本空间或状态空间D\mathcal{D}D$\mathcal{D}$概率分布D\mathbf{D}D$\mathbf{D}$样本数据(数据集)H\mathcal{H}H$\mathcal{H}$假设空间H\mathbf{H}H$\mathbf{H}$假设集L