开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

本次分享重要环绕Go在数据库中心件应用这方面展开;起首会聊一下法度榜样开辟的需求,具领会参考Go的特点是否知足这些需求;接下来会介绍一下近期采取Go说话开辟的mysql中心件这个项目,整体筹划,分表路由、故障切换、腻滑扩容,体系运维,重要大年夜以上这五个方面进行展开。
法度榜样开辟需求
说话特点精华精辟,轻易入门
开辟效力高,代码逻辑清楚
运行机能强,节俭机械资本
安排保护便利
生态圈完美
Golang的特点
结合Golang与C之间差别,阐述一下Golang的特点:
扩容的工作道理:mysqldump导存量数据 + binlog追增量
Go语法简洁;没有进修压力
开辟效力高;说话描述才能接近于脚本说话
机能高;接近于C/C++,充分应用资本
轻易安排;可履行法度榜样,编译时解决上线安排、运行时的依附
强大年夜的标准库、丰富的第三方库、go test、pprof
主动内存治理;内存泄漏与野指针是C/C++说话开辟者的恶梦
Go routine + channel;简单的并发与简略单纯的数据同步
Go开辟mysql中心件
- 体系整体筹划
图 1
上图是体系整体框架图,整套体系致力于供给一套 mysql 分布式解决筹划,上层应用接入本体系与应用单机mysql一样;体系内部会做一些路由分发、故障切换、读写分别等工作。
proxy接收SQL请求,解析SQL语句、路由分发以及组装返回结不雅;
dbmoniter主如果负责故障切换、数据修复等;
zookeeper上存储相干的设备信息。
- 分表路由逻辑
分表规矩遵守哈希分表与分段分表两种;哈希分表是shardkey经由过程Hash函数分表,分段分表是按照年、月、日或者整形范围进行分表。这两种方法的差别在于因哈希规毫不合,导致其数据组织方废喔赡差别性。
- 故障主备切换
关于MySQL的高可用筹划,业内风行的解决筹划有MHA。MHA在安排方面照样有点麻烦的,须要在每台机械上都安排一个agent,然懊机械之间进行SSH授权。我们采取的策略是经由过程设备Rsync拉取mysql的binlog日记的方法处理。
故障的几种情况以及对应的处理:
- 昔时夜节点挂掉落,可以剔除下线的处理;
- 当主节点挂了,然则机械存活的情况下,可以经由过程binlog恢复数据,将备节点晋升为主节点;
- 当主节点挂了,同机会械不存活的情况下,可以采取relaylog恢复数据,同时将备节点晋升为主节点。
我们实现了如下的双主模式主备切换机制,这点是MHA不支撑的。
图 2
主备切换数据恢复的过程:Master故障时试图经由过程Rsync拉取Binlog,最大年夜程度包管数据不损掉;Slave之间的数据差别经由过程中继日记恢复。
mysql-group都是一个“复制集”,可所以主大年夜模式、主主模式;

本体系开辟的出发点是:冲破mysql的单机、单表容量,解决mysql拜访的单点问题。
图 3
- 在线腻滑扩容
数据迁徙的方法分为两种:
- 表迁徙,将整张表的数据年腋荷琐Mysql迁徙到另一个;
- 表拆分,将数据表的部分数据年腋荷琐Mysql迁徙到另一个数据库的过程。
扩容工作流程:

起首,导出存量数据;
其次,订阅binlog变革,追增量;
再次,待同步后,修改路由规矩;
最后,清理不须要的冗余数据。
如许设计的好处就在于个中任一环节出问题都可以立时进行回滚,对数据操作比拟较较安然;下图是扩容时的流程图。

图 4
- 体系治理敕令


法度榜样开辟对开辟说话的请求,简单概括如下几点:
图 5
如图 5 所示是供给了几个重要治理敕令,比瘸老下线MySQL、数据迁徙指令、添加路由等。
【编辑推荐】
- Go说话若何实现遗传算法
- 前端开辟者该若何设置数据库
- 若何为您的微办事选择混淆和多模型数据库?
- 应用Python连接MySQL数据库
- Python oracle数据库操作时,中文萌芽报错
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散一位同伙比来向我提了个问题,这个问题我曾经在不合的论坛上听到过,固然问题的情势不太一样:“你认为IT和一些初级其余编程工作最终会消掉>>>详细阅读
本文标题:Go在酷狗数据库中间件的应用
地址:http://www.17bianji.com/lsqh/39658.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示