Riak Core说明

riak 什么是riak_core? riak_core是一个单独的OTP应用,提供了所有必须的服务,以完成一个现代化的、表现良好的分布式应用。riak_core开始于Riak的一部分。当代码在建立各种分布式应用普遍有用时,我们决定重构并且分离出来核心部分,使其便于使用。
分布式系统是复杂的,riak_core可以满足这些大量复杂的需求。在深入代码之前,我将分离这些需求为明显的分类,且给出每项的概况。
注:如果你是急性子,想跳过后面的直接读代码,你可以通过hg或者git检出riak_core的代码。 节点存活 & 节点关系 riak_core_node_watcher是负责反馈riak_core_cluster内部节点状态的进程。它使用net_kernel有效地监控了许多节点。riak_core_node_watcher也有能力将一个节点按程序预定踢出cluster。当一个主节点必须临时断电而又不想完全停服的情况,这十分有用。
riak_core_node_watcher还提供了在cluster内广播和定向服务的API。当节点提供了专门的服务,比如CUDA计算节点,这个服务被cluster中的其他的节点所使用,这些API很有用。
riak_core_node_watch_events配合riak_core_node_watcher产生以活跃节点为基础的events,比如说加入或者离开cluster等等。当事人可以注册callback方法,当events被触发时会被调到。

分区 & 分布式工作 riak_core在每个节点上使用了master/worker配置,以管理工作单元的执行。一致性哈希被使用来决定哪一个目标节点用来发起请求,而且主进程在每个节点的farms公开对实际workers的请求。riak_core把工作进程叫做vnodes。相应的进程叫vnode_master。
在需要的时候,在riak_core里的分区和分布的逻辑同时掌控了hinted handoff。hinted handoff发生在一个节点失灵或者断电时。为了确保可用性,许多集群系统会使用可用节点代替挂掉的节点。当挂掉的节点恢复,集群需要从它代替节点的临时空间迁移数据去恢复节点的永久空间。这个进程被叫做hinted handoff,并且被riak_core里的组件管理。riak_core也掌控了迁移分区去新节点,当它加入到集群,集群能够持续地工作,并且平等地分给集群中所有成员。
riak_core_vnode_master在一个给定的节点启动所有的工作vnodes,并且当集群启动的时候把请求路由到vnodes。
riak_core_vnode是一个OTP behavior包装,所有的样板逻辑需要实现一个vnode。特殊的应用vnodes必须实现少量的回调函数,以参与handoff的session并且从master接收工作单元。

集群状态 一个riak_core集群保存了在一个环状结构上的全局状态。这个状态信息在集群中的节点间传输,以一个可控的方法保证所有的集群成员同步。这个进程被叫做“gossiping”。
riak_core_ring是用来创建和控制环的状态信息的,并且会与集群中的所有节点共享。环状态信息包括像分区关系、特定集群环上的元数据等元素。比如Raik KV存储把桶的元数据保存在环元数据中。
riak_core_ring_manager帮助一个节点管理集群环信息。它是应用代码访问环的主入口点(通过riak_core_ring_manager:get_my_ring/1),并且还能保存从当前环的状态同步过来的环持久快照。
riak_core_gossip管理环的gossip进程,它要确保环在整个集群里全都一致。

下一步计划 下面的几个月之后,我们将在这博客一系列的日志里覆盖建立一个真正的应用步骤,每篇都将覆盖使用riak_core建立某种系统。所有应用代码都将在apache2声明下共享到github。
那我们要建立哪种类型的应用?因为这个系列的目标是为了举例如何使用riak_core建立一个分布式系统,同时也是为了满足我自己的技术好奇心,我决定建立一个分布式图片数据库。为了真正练习riak_core,一个图形库应该提供足够的用例,与此同时,不能把核心学习体验搞得十分复杂。
感谢Sean Cribbs和Andy Gross提供有用的review和feedback。

[from http://basho.com/blog/technical/2010/07/30/introducing-riak-core/]


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

捐款订阅54chen
捐赠说明