加入
我们
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

深入解读阿里云数据库POLARDB核心功能会话读一致

2018-12-24 09:15 出处:未知 人气: 评论(

  POLARDB 是阿里云自研的下一代关系型云数据库,100% 兼容 MySQL,存储容量最高可达100 TB,性能最高提升至MySQL 的 6 倍,单库最多可扩展到 16 个节点,适用于企业多样化的数据库应用场景。POLARDB 采用存储和计算分离的架构,所有计算节点共享一份数据,提供分钟级的配置升降级、秒级的故障恢复、全局数据一致性和免费的数据备份容灾服务。POLARDB 既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、自我迭代的优势,而成本只有商用数据库的 1/10。本文

  POLARDB架构我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点。对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把所有节点的资源整合到一起对外提供服务。

  用过MySQL的都知道,MySQL的主从复制简单易用,非常流行,通过把主库的Binlog异步地传输到备库并实时应用,一方面可以实现高可用,另一方面备库也可以提供查询,来减轻对主库的压力。

  为了解决第一个问题,我们引入了读写分离代理,如下图,对应用程序非常友好。一般的实现是,代理会伪造成MySQL与应用程序建立好连接,解析发送进来的每一条SQL,如果是UPDATE、DELETE、INSERT、CREATE等写操作则直接发往主库,如果是SELECT则发送到备库。

  POLARDB是读写分离的架构,传统的读写分离都只提供最终一致性的保证,主从复制延迟会导致从不同节点查询到的结果不同,比如一个会话内连续执行以下QUERY:

  在读写分离的下,最后一个查询的结果是不确定的,因为读会发到只读库,在执行SELECT时之前的更新是否同步到了只读库时不确定的,因此结果也是不确定的;因为有这个问题,所以就要求应用程序去适应最终一致性,而一般的解决方法是: 将业务做拆分,有高一致性要求的请求直连到主库,可以接受最终一致性的部分走读写分离;显然这样会增加应用开发的负担,还会增大主库的压力,影响读写分离的效果;

  为了解决这个问题,在POLARDB中我们提供了会话一致性或者说因果一致性的保证,会话一致性即保证同一个会话内,后面的请求一定能够看到此前更新所产生版本的数据或者比这个版本更新的数据,保证单调性,就很好的解决了上面这个例子里的问题;

  在POLARDB的链路中间层做读写分离的同时,中间层会track各个节点已经apply了的redolog位点即LSN,同时每次更新时会记录此次更新的位点为Session LSN, 当有新请求到来时我们会比较Session LSN 和当前各个节点的LSN,仅将请求发往LSN = Session LSN的节点,从而保证了会话一致性;表面上看该方案可能导致主库压力大,但是因为POLARDB是物理复制,上一篇已详细介绍过,速度极快,在上述场景中,当更新完成后,返回客户端结果时复制就同步在进行,而当下一个读请求到来时主从极有可能已经完成,然后大多数应用场景都是读多写少,所以经验证在该机制下即保证了会话一致性,也保证了读写分离负载均衡的效果;

  对上述内容敢兴趣的同学可以报名参加1月19日(北京)的阿里云数据库技术沙龙——云原生数据库POLARDB核心技术分享,点击阅读原文,或者扫描如下二维码即可报名,名额有限,抓紧报名哦~

  声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

分享给小伙伴们:
本文标签: 什么是数据库

更多文章

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。


Copyright © 2002-2011 DEDECMS. IT之家 版权所有 Power by DedeCms