《数据蜂巢架构演进之路》阅读笔记

一、功能整合

1、各功能如何实现?

离线同步:可理解为将根据一个sql查询出的数据同步到其它目标存储上;

实时订阅:通过实时解析mysql-binlog,将数据的变动封装成事件存于消息队列,供用户订阅消费;

实时同步:提供一些常见的订阅客户端料现,实时消费消息,将数据的变动应用于目标存储上。

2、如何将三个功能集成在一个平台架构下?

将离线同步,实时订阅,实时同步三个需求抽象为三种作业,分别为BatchJob,StreamJob,PieJob。

i. BatchJob参考Sqoop的模式,将需同步的数据先根据指定的规则进行分片,然后将作业根据分片拆分成多个任务,每个任务只同步本分片的数据,多个任务可同时运行,以加快同步效率;

ii. 以BatchJob的模式为基础,StreamJob也可根据需要采集的mysql实例分成多个任务,每个任务负责采集解析一个mysql的binlog,并将解析后的事件封装成消息存于本地供订阅者消费;

iii. PieJob是对订阅客户端的封装,每一个订阅客户端即可看作一个任务。

三种不同的作业最终都可以通过分片分成多个任务去运行,使用统一的模型。

 

二、任务细节

以下为各个Job进行分片后生成的Task内部具体实现细节

1、BatchTask

Fetcher负责抽取数据,Sinker负责写入数据,Storage为缓存层。

2、StreamTask

RelayLogTask负责拉取binlog;HHLTask负责解析Binlog,并将解析出的数据变更事件封装为易使用的消息体,最后存入hhl中。

hhl的实现借鉴了Kafka,可看作一个简易版的消息队列。消息使用protobuf序列化,压缩后顺序写入文件。同时提供了指定大小的索引块。

在StreamTask中提供了一个ClientServer负责处理客户端的订阅请求,细节如下图:

当收到指定位点的订阅请求后先通过索引快速定位对应的数据块,然后扫描数据块定位对应的消息,将该位点之后的所有消息通过指定的过滤器过滤,最终推送给客户端。

消息订阅的服务端并不维护客户订阅的状态,即不存储客户端的位点,交由客户端自行处理。服务端只负责将指定的位点之后的消息不断的推送给用户。

3、PieTask

PieTask实际是对客户端的封装,这里主要介绍一下客户端的实现。

客户端采用并发处理的模式,connector负责接收消息,paritioner负责分发消息交给不同的Processor(线程)处理。

因客户端需自己记录当前处理的位点,但又要保障在并发场景下记录的位点之前的消息都已被正确处理。为了减少线程间阻塞,使用了环形数组的提交方式(记录位点)。

 

三、集群

使用Master-Slave结构,如下图所示:

 

Master这里称之为Queen;Slave这里称之为Bee。

Queen负责作业的分片,调度;Bee负责任务的具体执行(任务由作业分片后得到)。

1、高可用

i.Mysql:mysql的高可用由dba维护,但mysql主从切换后对应的位点会不同,此处通过监测serverId的变更来发现主从切换,主机切换后通过时间在新实例上查找对应位点;

ii.Queen:通过zookeeper来实现Active与StandBy的切换

iii.Bee:宕机后Queen会将该主机上运行的所有任务切换到其它机器上

2、数据本地性

每一台Bee都有自己的机柜,机架,机房,分组信息。作业运行时可以指定自己的喜好,任务会优先分到指定的机器分组上

3、负载均衡

Bee在运行时会通过心跳汇报自己负载情况,当一个任务需要调度时,Queen会在满 足数据本地性的前提下优先将任务分发到负载低的主机上。

 

阅读原文:

https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247485060&idx=1&sn=2d374061f2f85c453cc27d092a5354ad&chksm=fbf7b66bcc803f7dde316a4edbb40d9e6074640ef95ca7b1095b3d885433c991115ac00f1d9b&scene=21#wechat_redirect

转载于:https://www.cnblogs.com/iCheny/p/11056558.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
. 软件介绍..蜂巢平台(OpenComb Platform)是一个基于 PHP5.3 实现的深度云计算应用框架。蜂巢采用了扩展模式,系统中的功能和特性,都由扩展提供。 因此,用户可以通过开发和安装扩展来部署各种类型的互联网应用。 “扩展驱动模式” 许多软件都提供了插件机制,允许加载由第三方开发的插件,对主程序的功能起到补充作用。 但是在插件模式中,相比起主程序,第三方插件仅仅扮演着“二等公民”的角色,只能对主程序起到有限的影响和作用。 而在蜂巢的“扩展驱动模式”下,扩展才是真正的主角,系统的所有功能都是由扩展提供的。 并且,一个扩展可以增强另一个扩展,而不只是孤立地提供功能。因此,您的所有需求,都可以由一系列扩展的组合来达成。 【网页自由布局】 “视图”就是网页里的显示区块,蜂巢允许你以拖拽的方式,自由布置网页上的视图。 同时,蜂巢还允许你将任何一个网页中的视图合并到另一个网页中显示。 【“拒绝修改源代码”】 改变系统的行为,不应该通过“篡改”源代码来实现,那样会导致系统或扩展无法平滑升级。 蜂巢提供了多项特别的技术(类如:OOD/AOP、模版编织、可覆盖的类/包以及资源文件等等),来确保对扩展的增强可以避开修改源文件,无论是系统还是扩展都可以平滑升级。 【面向二次开发】 您过去使用的系统,即使开放源代码,其功能的设计也是封闭的,基于这些系统进行二次开发,不但困难,而且常常会破坏系统的稳定和健壮。 能够允许第三方开发者来扩展和增强系统的功能,是我们在设计蜂巢的系统时首要考虑的目标。蜂巢无论是源代码还是系统设计,都是开放的。 【深度云计算】 蜂巢也是一个实现在软件层次上的云计算应用框架:基于蜂巢开发的不同应用,能够做为一个系统共同工作。 无论是财务软件、OA系统、客户关系管理、仓储/物流,还是在线商城、BBS/社区、CMS、Blog,以及您自己开发的应用, 如果您一开始就采用了蜂巢,那么将这些应用整合成一个统一的系统,就不再是一项招标工程,您自己在周五下午就可以搞定。 ---------------- 以下是开发人员感兴趣的内容: 【模版编织】 模版编织和AOP很像,但它是针对网页模版的。蜂巢没有采用流行的PHP网页模版引擎,而是设计了一个更高级的模版引擎:能够定位到模版中的任何一个元素,并在其上“织入”另一段模版代码。 当你需要开发一个新扩展来增强某个扩展时,模版编织是一项非常有用的技术。 【面向方面编程(AOP)】 蜂巢实现了PHP语言的AOP方案,允许你在系统中定义执行点,并在执行点上“切入”一些新的代码,从而改变或禁用系统已有的行为。 AOP是蜂巢扩展和扩展直接主要的增强方案之一。 【BEAN/POD 对象构建】 BEAN/POD 对象构建是一种通过PHP数组(array)来配置对象内部属性的接口,它的目标是简化 OOP中的对象创建过程。 Controller/View/Model/Widget/Verifier 等等业务逻辑中常用的对象,都可以通过一个 bean config 规范的数组(array)来创建,这使得在蜂巢中开发很像某些 js 框架的习惯。 【二次发布】 蜂巢采用了开放的授权协议,而且还提供了一些用于打包扩展和制作发行版本的工具,您可以基于蜂巢开发属于您自己的成品,并以您自己的名称和Logo重新发布。 【“代码即知识”】 蜂巢提供了一个文档编译引擎,用于分析源代码并生成对应 API文档、WIKI,以及例子。 这使得蜂巢的开发文档、例子的编写工作变的轻松了。文档的时效性也更强——它们都是从当前版本的源代码中编译出来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值