微信开源PhxSQL背后:强一致高可用分布式数据库的设计和实现哲学
《微信开源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客户端不支持服务器故障时连接到新的可用节点,他们提供了多种可选方案.
有些人可能会注意到PhxPaxos和PhxSQL都带有前缀Phx,陈明说Phx代表不死的凤凰,是凤凰英文单词phoenix的缩写.它将用于微信后端的一系列开源项目,后续他们将放出更多的开源项目,敬请期待. PhxSQL的设计和实现哲学PhxSQL发布以来,受到很多关注.作为热爱技术的码农,我们感谢大家的关心和支持,欢迎一切基于技术出发点的讨论.“Show you the code”之后,我们在这里谈谈PhxSQL的设计和实现哲学,也同时回答大家提出的一些疑问. 1、PhxSQL是什么?PhxSQL是一个通过Paxos保证强一致和高可用的的MySQL集群.PhxSQL建立在Paxos的一致性和MySQL的binlog流水基础上.主要原理简单来说:
只要有多于一半机器工作和互联,PhxSQL就可以正常工作. 图 1:PhxSQL架构 2、“强一致”和“高可用”是什么级别?很多MySQL集群方案都宣称强一致和高可用.PhxSQL这方面有什么不同? 大家熟知的Zookeeper提供强一致和高可用.一致性有很多级别,从强到弱分别是:Strict(严格一致性),Linearizable(线性一致性),Sequential(序列一致性),Causal(因果一致性),Eventual等. (编辑:ASP站长网) |