技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 算法 --> Riak Core说明

Riak Core说明

浏览:1816次  出处信息

    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 入门    (阅读:14728)
  2. Zookeeper工作原理    (阅读:10406)
  3. GFS, HDFS, Blob File System架构对比    (阅读:9389)
  4. Zookeeper研究和应用    (阅读:8528)
  5. 分布式日志系统scribe使用手记    (阅读:8047)
  6. 一致性哈希算法及其在分布式系统中的应用    (阅读:7937)
  7. 分布式哈希和一致性哈希    (阅读:7669)
  8. HBase技术介绍    (阅读:6765)
  9. 分布式系统的事务处理    (阅读:6008)
  10. Memcache分布式部署方案    (阅读:5457)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1