"Principles of Reactive Programming" 之<Actors are Distributed> (3)

devos發表於2015-02-07

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只是提供這種構建分散式系統的基礎服務,但是構造針對特定問題的分散式系統,還需要更詳細的設計和實現。

 

相關文章