(3)" /> (3) - 秒客网" />

"Principles of Reactive Programming" 之 (3)

时间:2021-09-14 17:16:51

Cluster

讲课的这哥们接下来讲了下Akka Cluster的使用,但是是通过把一个以前讲过的actor 系统改成使用cluster来介绍的Akka cluster. 这部分代码很多,还是直接看视频吧。或者,看这篇文章,

Akka Clustering, Step by Step

更直白一些,不用事先了解课程中那个比较复杂的例子。

还是从正常的顺序了解下Akka Cluster吧。

Akka Clustering用来解决什么问题?

Akka Cluster provides a fault-tolerant decentralized peer-to-peer based cluster membership service with no single point of failure or single point of bottleneck. It does this using gossip protocols and an automatic failure detector.

这句话的主干就是“Akka Cluster提供了一个cluster membership service"。

什么是"membership service"呢?按照课程的说法就是所有的成员都知道谁是这个cluster的成员,也就是所有的成员都了解谁在这个集群中 。

那么知道这些信息有啥意义呢?

在HDFS中,datanode并不知道谁在集群中, MapReduce的taskTracker也不知道,Storm的supervisor也不知道,对于这些分布式系统,只要master知道谁在集群中就可以正常工作了,但这也会造成单点的问题。那么,Akka Cluster呢? ”decentralized peer-to-peer based cluster membership service"。它没有单点,但是工作的组织就成了问题。当整个集群需要对某些东西达成一致,它们起码得知道哪些节点属于这个集群。另一方面,Akka Cluster的membership service还会提供成员的状态变化的通知,允许集群的成员跟据状态进行更复杂的操作,比如,主动把负载迁移到新成员。

membership service直接的体现就是集群中的结点可以订阅ClusterEvent.

Cluster(context.system).subscribe(actorRef, classOf[ClusterEvent.XXXX]

Akka只是提供这种构建分布式系统的基础服务,但是构造针对特定问题的分布式系统,还需要更详细的设计和实现。