[关闭]
@pockry 2016-09-13T07:43:50.000000Z 字数 1478 阅读 4363

微信开源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的缩写。它将用于微信后端的一系列开源项目,后续他们将放出更多的开源项目,敬请期待。

小Q注:以下部分内容由「微信后台团队」授权InfoQ发布,ID:gh_93b1115dc96f

谈谈PhxSQL的设计和实现哲学(上)
谈谈PhxSQL的设计和实现哲学(下)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注