微信最新开源的PhxSQL

在编者看到“【重磅】微信开源PhxSQL:高可用、强一致的MySQL集群”时,由衷赞叹,这等造福广大DBA及运维同仁的事情,真心赞。腾讯及微信的开放,真的不是说说而已。

本文由资深DB从业者撰写,相信其本意更多聚焦在技术的逻辑性,及引发的思与辩。祝愿PhxSQL越来越好,让世界看到中国开源的力量。

导语

今天微信在微信朋友圈发表了其在MySQL领域实现的一套高可用、强一致的集群方案,顿时朋友圈刷屏,都在啧啧称赞。

有些人转发是用来Mark一下,留着后面细细品尝,有些人应该是看过了,说是高质量的开源,而还有一些人,说是有Galera或者group replication的味道。

在我知道这事儿之后,心里很高兴,觉得太强大了,想必是一个非常好的方案,首先要感谢微信团队,在开源的路上又带了一个好头。

在看完之后,我心里面是忐忑的,因为目前所能看到的实现架构或者支持的功能与朋友圈转发的架势来看有很大的出入,所以关于微信的这个开源,我问了一下我周边的朋友,我说为啥这个这么火?

我自己觉得有两方面的原因:

  • 一是微信开源这个动作本身,微信在国内的影响力太大了。
  • 二是这个MySQL解决方案,MySQL太需要靠谱的高可用和一致性解决方案了,目前来看,还无出Galera其右者。

腾讯最近在这方面做了很多工作,开源了不少产品,这是值得庆贺的,这是圈内的福利,圈内的良心,如果非常火,这是有道理的,这是圈内的正能量,我一直希望有更多的公司或者个人,能开源更多的好产品,一起进步一起成长。

我花了一个下午的时间认真研究了一下PhxSQL,优点已经在别的文章里面都说得很多了,我就不再赘述了。

从技术方案的角度来看,我来说说在研究或者将来计划使用PhxSQL的话,有什么需要注意的地方。

时间比较仓促,也许有理解不对的地方,也请大家支招。现在还没来得及看代码,以后如果有机会继续深入研究的话,可以在后续文章中加以说明。

我觉得大家在研究的时候,要注意以下几个部分:

一、 架构很复杂,部署一套需要很多模块

这个是很明确的,图1中可以看到phxSQL的架构,原本一套集群只有MySQL三个节点,现在加入了两个新的服务:Phxbinlogsvr、Phxsqlproxy。

很明显,模块越多,整个集群的故障率就越高,不可靠性就越高,部署这么一套集群需要多久?

需要考虑入手门槛。

模块多了,机器压力及相应成本就增加了,同时DBA需要运维的对象就多了,压力变大了,这都是需要考虑的问题。

二、究其根本,还是主从复制机制,摆脱不了这种机制下的弊端

有些评论说到了,其实现架构有Galera或者group replication的味道,在我研究之后,这两者之间还是差距比较的大。

说白了,PhxSQL还是主从架构,只是将原来的Binlog从主节点复制到从节点的架构,修改为从主节点,复制到Phxbinlogsvr集群,然后MySQL从节点再从Phxbinlogsvr中拉取。

这样的实现方式,增加了中间一层服务,势必数据复制的延迟时间就会有所增加,主从延迟之后,还如何能做到对用户无影响的随意切换呢?

或者说,如果当前正在主从延迟(司空见惯了),那自动切换程序如何选择?等待?还是强制切换?

这种情况下,要么牺牲一致性,要么牺牲可用性,很难做到像Galera那样的两全。

三、单点写入,不支持多点写入

接着上面说,Galera或者group replication,最大的革命是支持了多点写入,这个特性我认为是最大的最有意义的特点。

因为目前在MySQL主从复制的方案中,我们所做的高一致性的工作,都是因为不能双写(单点写入)所导致的,而支持了多点写入即可实现对应用程序零影响的去运维了。

而PhxSQL的多点写入,从架构图1中可以看出,支持的多点写入是通过中间层来转发的,中间层Phxsqlproxy还是找到了写节点,将写入打到Master上面,这完全不是一个概念。

如果我想主动切的,还是要把当前的Master设置为Readonly,然后找到新的Master取消Readonly,然后继续写入,那这样势必影响了业务。所以主从复制的模式先天性的不支持多点写入。

四、除了不需要回滚这个特点之外,与半同步无异

从宣传文章中的图2.1来看,这个图所示的是我们平常所使用的半同步的示意图。

上图是我们每个人都熟悉的,而我们可以看看PhxSQL的图2.2。

很明显可以看得出,这个有点像5.7中的等待多点节点ACK的半同步了,但这里等待的是Phxbinlogsvr返回的ACK。

是的,在使用了Paxos协议的情况下,Phxbinlogsvr会向其它几个节点复制Binlog,但集群中只有3个节点的情况下,必须要等其它2个节点的ACK,不然不能超过半数。

那么此时和3个节点的半同步相比,性能似乎也没什么太大的区别。所以从这个图中可以看到,实际上实现的架构就是半同步。

另外,宣传文章中说到了,PhxSQL可以保证的是从库节点不回滚,这个说法我是支持的,半同步确实有时候是需要回滚的,PhxSQL解决了这个问题。解决方案是,针对Master,可能还是存在回滚数据的可能性的,但对于Slave,只需要补数据即可。

但我的疑问是,用这么复杂的架构来解决这个回滚的问题,有多大产出比?

五、Binlog存储到Phxbinlogsvr后,如何实现并行应用

这个算一个问题,在MySQL5.6中,至少是可以并行复制的,或者5.7的话,更好的并行复制。

而在PhxSQL中,因为中间插入一个Phxbinlogsvr,那从Phxbinlogsvr到MySQL的应用,是如何支持并行的,是像原生的把Phxbinlogsvr做为一个主库,向MySQL从节点Send,让MySQL用原生的复制?还是自己做了新的开发?

六、监控由谁来做?

上面已经说过,这么一个复杂的架构,每个模块本身的存活及健壮性如何保证,也就是它们的监控程序如何来做,监控程序是否可以做到公布式的监控?或者这个监控就是相互监控?

这也算一个问题吧,因为监控是集群健壮性必不可少的一部分。

七、和中间层加半同步的区别

最后一点,如果舍弃半同步的数据回滚(假设可以接受),那如果和一个中间层加上半同步的实现方案相比,优势在哪里?

时间: 2024-08-11 22:58:13

微信最新开源的PhxSQL的相关文章

最新-开源可视化安全管理平台Ossim5.0使用

最新-开源可视化安全管理平台Ossim5.0使用 Ossim5.0在4月20号由Alienvault公司对外发布,它从2003年诞生到现在,经历了十多年的不断锤炼,目前已经是一款成熟的开源SIEM产品,以下是OSSIM在内网监控中发挥作用的截图(点击每张截图均可放大). 用Nagios监控,一键搞定. 快速预览你的资产 漏洞扫描一键完成 及时了解全球IP信誉情况 详细显示资产细节(漏洞.报警.事件.可用性.服务.所属组) 有了基线指标才能分析---网络行为异常分析(对这一功能,其他监控工具望尘莫

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor 在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器. 这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东西呢?我们是否真的可以携着C#语言进入前端的市场中? 不如现在就跟我一起体验dotnet blazor

凡信2.0beta发布-超仿微信的开源项目 (更新了朋友圈和钱包)

凡信的第一个版本于2015年4月份发布,之后由于自己工作忙碌的原因,一直没有重大的更新内容.2016年1月份抽空做了一些更新.主要是加入了朋友圈和钱包这两块内容,以及对第一版的一些bug的修复.凡信2.0依然是基于环信IM通信云SDK开发的,当前状态下第三方通信云趋于火热,环信也这一年走过四轮共计几千万美元的融资,开发者用户也呈现几万的增长.这个项目也算是给需要集成IM云的开发者提供一个参考,给刚接触Android开发,对Android整体开发框架还很模糊同学提供一个学习的教材. 关于此次更新的

微信官方开源UI库-WeUI

概述 WeUI是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计,可以令用户的使用感知更加统一.包含button.cell.dialog.toast.article.icon等各式元素. 这有什么好处呢?其实从上面也可以看到官方的话,就是让你的应用跟微信官方版本更加统一,而没有违和感.当然,更重要的是,这样的库在某些时候可以提供你的开发效率哦.github地址:https://github.com/weui/weui 使用 方法一: 使用bower进行安装 bower insta

阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本,然后客户端解析这个JSON文本,再把对应数据展现到页面上. 但在编程的时候,处理JSON是一件麻烦事.在不引入任何轮子的情况下,我们通常需要先把JSON转为Dictionary,然后还要记住每个数据对应的Key,用这个Key在Dictionary中取出对应的Val

signalR制作微信墙 开源

微信墙 上一篇文章中已经用PHP搭建了一个微信墙获取信息的服务器,我这里使用微软的singnalr搭建一个客户端,singnalr是一个为开发者开发实时应用的 一个库文件,支持windows server 2008 r2+,win7,win8 windows azure,可以使用iis8托管,iis7必须支持 extensionless URLs .下图是浏览器支持情况 其实据我所知,你可以再微软的任何技术中使用singnalr比如wpf,winform等等中都可以,只不过要引入相应的dll文件

微信最新自定义菜单事件

自定义菜单针对开发者增加调起扫一扫.发图片.发地理位置等能力 自定义菜单作为能够帮助公众号丰富界面,让用户更好更快地理解公众号的重要功能,现在针对开发者增加了点击菜单后调起扫一扫(支持二维码/一维码).发图片.发地理位置的能力,需开发实现.原有自定义菜单开发权限的公众号,均可获得以上能力.增加的详细能力如下: 1. 扫码推送事件 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息. 2. 扫码推送事

最新开源DBLayer,数据库操作也可以很简单

DBLayer,我最近开源的数据库轻量级orm框架,目前支持sqlserver.mysql.oracle, 特别做了分页的封装. 这个框架从七八年前开始逐渐升级而来,也经历了不少项目,希望可以将大家从sql字符串中解放出来. 开源地址 https://github.com/wutao0315/DBLayer 访问代码案例 var id = TheService.InsertEntity<SysLog, long>(         () => new SysLog()         {

Defcon 23最新开源工具NetRipper代码分析与利用

0×01 研究背景 在分析了俄罗斯人被曝光的几个银行木马的源码后,发现其大多均存在通过劫持浏览器数据包来获取用户个人信息的模块,通过截获浏览器内存中加密前或解密后的数据包来得到数据包的明文数据.在Defcon 23被发布的工具NetRipper具备了以上恶意银行木马的这一能力,其开源的代码结构清晰,易于扩展,研究该工具对于研究该类恶意行为很有意义.其github地址在[github] ,作者还提供了metasploit和powershell版本的利用模块,本文将分析其不同版本模块均会用到的c++