IT技术博客大学习 共学习 共进步

Riak Core说明

五四陈科学院-坚信科学,分享技术 2012-02-01 17:30:53 浏览 2,565 次

    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。

建议继续学习

  1. 分布式缓存系统 Memcached 入门 (阅读 16,043)
  2. Zookeeper工作原理 (阅读 11,944)
  3. GFS, HDFS, Blob File System架构对比 (阅读 10,343)
  4. Zookeeper研究和应用 (阅读 9,342)
  5. 一致性哈希算法及其在分布式系统中的应用 (阅读 9,043)
  6. 分布式日志系统scribe使用手记 (阅读 8,843)
  7. 分布式哈希和一致性哈希 (阅读 8,665)
  8. HBase技术介绍 (阅读 7,943)
  9. 分布式系统的事务处理 (阅读 7,246)
  10. Memcache分布式部署方案 (阅读 6,667)