mysql中间件


mysql proxy,mycat, 都是比较靠谱的中间件软件,不管是用来做读写分离,还是做分库分表。

问题是现在有比使用中间件更好的解决方案,这就是运行在公有云上的,基于中间件技术 + 公有云数据库打造成的分布式数据库。 目前典型的有阿里云的DRDS/PetaData,腾讯云的DCDB FOR TDSQL, 以及UCloud最近推出的UDDB。

我们所说的更好, 首先体现在系统的管理和运维上。云上的,基于中间件的分布式数据库,相对于单纯的中间件来说, 创建/管理方便、关键指标可视化/自动化告警、复杂运维(如水平扩展中的数据迁移)自动化等功能点,都是节省 DBA 时间的利器,让 DBA 可以专注于业务存储架构和优化,而不用疲于应对日常的系统管理和运维。

单纯使用中间件软件来做读写分离或分库分表,管理和运维的工作量和复杂度会有多高? 我们可以举两个例子来看下。

1. 假如你要搭建一个读写分离方案。 那么: 1.1 你要去熟悉一款中间件,了解这款中间件的部署方式,熟悉其配置文件; 1.2 你需要去搭建一个一主多从的数据库集群,配置并测试好好主节点和多个从节点中间的复制关系; 1.3 上面两步完成后,你可以将中间件和数据库集群连接起来了。通过配置好中间件的配置文件, 并设置各节点只读请求的比例,完成系统的组装,同时进行一些测试,保证系统能按照预期进行工作。

但做到这个程度,还远远不够。这样的系统,只是刚好能工作,还远未达到 “工业标准”。比如,还需要去中间件这个单点。因此你需要再增加一个中间件节点,并安装 keepalived 来做 ip 漂移, 保证一个节点后挂掉有另一个节点继续服务;又比如你还需要设置系统监控和告警,保证系统故障能够及时发现;另外,可能你还需要将一些系统关键指标可视化, 提供给产品或你的boss作为参考。要做到这一点,你需要采集中间件的日志,并写一个程序来做展现。

而上面所有的操作, 对于公有云上的分布式数据库来说,是点点鼠标就可以完成的事情。可能在阿里 DRDS 那块, 还需要4-5步的操作,等待5分钟左右; 但是对于 UCloud 的 UDDB 来说, 只需要一步操作,时间不超过30s。

2. 假如你要搭建一个水平分表方案。那要做的事情就更多了。除了比读写分离更复杂的系统搭建, 还有两个麻烦的事情, 一是建表,二是扩容。

先来看建表。基本上每次建一张表时,你都需要先到每个数据库节点上,创建好子表,然后修改中间件配置文件并重启,让分表规则生效。

而扩容操作,我相信这是所有开发或运维同学最不愿意干的事情。水平扩容意味着你需要将海量的数据, 从老的数据库节点迁到新增的节点,以匹配新的分表规则,在整个过程必须做到不丢一条数据。风险之高,过程之漫长,相信做过的人都深有体会。对于业务来说,水平扩容也是不得已而为之的事情,因为水平扩容需要停服。

公有云上的分布式数据库, 为建表和扩容提供了极简的解决方案。以UDDB为例,UDDB为用户提供了和MySQL水平分区表语法一致的建表语句, 你只需要通过Mysql客户端发送一条建表语句, 即完成了子表创建+分表规则生效等全部操作; 同时UDDB对系统扩容提供了一键式的解决方案,用户只需要点击一个按钮,即可等待系统扩容操作自动完成,期间系统不停服,只是在扩容期间,每隔一段时间,会有几毫秒到零点几秒的访问中断(同时扩容期间不能处理DDL语句),整个过程能够保证数据的一致性和可靠性。

当然,不管是阿里DRDS,还是UDDB,都是需要收费的(阿里DRDS 1480/月,UDDB 1200/月,目前公测阶段免费)。但我认为,这个费用值回票价。它会让你摆脱复杂又重复的中间件管理和运维工作,开始思考和解决对业务更为重要和关键的问题,特别是对于创业团队而言。

有可能你已经对中间件的运维了如指掌,积累了一整套方法和工具,横练出一身本领, 觉得公有云产品的这套解决方案,可有可无;也有可能你过去每天都在潜心钻研中间件的运维和源码, 不忍放弃已经投入的许多时间和精力。但我认为,只要公有云产品能够解决你的问题,就应该积极拥抱它。因为中间件技术的发展趋势来看,自动化的管理和运维,程序取代人,是大势所趋。在一个剧烈变化的时代,咱们不要做一个手拿锤子,每天只等着敲钉子的人。必然还有很多无可替代,但更关乎团队发展甚至生死的工作;肯定还有很多创新性的,可以带来更多价值的技能,值得我们去发现和探索。而对于人肉做过水平扩展和数据迁移的人来说,有什么问题是我们不能拿下的呢。

云上的分布式数据库,比单纯使用中间件更好,其次体现在服务上。任何一个行业的发展,势必导致专业的分工。对于公有云研发团队而言, 能够生存下来的唯一可能,是这个团队能够比客户做的更好,比竞争对手做得更好,而要做到这一点只能是更深入的钻研和更优质的服务。而从规模效应而言,一个每天负责处理几十家大客户数据库问题的,云计算公司的DBA,和一个每天只负责解决自家公司数据库问题的DBA而言, 其锻炼强度和升级速度是无法比较的。对于中间件的研发和运维也是同样如此。因为接触了广大的客户,因为必须要解决客户的问题,所以必然自身的能力需要也能够不断提高,从而产品成熟度和服务能力也不断提高。总之,一款公有云产品,只要能够活下来而且活好几年,其团队技术能力和服务能力,必然是造诣极深的。

UDDB是基于UCloud的UDB产品构建,本质上只是在UDB上面,增加一款分布式中间件,很多能力,包括存储节点的高可用,读写分离节点组,都是复用UDB的能力。因此,整个产品的稳定性值得信赖。

转载:https://www.zhihu.com/question/31754653/answer/127013070

原文地址:https://www.cnblogs.com/zhou2019/p/10918131.html