加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 安全 > 正文

微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学

发布时间:2021-01-08 13:51:49 所属栏目:安全 来源:网络整理
导读:副标题#e# 《微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学》要点: 本文介绍了微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学,希望对您有用。如果有疑问,可以联系我们。 微信技术团队最近在开源开放上动作不断,后端方
副标题[/!--empirenews.page--]

《微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学》要点:
本文介绍了微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学,希望对您有用。如果有疑问,可以联系我们。

微信技术团队最近在开源开放上动作不断,后端方面前段时间他们开源了生产级paxos类库PhxPaxos,现在又开源了高可用分布式数据库PhxSQL,本文我们将了解一些PhxSQL背后的故事,以及它设计和实现的哲学.

老司机简介

陈明,PhxSQL负责人.2012年加入微信,先后负责微信消息、朋友圈、账号、关系链、全球分布式部署、PhxSQL等项目,见证了微信后台基础架构支持从一亿用户到八亿用户、从单点到全球分布、从粗放到追赶和超越的历史过程.在加入微信之前,陈明在搜搜从事搜索架构建设和在微软亚洲研究院研究分布式架构及存储.陈明从清华大学计算机系获得博士学位,研究方向是分布式系统.

PhxSQL开源地址见:

https://github.com/tencent-wechat/phxsql

为何研发PhxSQL?

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群.PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下、即可提供服务,并且自身实现自动Master切换、保证数据一致性.PhxSQL不依赖于Zookeeper等任何第三方做存活检测及选主.PhxSQL基于MySQL的一个分支Percona 5.6开发,功能和实现与MySQL基本一致.

PhxSQL可以提供和zookeeper相同的强一致性与高可用性,并且支持serializable级别的事务隔离.

陈明表示,微信研发PhxSQL是为了解决在应用MySQL时一个普遍且巨大的痛点:强一致和高可用,MySQL不支持PhxSQL面向的分布式环境下强一致和高可用应用场景,而这在金融和账号类关键应用是必须的.据他们所知,目前还未有类似的公开方案,因此,只能自己研发.

后面的正文里面,也会详细的讨论MySQL在分布式环境下的痛点.

PhxSQL目前应用在微信后台的账号系统、企业微信、及QQ邮箱.其中一个关键服务的集群由5台服务器构成一个组,容忍两机同时故障,写高峰2000/秒,读高峰60000/秒.

性能与架构迁移

在他们的基准测试中,PhxSQL相对于MySQL的写性能有16-25%的提升,读性能持平.具体测试报告参见 github/phxsql 网址.实际上,PhxSQL的主要目标是强一致、高可用、和serializable事务隔离;性能只是一个关注点.另外,PhxSQL将很快支持性能更好的5.7版本MySQL.

PhxSQL设计的一个基本原则就是完全兼容MySQL,MySQL客户端不需要任何修改就可以直接访问PhxSQL,以便于将现有的.但是由于MySQL客户端不支持服务器故障时连接到新的可用节点,他们提供了多种可选方案.

  1. PhxSQLProxy可以将客户端请求转发给可用节点.
  2. PhxSQL client lib支持自动切换服务器,原有应用程序只要在源码中创建连接时传入PhxSQL服务器IP列表、链接时将MySQL client lib换成PhxSQL client lib即可.
  3. VIP等方案也可以和PhxSQL配合使用.

有些人可能会注意到PhxPaxos和PhxSQL都带有前缀Phx,陈明说Phx代表不死的凤凰,是凤凰英文单词phoenix的缩写.它将用于微信后端的一系列开源项目,后续他们将放出更多的开源项目,敬请期待.

PhxSQL的设计和实现哲学

PhxSQL发布以来,受到很多关注.作为热爱技术的码农,我们感谢大家的关心和支持,欢迎一切基于技术出发点的讨论.“Show you the code”之后,我们在这里谈谈PhxSQL的设计和实现哲学,也同时回答大家提出的一些疑问.

1、PhxSQL是什么?

PhxSQL是一个通过Paxos保证强一致和高可用的的MySQL集群.PhxSQL建立在Paxos的一致性和MySQL的binlog流水基础上.主要原理简单来说:

  1. Paxos选出主机
  2. 主机把本机MySQL设置成可写的MySQL主机,在MySQL写binlog流程中拦截binlog流水、发送到Paxos,形成全局的binlog流水
  3. 备机把本机的MySQL设置成只读的MySQL备机,MySQL备机从全局binlog中拉取流水,重放和执行,从而主备MySQL一致
  4. 针对常见的业务场景,PhxSQL提供两个服务端口:强一致读写端口(ReadWritePort)和只读端口(ReadonlyPort);对数据要求强一致的业务,通过ReadWritePort来读写;只要求能读取但不要求最新数据的读请求(比如一些定时对账业务),可以通过ReadonlyPort来读取

只要有多于一半机器工作和互联,PhxSQL就可以正常工作.

图 1:PhxSQL架构

2、“强一致”和“高可用”是什么级别?

很多MySQL集群方案都宣称强一致和高可用.PhxSQL这方面有什么不同?

大家熟知的Zookeeper提供强一致和高可用.一致性有很多级别,从强到弱分别是:Strict(严格一致性),Linearizable(线性一致性),Sequential(序列一致性),Causal(因果一致性),Eventual等.

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读