AliSQL 引领开源技术变革之路

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 首届阿里巴巴中间件技术峰会上,阿里巴巴数据库资深专家何登成带来“AliSQL 引领开源技术变革之路”的演讲,本文从回顾AliSQL发展史开始谈起,接着分析了X-KV接口的好处,最后着重分享了X-Cluster——AliSQL集群解决方案。

首届阿里巴巴中间件技术峰会上,阿里巴巴数据库资深专家何登成带来“AliSQL 引领开源技术变革之路”的演讲,本文从回顾AliSQL发展史开始谈起,接着分析了X-KV接口的好处,最后着重分享了X-Cluster——AliSQL集群解决方案。

视频回顾

以下是精彩内容整理:

 

AliSQL发展历史简要回顾

为了去IOE,从2010年我们选择Alibaba的MySQL分支AliSQL。

我们为什么发展一个MySQL分支呢?最主要的思考还是在于生态,当我们去选择开源数据库时,我们会发现MySQL的整个生态、社区对于其它数据库来说是庞大的。我们发展MySQL开源分支是因为开源数据库在Alibaba体量下还是会碰到许多问题,比如性能、功能和可运维性,我们都作了相应优化。

ebbb8ce4a8abc162e5ac813d1656a66779973f14

在2010~2016期间,我们做了100+ 项的优化,包括bug 修复、功能增强、性能突破和可运维性的增强,目前为止,ALiSQL很多的新功能都被吸收到了开源数据库中。

90014c9a7fc260d13fe15084ddde045f10c011c5

图为AliSQL精简架构。我们在各个核心模块都做了改进,比如Binlog、Read View等等。

7a481f9b256747bd0fb028bc222d29b8514a79e1

功能和可运维增强也有很多改进,我们不仅仅是在使用,而是真正做了很多创新,这些创新我们也会回馈给社区。

 

X-KV:高性能K-V接口

X-KV是AliSQL高性能K-V接口,InnoDB Memcached Plugin的扩展。

c05b5530b8f061d88f003c3fe453d7cb02836b4e

为什么需要X-KV?左图是比较经典的部署,有前端的用户请求、数据库,数据库扩展性能时会在数据库和应用层之间加cache,访问频率比较高的放到缓存和内存中,用缓存区域查询问题是目前通用的解决方案,但它不一定是最好的。那么,我们如何保证数据和缓存的数据一致性呢?我们探索从KV接口直接访问存储引擎中的数据,这样可以绕过MySQL Server层的很多复杂逻辑,比如Parse、Optimize、Execute和数据的转换、投影等。

X-KV的具体优化如下:

  • 我们将Data Type支持能力丰富了,不光支持Float/Double、Integer、Decimal,还包括DateTime、Char/Varchar、Custom Format。
  • 用KV访问数据支持的接口比较有限,我们在功能上也做了增强,比如Multi get from multi tables,Non-unique index,composite indexes & prefix search,能够覆盖更多的场景。
  • X-KV新协议。InnoDB Memcached Plugin存在一些问题,通过指定delimiter来区分每一列,delimiter如何选择?NULL和空值无法区分,NULL = 空。

X-KV新协议将以上问题解决了,我们将返回的Field=Meta Info + Data,加Meta Info来描述返回数据,Meta Info有Version|Count|Length1|Length2|Length3…

  • 可运维性优化。官方设计不考虑太多运维性,导致InnoDB Memcached Plugin存在一些问题,比如表结构变更后,如何使得KV接口能够无缝的切换到新的schema, 原有的plugin uninstall ->install 方式对业务有较大影响。X-KV通过扩充Container表,支持了在线的KV配置变更,通过版本号来控制新旧版本的schema配置并自动重新加载。
  • 性能优化。

0

我们模拟阿里的交易数据库上的Query请求做了验证,相对于走SQL,我们提升了5倍左右的性能。

 

X-ClusterAliSQL集群解决方案

e8010d36e69620ed697bc53ae0429ea2523419e0

为什么做X-Cluster呢?

1.         首先是数据一致性的问题。传统的数据库都是主备的异步复制,异步复制带来的是数据质量问题;官方为了解决问题,提出半同步复制,但半同步复制过段时间会降级。所以它们都很难百分百保证数据质量。

2.         持续高可用问题。当我们搭建完MySQL主备后,主备本身不会做切换,不会做高可用,真正的高可用是在主备之外使用一个外部组件,比如基于zookeeper的HA来提供高可用功能。

3.         区域化/全球化部署问题。过去几年我们分享最多的是异地双活和异地多活,我们要做到真正多城市多活高可用,需要集群能耗跨城市部署,跨国际部署。

4.         上下游生态联动。我们的数据库不仅仅作数据存取,下游还要给其他系统作消费。

能不能用一种技术尝试解决掉这些问题呢?这是我们做X-Cluster的初衷。

8a5f880bc1117f2bb246539e872f65e992c50725

我们的设计目标是:

  • 一体化架构:运维友好
  • 极致性能:同城三副本相对于单机性能下降在10%以内
  • 可异地部署:异地部署,延时增加,但是保持高吞吐
  • 稳定性:网络抖动高容忍性
  • 兼容性:对原有生态100%兼容

我们交付出一个AliSQL集群化的解决方案,将分布式一致性协议Paxos引入到AliSQL上,我们可以去组件一个AliSQL真正的集群,通过Paxos实现日志的强同步,实现自动化选主。

690e8b131479fd5c9bc26e168998f40a449aa8be

X-Cluster核心组件X-Paxos,X-Paxos就是高性能分布式一致性算法。

 

X-Cluster核心技术

Batching & Pipelining

c4c756151654a77baed0a76aea1c4dc6076b4c42

如何实现再有网络延时,尤其有异地网络延时、长延时、短延时以及不同网络条件下怎么样去做高性能真正与单机性能几乎持平?我们使用了Batching&Pipelining。

347af1703e1fc5138c3ccad145cafaf50a755f97

Pipelining是当一批往follower发送时,follower返回之前能不能把下一批在leader上已经完成的事务再发出去,这样就会同时有多批事务从leader等待follower达成多数派,这就是所谓的Pipelining。原来Batching时,是一次只能发一批,等应答后再发下一批,每一批至少会有一个网络的RTT,Pipelining好处是在第一批没有应答前就可以发送第二批···

引入Pipelining就会带来乱序,导致日志空洞,会出现乱序接收。Paxos可以作乱序确认,乱序确认的好处是,如果有日志空洞,任意两个副本达成多数派,都认为事务提交成功。每一个follower上都有空洞,但是将两个follower拼在一起,它是一个完整的日志流。

Locality Aware Content Distribution

8beba47dd56e257599e75d9289f2585380c8d99c

有了Paxos之后,多少副本都可以。为了解决Leader出口网络,降低跨Region长传链路带宽,我们在跨Region时使follower可以连在follower上,用级联的方式去复制。

日志实现

790b492ffdfd0c83df0509faaeacab6df7655778

还有我们做了一体化日志:插件式X-Paxos的日志,归一化的ConsensusLog代替Binlog和RelayLog,全局统一的Log Index。

Asynchronously Commit

8e3631f3db49ede083f6c642e283aaef45d62a6e

我们还将工作线程和提交线程异步化,工作线程只负责处理事务提交之外的用户请求,在用户发送提交请求后,工作线程将事务推入提交等待队列后就继续处理下一个用户请求。而提交等待队列的中的事务由另外一批线程来负责处理,这样能够充分解放工作线程,减少线程的等待,提高高延时下的吞吐性能。

X-Cluster: vs MySQL Group Replication

c81182c0a0748b00d17e6f435fd7d7196d66b6fa

85f442f7d7a956dbabec99e0ff1fef98ca6d2338

我们与MySQL Group Replication对比,做了简单的性能测试。可以看出,INSERT同城比官方好两倍性能,延时要小很多;30ms 网络延时的部署下,我们仍旧能够达到五万多,延时只有官方的三分之一,性能是五倍。

X-Cluster生态

e79a1ebc4632371cf940c1e003eb44d93549b9af

我们面临的问题很多,比如备份、日志订阅、只读节点等,所以我们要超越数据一致性和持续可用,Paxos关联的东西有很多。

持续备份

原有MySQL备份逻辑是:定期备份Binlog文件;RPO一般比较大,例如:大于5分钟;备份跟MySQL的数据一致性保障困难。

X-Cluster可以解决备份的一些不便之处:备份节点作为X-Cluster的一个Learner节点,实时推送X-Cluster上达成多数派的日志;RPO < 1秒;由于备份的一定是达成多数派的日志,因此无数据一致性问题。

自动化高可用

f966d9f8be8c0095a94aff45d9e24216e1d97ca3

原有MySQL高可用方案外部组件依赖:ADHA、ZK。而X-Cluster自动化高可用,Client、Server一体化,Client也是数据库一个learner节点,它需要消费成员变更日志,成员变更日志达成多数派后推给learner节点,Driver就会知道主备发生切换,可以直接连新leader,没有外部组件依赖,达到自动化高可用。

自动化增量日志消费

原有MySQL下游日志消费准实时消费MySQL产生的日志,问题之一是数据一致性;问题之二是数据库主备切换与下游消费端的联动。

X-Cluster自动化增量日志消费,日志消费节点作为X-Cluster的Learner节点,只消费达成多数派的日志,保证数据一致性;X-Cluster自动选主,新Leader自动向日志消费节点推送新日志,彻底解决联动问题。

区域化/全球化部署

  • 按需增加Learner节点:增加读能力,但是不会带来强同步开销
  • 按需增加Log节点:Log节点只有日志,没有数据;Log节点可参与选主,但是没有新增存储开销。低成本节点;3节点X-Cluster = 2节点MySQL主备。
  • 权重化体系:可以指定节点选主权重,控制每个节点的选主优先级。

X-Cluster实战总结

一路走来,我们并不是一帆风顺,也踩过很多坑,比如:

  • 异常处理:硬件异常,网络异常:Leader Stickiness
  • Batching & Pipelining:极大事务,极小事务,不同网络时延下的Batching/Pipelining策略,网络异常情况下的Batching/Pipelining策略
  • 全球化部署下的优化:权重体系、热点带来的影响

 

 

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
监控 Cloud Native 持续交付
云原生技术的崛起与发展
在当今数字化时代,云计算和云原生技术已经成为企业信息技术架构的重要组成部分。本文将探讨云原生技术的定义、特点以及其在当今技术发展中的重要性,同时分析云原生技术对于企业数字化转型的意义和影响。
13 2
|
1月前
|
边缘计算 Cloud Native 持续交付
探索未来科技趋势:云原生技术的应用与发展
随着数字化时代的到来,云原生技术作为一种创新的软件开发和部署范式,正逐渐改变着传统 IT 行业的格局。本文将深入探讨云原生技术的概念、特点以及在当今技术领域中的应用与发展趋势,旨在帮助读者更好地理解并把握这一引领未来的技术趋势。
|
1月前
|
机器学习/深度学习 人工智能 安全
开源软件:推动技术发展的强大引擎
开源软件:推动技术发展的强大引擎
32 0
|
5月前
带你读《“DNS+”发展白皮书(2023)》——(四)技术普惠和生态共建
带你读《“DNS+”发展白皮书(2023)》——(四)技术普惠和生态共建
|
11月前
|
供应链 Kubernetes 安全
《云计算加速开源创新》——圆桌讨论:云计算催生开源治理领域创新
《云计算加速开源创新》——圆桌讨论:云计算催生开源治理领域创新
|
11月前
|
存储 Cloud Native 关系型数据库
《云计算加速开源创新》——打造世界级云原生数据库开源社区(上)
《云计算加速开源创新》——打造世界级云原生数据库开源社区(上)
|
11月前
|
运维 Cloud Native 前端开发
《云计算加速开源创新》——打造世界级云原生数据库开源社区(下)
《云计算加速开源创新》——打造世界级云原生数据库开源社区(下)
|
11月前
|
运维 Cloud Native 数据挖掘
《云计算加速开源创新》——云时代下的DataOps开源技术演进
《云计算加速开源创新》——云时代下的DataOps开源技术演进
|
机器学习/深度学习 人工智能 供应链
年度必读!《全球开源生态研究报告(2022年)》:全球开源生态从“高速繁荣”向“稳步求精”演进
年度必读!《全球开源生态研究报告(2022年)》:全球开源生态从“高速繁荣”向“稳步求精”演进
372 0
|
供应链 安全 前端开发
千行百业,可信开源——2022 OSCAR 开源产业大会正式启动
千行百业,可信开源——2022 OSCAR 开源产业大会正式启动
260 0
千行百业,可信开源——2022 OSCAR 开源产业大会正式启动

热门文章

最新文章