(2)基于riak_core分布式应用开发
来源:互联网 发布:淘宝上新抢拍技巧 编辑:程序博客网 时间:2024/05/16 15:10
二、 基于riak_core分布式应用开发
开发一个基于riak_core的分布式数据处理系统(不涉及到界面,主要是服务器后端实现),意味着它要处理的数据将在hash后映射到一个环上,也就是说这些数据分布在各个数据节点的partition上,数据的处理也在各个partition上进行。
显然每个数据处理系统有它自己的数据处理逻辑。如果我们实现了这个处理逻辑然后以某种方式注入到riak_core中,那么相应的系统也就开发成了。
基于riak_core的开发本质上也是这样的:riak_core屏蔽了所有和分布式有关的部分,开发者不用关心这些,它提供了某种接口,用户通过这些接口实现数据处理逻辑,然后将实现注入到riak_core系统中。
1. riak_core_vnode behaviour —— 用户处理逻辑的实现接口
riak_core为提供了一个riak_core_vnode回调模块作为用户实现业务逻辑的接口。源代码看这里。riak_core_vnode有两个作用:
也就是说,riak_core_vnode是作为一个容器以erlang进程的形式运行,而用户的业务逻辑栖身于容器中。(BTW:gen_server/gen_fsm都是这种设计和运行模式。)
我想这是一种典型的IoC(依赖注入)设计:系统将用户实现的功能注入到riak_core系统中,由此构建出基于riak_core的分布式应用系统。困难的dynamo分布式实现交给riak_core完成,用户只关心业务逻辑的实现就行了。
2. 业务逻辑的实现,和其他
主要是实现riak_core_vnode behaviour的接口回调函数。除了业务逻辑的实现,还设计到数据的转移等。
riak_core将partition上的数据处理操作抽象出来,由用户通过riak_core_vnode behaviour的回调函数实现,vnode的回调函数分为以下几类:
0) vnode进程生命周期管理,在vnode进程诞生和毁灭时将被调用的回调函数init/1, terminate/2
1) 对vnode进程负责的partition上数据的处理,当传来对该partition上的数据继续处理的命令时,由回调函数handle_command/3负责处理。例如,如果对数据的处理是存储,那么无非是get/put之类的命令,这些命令的格式(协议)都是由用户自己定义并实现的。
2) 当集群中增/减物理节点时,或者某个宕掉的物理节点恢复时,就需要对partition进行handoff的处理,其核心是对数据的搬运,它包括一组回调函数(is_empty/1, delete/1, handle_handoff_command/3, handoff_starting/2, handoff_cancelled/1, handoff_finished/2, handle_handoff_data/2, handle_handoff_data/2, encode_handoff_item/2 )
3) 对进程错误的处理:与该vnode相关的进程如果出错会调用回调函数handle_exit
4) Covering:覆盖整个ring空间数据的特殊命令,例如对一段连续范围的搜索命令。某个连续的数据集在hash后有可能会落到所有的partition。
这些回调函数在rzezeski的博文中有介绍
3. 业务逻辑的注入过程
我们的分布式数据处理系统作为一个OTP application发布。
在application中实现了处理系统的启动,以及业务逻辑的注入。
application启动时会启动supervisor,后者监控着riak_core_vnode_master子进程(riak_core_vnode_master是一个gen_server),参数配制成实现用户逻辑的定制vnode模块,从而实现业务逻辑注入。
开发一个基于riak_core的分布式数据处理系统(不涉及到界面,主要是服务器后端实现),意味着它要处理的数据将在hash后映射到一个环上,也就是说这些数据分布在各个数据节点的partition上,数据的处理也在各个partition上进行。
显然每个数据处理系统有它自己的数据处理逻辑。如果我们实现了这个处理逻辑然后以某种方式注入到riak_core中,那么相应的系统也就开发成了。
基于riak_core的开发本质上也是这样的:riak_core屏蔽了所有和分布式有关的部分,开发者不用关心这些,它提供了某种接口,用户通过这些接口实现数据处理逻辑,然后将实现注入到riak_core系统中。
1. riak_core_vnode behaviour —— 用户处理逻辑的实现接口
riak_core为提供了一个riak_core_vnode回调模块作为用户实现业务逻辑的接口。源代码看这里。riak_core_vnode有两个作用:
- 作为erlang behaviour提供回调函数实现接口,用户在回调函数中实现业务逻辑;
- 作为容器进程运行实现上述接口的用户模块,具体来讲它将作为一个基于gen_fsm的有限状态机进程运行。
也就是说,riak_core_vnode是作为一个容器以erlang进程的形式运行,而用户的业务逻辑栖身于容器中。(BTW:gen_server/gen_fsm都是这种设计和运行模式。)
我想这是一种典型的IoC(依赖注入)设计:系统将用户实现的功能注入到riak_core系统中,由此构建出基于riak_core的分布式应用系统。困难的dynamo分布式实现交给riak_core完成,用户只关心业务逻辑的实现就行了。
2. 业务逻辑的实现,和其他
主要是实现riak_core_vnode behaviour的接口回调函数。除了业务逻辑的实现,还设计到数据的转移等。
riak_core将partition上的数据处理操作抽象出来,由用户通过riak_core_vnode behaviour的回调函数实现,vnode的回调函数分为以下几类:
0) vnode进程生命周期管理,在vnode进程诞生和毁灭时将被调用的回调函数init/1, terminate/2
1) 对vnode进程负责的partition上数据的处理,当传来对该partition上的数据继续处理的命令时,由回调函数handle_command/3负责处理。例如,如果对数据的处理是存储,那么无非是get/put之类的命令,这些命令的格式(协议)都是由用户自己定义并实现的。
2) 当集群中增/减物理节点时,或者某个宕掉的物理节点恢复时,就需要对partition进行handoff的处理,其核心是对数据的搬运,它包括一组回调函数(is_empty/1, delete/1, handle_handoff_command/3, handoff_starting/2, handoff_cancelled/1, handoff_finished/2, handle_handoff_data/2, handle_handoff_data/2, encode_handoff_item/2 )
3) 对进程错误的处理:与该vnode相关的进程如果出错会调用回调函数handle_exit
4) Covering:覆盖整个ring空间数据的特殊命令,例如对一段连续范围的搜索命令。某个连续的数据集在hash后有可能会落到所有的partition。
这些回调函数在rzezeski的博文中有介绍
3. 业务逻辑的注入过程
我们的分布式数据处理系统作为一个OTP application发布。
在application中实现了处理系统的启动,以及业务逻辑的注入。
application启动时会启动supervisor,后者监控着riak_core_vnode_master子进程(riak_core_vnode_master是一个gen_server),参数配制成实现用户逻辑的定制vnode模块,从而实现业务逻辑注入。
0 0
- (2)基于riak_core分布式应用开发
- 分布式应用中基于事件驱动的应用开发模型
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于.Net Framework的N层分布式应用开发
- 基于PB环境下分布式应用系统的开发
- 基于.Net Framework的N层分布式应用开发
- 基于AgileEAS.NET企业应用开发平台的分布式解决方案
- 用RMI开发基于Java的企业分布式应用
- 用RMI开发基于Java的企业分布式应用
- 分布式应用开发技术
- 【认证】【爱尔兰】Ireland Saorview
- 新的一年从造轮子开始
- UVA 133发福利
- TYPESDK手游聚合SDK服务端设计思路与架构之五:流程优化之特殊流程处理
- 数据分页
- (2)基于riak_core分布式应用开发
- 分解质因数
- Mysql 手册
- 编程类开放书籍荟萃
- 实时查看linux下tomcat运行日志
- 给Git Pages添加一个子页面的域名解析相关
- 分布式Session研究(一):Docker + spring boot +Nginx构建分布式应用
- netty NioEventLoopGroup 线程名称设置
- c语言-----数组