Go在酷狗数据库中间件的应用

原创 2017年12月08日 10:44:42

大数据

作者:刘延允

本次分享主要围绕Go在数据库中间件应用这方面展开;首先会聊一下程序开发的需求,具体会参考Go的特性是否满足这些需求;接下来会介绍一下近期采用Go语言开发的mysql中间件这个项目,整体方案,分表路由、故障切换、平滑扩容,系统运维,主要从以上这五个方面进行展开。

程序开发需求

程序开发对开发语言的要求,简单概括如下几点:

语言特性精炼,容易入门

开发效率高,代码逻辑清晰

运行性能强,节省机器资源

部署维护方便

生态圈完善

Golang的特性

结合Golang与C之间区别,阐述一下Golang的特性:

Go语法简练;没有学习压力

开发效率高;语言描述能力接近于脚本语言

性能高;接近于C/C++,充分利用资源

容易部署;可执行程序,编译时解决上线部署、运行时的依赖

强大的标准库、丰富的第三方库、go test、pprof

自动内存管理;内存泄漏与野指针是C/C++语言开发者的噩梦

Go routine + channel;简单的并发与简易的数据同步

Go开发mysql中间件

  • 系统整体方案

大数据

图 1

本系统开发的出发点是:突破mysql的单机、单表容量,解决mysql访问的单点问题。

上图是系统整体框架图,整套系统致力于提供一套 mysql 分布式解决方案,上层应用接入本系统与使用单机mysql一样;系统内部会做一些路由分发、故障切换、读写分离等工作。

proxy接收SQL请求,解析SQL语句、路由分发以及组装返回结果;

mysql-group都是一个“复制集”,可以是主从模式、主主模式;

dbmoniter主要是负责故障切换、数据修复等;

zookeeper上存储相关的配置信息。

  • 分表路由逻辑

分表规则遵循哈希分表与分段分表两种;哈希分表是shardkey通过Hash函数分表,分段分表是按照年、月、日或者整形范围进行分表。这两种方式的区别在于因哈希规则不同,导致其数据组织方式上的差异性。

  • 故障主备切换

关于MySQL的高可用方案,业内流行的解决方案有MHA。MHA在部署方面还是有点麻烦的,需要在每台机器上都部署一个agent,然后机器之间进行SSH授权。我们采取的策略是通过配置Rsync拉取mysql的binlog日志的方式处理。

故障的几种情形以及对应的处理:

  1. 当从节点挂掉,可以剔除下线的处理;
  2. 当主节点挂了,但是机器存活的情况下,可以通过binlog恢复数据,将备节点提升为主节点;
  3. 当主节点挂了,同时机器不存活的情况下,可以采用relaylog恢复数据,同时将备节点提升为主节点。

我们实现了如下的双主模式主备切换机制,这点是MHA不支持的。

大数据

图 2

主备切换数据恢复的过程:Master故障时试图通过Rsync拉取Binlog,最大程度保证数据不丢失;Slave之间的数据差异通过中继日志恢复。

大数据

图 3

  • 在线平滑扩容

数据迁移的方式分为两种:

  1. 表迁移,将整张表的数据从一个Mysql迁移到另一个;
  2. 表拆分,将数据表的部分数据从一个Mysql迁移到另一个数据库的过程。

扩容的工作原理:mysqldump导存量数据 + binlog追增量

扩容工作流程:

首先,导出存量数据;

其次,订阅binlog变更,追增量;

再次,待同步后,修改路由规则;

最后,清理不需要的冗余数据。

这样设计的好处就在于其中任一环节出问题都可以马上进行回滚,对数据操作相对比较安全;下图是扩容时的流程图。

大数据

图 4

  • 系统管理命令

大数据

图 5

如图 5 所示是提供了几个主要管理命令,比如上下线MySQL、数据迁移指令、添加路由等。

End.

转载请注明来自36大数据(36dsj.com):36大数据 » Go在酷狗数据库中间件的应用

【图文直播全文记录】酷狗音乐的大数据实践(纯干货)

http://mp.weixin.qq.com/s/alpEZ7-dMrgn3fwJxwmPwg 此文是根据酷狗音乐大数据架构师王劲在【QCON高可用架构群】中的分享内容整理而成,转发请...
  • scdxmoe
  • scdxmoe
  • 2017年02月08日 09:47
  • 1455

PHPCrawl爬虫库抓取酷狗歌单

本人看了网络爬虫相关的视频后,手痒痒,想爬点什么。最近Facebook上表情包大战很激烈,就想着把所有表情包都爬下来,却一时没有找到合适的VPN,因此把酷狗最近一月精选歌曲和简单介绍抓取到本地。代码写...
  • fff058
  • fff058
  • 2016年01月24日 16:05
  • 1190

Qt/C++项目实战模仿酷狗之播放列表实现(一)

播放列表的开关界面 这是开关界面与添加界面 这个可以说是我遇到的最不好做的部分~先说按钮我来画一个图来解释一下就容易看懂 差不多这张图片能反映整个播放列表的框架构成。有三层构成。各种细节是很值...
  • what951006
  • what951006
  • 2016年09月23日 23:32
  • 2125

Go在酷狗数据库中间件的应用

嘉宾介绍:来自酷狗音乐/基础架构组。目前在酷狗主要负责数据库变更通知服务(数据迁移、同步、订阅)、消息队列、数据库中间件等工作,两年通讯设备开发经验,四年互联网经验,五年C/C++开发经验,一年Gol...
  • RA681t58CJxsgCkJ31
  • RA681t58CJxsgCkJ31
  • 2017年12月07日 00:00
  • 620

数据库中间件技术的研究与应用

数据库中间件技术的研究与应用 上海市浦东科技信息中心   孔佳薇    2010-09-14 关键字:数据库  中间件  应用  浏览量:383 ...
  • jfkidear
  • jfkidear
  • 2012年02月19日 18:03
  • 2618

数据库中间件的应用实例--部队人员在管理系统中的应用

      随着部队信息化建设的发展, 部队的许多机构、 部门内部都逐步实现了业务、信息的计算机化管理。例如司、政、后、装四大部都采用大型数据库来管理其业务数据。 但是, 由于各业务和功能归属不同, ...
  • dongdongdang
  • dongdongdang
  • 2011年03月21日 16:26
  • 1023

开源数据库中间件 Vitess:一组旨在使 web 应用的 MySql 数据库的水平扩展简单化的服务器和工具集

Vitess 是一个用于对 MySql 进行水平扩展的存储平台。经过优化,它可以像在专用硬件上那样有效地运行在云架构。它集 MySql 数据库的很多重要特性和 NoSQL 数据库的可扩展性于一体。...
  • defonds
  • defonds
  • 2015年08月19日 17:07
  • 2398

中间件技术CORBA的应用,实现远程调用数据库。

CORBA简介CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象...
  • han784851198
  • han784851198
  • 2017年04月06日 18:05
  • 211

中间件技术RMI的应用,实现远程调用数据库。

简介中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化...
  • han784851198
  • han784851198
  • 2017年03月31日 09:13
  • 292

数据库中间件

  • 2015年08月31日 17:55
  • 122KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Go在酷狗数据库中间件的应用
举报原因:
原因补充:

(最多只允许输入30个字)