微信高可用分布式数据库PhxSQL设计与实现

作者:陈俊超,腾讯微信后台高级工程师,前期主要负责微信后台分布式架构设计及核心模块的开发,包括微信摇一摇,查看附近的人,朋友圈架构,群聊等。目前致力于关系型数据库PhxSQL的设计和开发。
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》

本文详细描述了PhxSQL的设计与实现。从MySQL的容灾缺陷开始讲起,接着阐述实现高可用强一致的思路,然后具体分析每个实现环节要注意的要点和解决方案,最后展示了PhxSQL在容灾和性能上的成果。

设计背景

互联网应用中账号和金融类关键系统要求和强调强一致性及高可用性。当面临机器损坏、网络分区、主备手工或者自动切换时,传统的MySQL主备难以保证强一致性和高可用性。PhxSQL将MySQL集群构建在一致性完善的Paxos协议基础上,保证了集群内MySQL机器之间数据的强一致性和整个集群的高可用性。

原生MySQL的容灾缺陷

【MySQL容灾方案】

MySQL有两种常见的复制方案,异步复制和半同步复制。

  1. 异步复制方案
    Master对数据进行commit操作后再将数据异步复制到Slave。
    但数据无法保证成功复制,也就无法保证MySQL主备间的数据一致性,如图1所示。

图1  MySQL异步复制流程

图1 MySQL异步复制流程

  1. 半同步复制方案
    Master对数据进行commit操作前将数据复制到Slave,确认复制成功后再对数据进行commit操作。
    绝大多数情况下,半同步复制能保证MySQL主备间的数据一致性,如图2所示。
    图2  MySQL半同步复制流程
    图2 MySQL半同步复制流程

【MySQL重启流程】
半同步方案中的“半”是指Master在等待Slave的ACK失败时将退化成异步复制。同时,MySQL在重启时也不会执行半同步复制。

如图3中的id(Gtid)=101数据是Master机器中新写入到Binlog File的Binlog数据。但Master在复制数据到Slave的过程中MySQL宕机导致复制失败。MySQL重启时,数据(id=101)会被直接进行commit操作,随后再将数据异步复制到Slave。(下文将已经写入到Binlog File但未进行commit操作的数据(id=101)称为Pending Binlog。)

图3  MySQL重启时直接提交Pending Binlog

图3 MySQL重启时直接提交Pending Binlog

该情况下MySQL容易出现Master-Slave之间数据不一致的情况,官方也描述了该问题。

  1. http://bugs.mysql.com/bug.php?id=80395
  2. https://mariadb.atlassian.net/browse/MDEV-162

【MySQL重启缺陷】
下面将解释MySQL在重启时不执行半同步会产生数据不一致的原因。

当对上述例子中的Pending Binlog(id=101)进行复制时Master宕机导致复制失败,随后Slave1切换成新Master并开始提供服务(写入id=201的数据)。此后,当旧Master重启时,Pending Binlog(id=101)不会被重新进行复制而直接进行commit操作,从而导致旧Master比新Master多了一条数据,旧Master无法成为新Master的Slave,需要人工处理掉这条数据之后,才能让旧Master作为Slave提供服务,如图4所示。
图4  MySQL重启缺陷导致主备数据不一致

图4 MySQL重启缺陷导致主备数据不一致

上述case只对旧Master的数据造成影响,不会使得MySQL Client读取到错误数据。但当Master连续出现两次宕机后产生Master切换,两次宕机间隔较短使得Pending Binlog未能及时复制到Slave,且期间有查询请求时(Master宕机→Master重启→查询数据→Master宕机→Master切换),MySQL Client会产生如图5所示的幻读(两次读到的结果不一致)。
图5  MySQL重启缺陷导致Client产生幻读

图5 MySQL重启缺陷导致Client产生幻读

【MySQL Client分裂】
当Master出现故障且产生Master切换时,由于原生MySQL缺乏调用端的通知/重定向机制,使得不同的Client可能访问不同的Master,导致数据的错误写入和读取,如图6所示。
图6  MySQL进行Master导致Client端分裂

图6 MySQL进行Master导致Client端分裂

【MySQL缺乏自动选主机制】
由于半同步复制不需要等待所有Slave的ACK,因此当Master出现故障时,需要选有最新Binlog的Slave为新的Master;而MySQL并没有内置这个选主机制,如图7所示。
图7  MySQL缺少自动选主机制

图7 MySQL缺少自动选主机制

【MySQL的容灾缺陷总结】
MySQL在容灾方面存在的问题:

  1. Master切换时主备数据不能保证一致:Master重启并切换可能导致MySQL主备间数据不一致。Master重启并切换可能导致MySQL Client产生幻读。
  2. 原生MySQL缺乏高可用机制:Master切换导致调用端分裂。缺乏自动选主机制。

对于原生MySQL,在高可用和强一致两个特性中,只能二选一:

  1. 要求MySQL主备间的数据强一致,不做主备自动切换。
  2. 借助MHA实现高可用,容忍MySQL主备间的数据不一致。

因此MySQL在容灾上无法同时满足数据强一致和服务高可用两个特性。

PhxSQL设计思路

【可靠日志存储】
实现一个以可靠日志存储为中心的架构来解决MySQL数据复制时产生的数据不一致问题。

Master将Binlog发送到BinlogSvr集群(可靠日志存储),Slave从BinlogSvr集群获取Binlog数据完成数据复制。
Master在重启时,根据BinlogSvr集群的数据判断Pending Binlog是否已经被复制。如果未被复制则从Binlog File中删除。

利用BinlogSvr集群(可靠日志存储),使得Master(重启时检查本地Binlog是否和BinlogSvr集群的数据一致)和Slave(从BinlogSvr集群中获取Binlog)的数据保持一致,从而保证了整个集群中的MySQL主备间数据的一致性,如图8所示。
图8  实现一个可靠日志存储保证各MySQL的数据一致

图8 实现一个可靠日志存储保证各MySQL的数据一致

【请求透传】
在Master进行切换时,切换操作可能会导致部分MySQL Client仍然访问旧Master并读到旧数据。
最直观的方法是修改MySQL Client API,在每一次进行查询时,先确认当前Master的位置。但此方法有以下缺点:

  1. 需要维护一个MySQL Client API的私有版本,维护成本高。
  2. 所有的调用端需要集成这个私有的MySQL Client API,操作成本很高。

为了避免修改MySQL Client API,可通过增加Proxy进行请求透传来解决上述问题。在每一个MySQL结点上增加一个Proxy,MySQL Client的请求不再直接访问MySQL而直接访问Proxy。Proxy根据Master的位置,将访问Slave机器的请求透传到Master机器,再进行MySQL操作。

通过增加Proxy进行请求透传,解决了MySQL Client分裂导致有可能读取到旧数据的问题,如图9所示。
图9  实现一个可靠日志存储保证各MySQL的数据一致

图9 实现一个可靠日志存储保证各MySQL的数据一致

【自动选主】
多机自动选主最常见的实现方式是由各个参与者发起投票,获得多数派支持的机器为Master,同时把Master信息记录到可靠存储。Master机器定期到可靠存储延长租约;非Master机器定期检查Master租约是否过期,从而决定是否要发起选举自己为Master的投票。

为了避免修改MySQL代码,在MySQL机器上增加一个Agent,由Agent来替代MySQL发起选主投票和续期租约;可靠存储继续由BinlogSvr承担。

Agent完成以下功能:

  1. Master机器的Agent监控本机MySQL是否正常服务;如果正常服务,则定期到可靠存储延长租约,否则停止续约。
  2. 非Master机器的Agent定期从可靠存储检查Master租约是否过期;如果过期,再检查本机MySQL是否已经执行了所有Binlog。如果已经执行了所有Binlog,则发起选举自己为Master的投票,如图10所示。
    图10 可靠日志存储和Agent共同实现自动选主机制
    图10 可靠日志存储和Agent共同实现自动选主机制

PhxSQL架构和实现

从上述思路可以得出PhxSQL的简单三层架构。对于每一个节点,部署3个模块(PhxSQLProxy,MySQL,PhxBinlogSvr)。多个节点上的PhxBinlogSvr组成一个可靠的日志存储集群和可靠的Master信息存储集群;PhxBinlogSvr同时承担Agent的责任。PhxSQLProxy负责请求的透传。Master结点上的PhxSync负责将MySQL的Binlog发送到PhxBinlogSvr,如图11所示。

图11  PhxSQL基本架构

图11 PhxSQL基本架构

【Proxy(PhxSQLProxy)】

  1. 请求透传

请求透传是Proxy主要的功能。主要解决在进行Master切换的时候,MySQL Client会被分裂,不同的Client可能连接到不同的MySQL。导致出现MySQL Client写入数据到错误的Master或者从错误的Master读取到错误的数据。

Proxy的请求透传分两种:

  1. 读写端口请求透传:Slave节点收到的请求透传给Master节点执行。Master节点收到的请求直接透传给本机MySQL执行。
  2. 只读端口请求透传:Master节点收到的请求透传给Slave节点执行。Slave节点收到的请求直接透传给本机MySQL执行,如图12所示。
    图12  Proxy请求透传流程
    图12 Proxy请求透传流程

高性能:由于Proxy接管了MySQL Client的请求,为了使整个集群的读写性能接近单机MySQL,Proxy使用协程模型提高自身的处理能力。

Proxy的协程模型使用开源的Libco库。Libco库是微信团队开源的一个高性能协程库,具有以下特点:

  1. 用同步方式写代码,实现异步代码的性能。
  2. 支持千万级的并发连接。
  3. 项目地址https://github.com/tencent-wechat/libco

完全兼容MySQL:为了已有的应用程序能够不做任何修改就能迁移到PhxSQL,Proxy需兼容MySQL的所有功能。

兼容MySQL事务
MySQL事务管理基于连接,同一个事务的所有请求通过同一个连接通信。在事务处理中连接丢失,事务将被rollback(http://dev.mysql.com/doc/refman/5.6/en/innodb-autocommit-commit-rollback.html)。

Proxy使用1:1连接模型完全兼容MySQL事务。每当MySQL Client发起一个连接到Proxy,Proxy都会相应地发起一个连接到MySQL。两条连接中,任意一个中断,另外一个也相应断开,对应的事务会被rollback,如图13所示。
图13  Proxy的1对1事务连接模型

图13 Proxy的1对1事务连接模型

兼容MySQL权限
MySQL的权限管理基于(用户,源IP)对,源IP是通过socket句柄反查获取。当请求通过Proxy连接到MySQL时,源IP为Proxy本地IP,权限管理会出现异常。

Proxy利用MySQL协议HEAD保留字段透传真实源IP到MySQ,MySQL再从HEAD保留字段获取正确的源IP进行权限管理,如图14所示。
图14  Proxy通过修改MySQL协议兼容MySQL权限

图14 Proxy通过修改MySQL协议兼容MySQL权限

PhxSync
PhxSync的功能和MySQL的semisync插件类似。经过调研,对semisync插件的接口做少量的调整,就可以使用这些插件接口来实现PhxSync。

PhxSync功能主要是:

  1. 正常运行时提交Binlog:MySQL在正常写入或者更新数据时,会调用after_flush接口。PhxSync插件通过实现after_flush接口将MySQL新写入的Binlog提交到本机的BinlogSvr,由本机BinlogSvr通过Paxos协议同步到BinlogSvr集群。
  2. 重启时校准本地Binlog:MySQL在重启时通过查询BinlogSvr集群判断本地Pending Binlog的状态。如果Pending Binlog未复制到BinlogSvr集群则从本地删除,保持本地的Binlog数据和BinlogSvr集群的Binlog数据一致。

由于MySQL没有提供在重启时的插件接口,为了后续维护方便,在MySQL代码层抽象出了一个新插件接口before_binlog_init用于校准Binlog。

上述对after_flush接口的调整,和新增的before_binlog_init接口已经提交补丁给MySQL官方(http://bugs.mysql.com/bug.php?id=83158)。

【PhxBinlogSvr】

PhxBinlogSvr主要负责存储Binlog和Master信息的维护。在数据复制阶段,通过Paxos协议保证PhxBinlogSvr各节点的数据一致性(下文称PhxBinlogSvr为BinlogSvr)。

  1. PhxPaxos库:BinlogSvr使用PhxPaxos库进行数据的复制。PhxPaxos库是微信团队开源的Paxos类库,具有以下特性:1. 保证各节点的数据一致。
  2. 保证集群机器超过一半存活还能服务。
  3. 高性能。
  4. 功能完善。
  5. 稳定性经过大规模验证。
  6. 接口方便易用。
  7. 项目地址https://github.com/tencent-wechat/phxpaxos

BinlogSvr异常情况处理

防止Slave的节点提交数据

当旧Master在提交数据时由于网络问题数据包被卡在网络,且新Mater已经成功切换时,或者人为错误直接往Slave节点的MySQL写入数据时,则会出现Slave节点提交数据的情况。多节点同时提交数据会出现BinlogSvr的Binlog数据和MySQL存储的Binlog数据不一致的情况。

BinlogSvr存储了集群内的Master信息。当其收到MySQL提交的数据时,可根据Master信息拒绝非Master节点的提交,如图15所示。
图15  BinlogSvr通过Master信息拒绝非Master节点的提交

图15 BinlogSvr通过Master信息拒绝非Master节点的提交

防止Master提交错误数据

在某些情况下,Master可能会重新发送数据或者发送错误数据。譬如在网络不好的情况下Master由于提交数据超时而重发数据。磁盘发生故障或者数据被错误回滚或者修改的时候,Master会提交错误的数据。

BinlogSvr使用乐观锁机制来防止Master的异常提交。在MySQL提交数据给BinlogSvr时,以本机MySQL已经执行的GTID为乐观锁,提交的内容为(本机MySQL已经执行的最新GTID,本次要提交的Binlog)。BinlogSvr通过检查请求中(本机MySQL已经执行的最新GTID)和自身保存的最新GTID是否匹配来拒绝重新发送或者异常发送的数据,如图16所示。
图16  BinlogSvr使用乐观锁拒绝Master在数据异常的情况下提交数据

图16 BinlogSvr使用乐观锁拒绝Master在数据异常的情况下提交数据

  1. 支持MySQL原生复制协议:为了让Slave能从BinlogSvr获取Binlog,最好的方式就是BinlogSvr支持MySQL原生的复制协议,这样不用对Slave做任何修改,如图17所示。
    图17  BinlogSvr支持MySQL使用原生复制协议获取Binlog数据

    图17 BinlogSvr支持MySQL使用原生复制协议获取Binlog数据

  2. Master管理:BinlogSvr除了存储MySQL的Binlog数据,还存储了Master信息。同时还承担了Agent的角色,负责监控MySQL的状态,必要时发起选举自己为Master的投票。

BinlogSvr通过Paxos协议进行Master选举,选举成功后成为Master并拥有租约。通过Paxos协议选举保证了最终只产生一个Master且每个节点记录了一致的Master信息。

PhxSQL效果

【PhxSQL数据一致性】

通过比较PhxSQL集群中各节点的数据(MySQL Binlog,PhxPaxos,BinlogSvr) 判断各节点数据是否一致,如图18所示。
图18  PhxSQL 3机数据对比

图18 PhxSQL 3机数据对比

【Master自动切换】

通过观察Master宕机时各节点的流量变化判断Master是否顺利切换。下图中的红线代表流量。当Master宕机时,流量会随之转移,代表Master顺利切换,如图19所示。
图19  PhxSQL进行Master切换时各节点的写入流量变化

图19 PhxSQL进行Master切换时各节点的写入流量变化

【PhxSQL性能】

  • MySQL版本:Percona 5.6.31-77.0
  • 机器信息:

    1. CPU :Intel Xeon CPU E5-2420 0 @ 1.90GHz * 24。
    2. Memory : 32G。
    3. Disk:SSD Raid10。
    4. Ping Costs:Master→Slave:3 ~ 4ms; client→Master :4ms。
  • 工具和参数:

    1. sysbench。
    2. –oltp-tables-count=10 –oltp-table-size=1000000 –num-threads=500。
    3. –max-requests=100000 –report-interval=1 –max-time=200。

PhxSQL的写性能比MySQL的半同步好,读性能由于多了一层Proxy导致比MySQL的半同步稍差。

图20  PhxSQL和MySQL的性能对比

图20 PhxSQL和MySQL的性能对比

成功案例

QQ邮箱(域名邮箱)域名记录服务器:单个集群调用峰值40w/min。写请求平均耗时在20ms以下。读写比为20:1。机器配置:Intel Xeon CPU x3440 @ 2.53ghz 8 core,8GB ram。


订阅2017年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
图片描述


由优快云主办的中国云计算技术大会(CCTC 2017)将于5月18-19日在北京召开,Spark、Container、区块链、大数据四大主题峰会震撼袭来,包括Mesosphere CTO Tobi Knaup,Rancher labs 创始人梁胜、Databricks 工程师 Spark commiter 范文臣等近60位技术大牛齐聚京城,为云计算、大数据以及人工智能领域开发者带来一场技术的盛大Party。现在报名,只需399元就可以聆听近60场的顶级技术专家分享,还等什么,登陆官网(http://cctc.youkuaiyun.com/),赶快报名吧!

图片描述

PhxSQL的介绍 PhxSQL的介绍PPT 立即下载

相关推荐

高仿微信数据库表

高仿微信的数据库表。

【SDCC 2016】微博、58赶集、百度外卖、腾讯微信、阿里巴巴的高可用架构实践...

【优快云现场报道】2016年11月18日-20日,由优快云重磅打造的年终技术盛会 —— “2016中国软件开发者大会”(Software Developer Conference China 2016,简称SDCC 2016)在北京京都信苑饭店隆重举行。本届大会云集了100多位国内外顶尖专家和技术大牛,共设新趋势和新实践2大主题会场,14个技术专题。面向国内外的中高端技术人员,聚焦最前沿技术及...

历史上的今天 602

cpp-PhxSQL是由微信后台团队自主研发的一款服务高可用数据强一致的分布式数据库服务

PhxSQL是由微信后台团队自主研发的一款服务高可用、数据强一致的分布式数据库服务。该服务基于Percona5.6搭建,目标在于解决MySQL在容灾和数据一致性方面的不足,并大幅简化了MySQL容灾切换的运维操作。

安装部署PhxSQL教程

。需求:公司某软件使用phxsql已经部署在3个机房,现需要在新的机房增加一个phxsql节点,以下为操作过程,因为保护隐私把4台IP用1.1.1.12.2.2.23.3.3.3新的ip为4.4.4.4。安装Phxsql需要Python2.7版本,Centos默认为2.6版本,需要进行升级cd/opt wget--no-check-certificatehttps://...

weixin_33742618的博客 926

MySQL-集群最佳解决方案

群里资源,共享出来给大家分享分享。

数据库设计说明书(含需求分析)

1引言 2 1.1编写目的 2 1.2背景 2 1.3定义 2 1.4参考资料 2 2外部设计 2 2.1标识符和状态 2 2.2使用它的程序 3 2.3约定 3 2.4专门指导 3 2.5支持软件 3 3结构设计 3 3.1概念结构设计 3 3.2逻辑结构设计 3 3.3物理结构设计 4 4运用设计 4 4.1数据字典设计 4 4.2安全保密设计 4

PhxSQL使用及部署——替换druid metadata使用的mysql

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。 Github地址:https://github.com/tencent-wechat/phxsql/blob/master/README.zh_cn.md 总览 PhxS

yxx1173的博客 2746

华为云CodeHub代码托管

什么是代码托管 代码托管(CodeHub)是面向软件开发者的基于Git的在线代码托管服务,是具备安全管控、成员/权限管理、分支保护/合并、在线编辑、统计服务等功能的云端代码仓库,旨在解决软件开发者在跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。 代码托管具有以下特性 · 在线代码阅读、修改、提交,随时随地开发,不受地域限制。 · 在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。 master分支:最为稳定,功能比较完整,随时可发布的代码。 develop分支:用于平时开

LUJINYUANA的博客 1万+

微信开源PhxSQL:高可用、强一致的MySQL集群

微信开源PhxSQL:高可用、强一致的MySQL集群 一、PhxSQL简介 PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。   PhxSQL基于Percona 5.6开发。Percona是MySQL的一个分支,功能和实现与MyS

wangzhongzhou1990的博客 832

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

QT6与QT5安装全攻略:从下载到环境配置一站式指南

本文提供了一份详尽的QT6与QT5安装教程,涵盖从版本选择、在线安装器使用到环境变量配置的全过程。针对新手常见痛点,重点对比了QT6与QT5的安装差异,并给出了MinGW与MSVC编译器的选择建议,旨在帮助开发者快速搭建稳定可用的QT开发环境,避免常见错误。

weixin_29216353的博客 309

【重磅】微信开源PhxSQL:高可用、强一致的MySQL集群

【重磅】微信开源PhxSQL:高可用、强一致的MySQL集群 开源地址: https://github.com/tencent-wechat/phxsql 点击阅读原文可自动跳转到github地址 PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。 PhxSQL基于Percona 5.6开发。Percona是MySQL的一个分支,功能和实现与My

OpenIM的博客 387

PHY6252开发实战:从零构建BLE串口透传应用

本文详细介绍了PHY6252开发板在BLE串口透传应用中的实战经验,包括开发环境搭建、BLE串口透传例程解析、AT指令集实现与扩展、数据透传机制优化以及常见问题排查指南。通过智能家居遥控器项目案例,展示了PHY6252在低功耗物联网设备开发中的实际应用。

weixin_29183637的博客 311

!!!!!!!!!!!!!!!!!!!微信高可用分布式数据库PhxSQL设计与实现 !!!!!!!!!!!!!!!!!!!

异步复制方案 Master对数据进行commit操作后再将数据异步复制到Slave。 但数据无法保证成功复制,也就无法保证MySQL主备间的数据一致性,如图1所示。 图1 MySQL异步复制流程 半同步复制方案 Master对数据进行commit操作前将数据复制到Slave,确认复制成功后再对数据进行commit操作。...

m0_37477061的博客 344

基于QT+Halcon实现线序识别

一、线序识别算法步骤。 1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。 2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。 3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。 4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1748

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 284

mysql集群承诺强一致性_微信高可用分布式数据库PhxSQL设计与实现

作者:陈俊超本文详细描述了PhxSQL的设计与实现。从MySQL的容灾缺陷开始讲起,接着阐述实现高可用强一致的思路,然后具体分析每个实现环节要注意的要点和解决方案,最后展示了PhxSQL在容灾和性能上的成果。设计背景互联网应用中账号和金融类关键系统要求和强调强一致性及高可用性。当面临机器损坏、网络分区、主备手工或者自动切换时,传统的MySQL主备难以保证强一致性和高可用性。PhxSQL将MySQL...

weixin_30216669的博客 238

KUKA机器人修改机器人名称和IP地址的具体方法示例

KUKA机器人修改机器人名称和IP地址的具体方法示例

Robot_PLC_HMI_Automation 5258

分布式技术追踪 2017年第十六期

分布式系统实践 1.微信高可用分布式数据库PhxSQL设计与实现 http://dwz.cn/5MDqea 摘要:微信团队的PhxSQL的文章之前也推荐过, 本期再推荐一篇整体介绍PhxSQL的文章, 相关代码已经开源. 2.以交易系统为例,看分布式事务架构的五大演进 http://dwz.cn/5Nm64k 摘要:分布式事务在交易系统中普遍存在, 本文总结了实...

weixin_30332241的博客 191

关于机器人精度的总结(重复精度和绝对精度区分)

机械臂是工业生产中的重要设备,在焊接码垛 以及 非 接触测量等 领域中有 着重要应 用。然而由于机械臂本体制造中存在机械制造公差装配误差导致的运动学参数误差以及电机转角与关节转角间减速比误差等,导致机械臂存在。因此需要对机械臂进行标定,提高机械臂的绝对定位精度。ABB系列某款机器人精度参数表。

大胡子大叔的专栏 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

互联网应用架构面面观

内容简介 立足互联网行业,架构通常指的是技术架构,更具体一点的说是系统架构、软件架构,或者是最常见的网站架构。本期我们共同探讨2017年互联网时代,实战型技术架构的演进过程及其优缺点等诸多方面。 京东分布式数据库系统演进之路(张成远,京东云资深架构师) 万人协同规模下的代码管理架构演进(廖超超,百度代码开发协作平台架构师) 微信数据强一致高可用分布式数据库 PhxSQL 设计与实现(陈俊超,腾讯...

GitChat 1882

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

colease函数 mysql_微信开源PhxSQL:高可用、强一致的MySQL集群

PhxSQL 是由微信后台团队自主研发的一款服务高可用、数据强一致的分布式数据库服务。该服务基于 Percona5.6 搭建,目标在于解决 MySQL 在容灾和数据一致性方面的不足,并大幅简化了 MySQL 容灾切换的运维操作。作者:Junchao Chen (junechen@tencent.com), Haochuan Cui (lynncui@tencent.com), Duokai Hua...

weixin_39733232的博客 241

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 使用SMACK堆栈进行快速数据分析
923940cub
博客等级 码龄17年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值