使用Akka Cluster Singleton實現(xiàn)集群單例

上篇文章主要講了如何使用Akka作異步任務處理。最后還拋出一個問題。

具體問題的描述就不在這篇文章贅述了拷呆,我們僅簡單回顧一下第一種解決方案:覆寫persistenceId()時,加一個UUID疫粥,這樣三臺服務器上的Actor就不會再共享journal茬斧。雖然這個方案已經(jīng)可以解決問題了,但并不是最理想的梗逮。首先项秉,現(xiàn)在的項目中只是用akka處理一些無狀態(tài)的任務異步處理,但是將來肯定要用akka作更多的事情慷彤。比如娄蔼,緩存怖喻,DAO這些可以設計成有狀態(tài)的,而現(xiàn)在actor重啟時是不能replay消息消息歷史的岁诉,所以這樣不能最大限度發(fā)揮actor的優(yōu)勢锚沸。還有,我的目標是把所有的后端server構建為一個邏輯上的server涕癣,現(xiàn)在他們?nèi)匀皇侨齻€各自為營的獨立server哗蜈。因此我又繼續(xù)作了一些調(diào)研,最終發(fā)現(xiàn)了Cluster Singleton坠韩。

文檔上給出了Cluster Singleton的適用場景:

  • 集群中的單點決策距潘,或者協(xié)調(diào)
  • 統(tǒng)一外部系統(tǒng)出口
  • 一主多從
  • 統(tǒng)一命名服務或路由邏輯

第二點正好就是我們的場景。下邊看一下如何使用Cluster Singleton只搁。

  1. 添加依賴(我用的構建工具是Gradle)
compile("com.typesafe.akka:akka-cluster_2.11:${akkaVersion}")
compile("com.typesafe.akka:akka-cluster-tools_2.11:${akkaVersion}")
  1. 創(chuàng)建actor
actorSystem.actorOf(ClusterSingletonManager.props(
    SpringExtProvider.get(actorSystem).props("NotificationActor"),
    PoisonPill.getInstance(),
    ClusterSingletonManagerSettings.create(actorSystem).withRole("master")
), "notification-master");

notificationActor = actorSystem.actorOf(
    ClusterSingletonProxy.props(
        "/user/notification-master",
        ClusterSingletonProxySettings.create(actorSystem).withRole("master")),
    "notification-proxy");

創(chuàng)建actor比原來復雜了音比。首先要創(chuàng)建一個ClusterSingletomManager。ClusterSingletonManager也是一個Actor须蜗,它會在Cluster的每個節(jié)點上都啟動起來(或者集群擁有某些角色的節(jié)點)。ClusterSingletomManager.props要傳入三個參數(shù)目溉,第一個是需要創(chuàng)建Singleton實例的Actor配置明肮;第二個是當Manager關閉時要給它管理的Actor發(fā)送什么消息;第三個缭付,集群部署配置柿估,即指定ClusterSingletomManager在哪些集群Node上啟動。

接下來ClusterSingletonManager會選擇一個最老的實例并在上面創(chuàng)建Actor單例陷猫。ClusterSingletonManager可以確保整個集群中至多有一個singleton的實例秫舌,言下之意,存在沒有singleton實例的時刻绣檬。比如cluster node crash足陨,原有的singleton實例丟失,這時需要重新選舉新最老的ClusterSingletonManager娇未,然后創(chuàng)建新的singleton實例墨缘。

訪問Singleton Actor需要借助于ClusterSingletonProxy,ClusterSingletonProxy會把所有的消息forward給當前被代理的Actor實例零抬。因為有可能某些時刻是沒有singleton actor實例的镊讼,所以遇到這種情況ClusterSingletonProxy會先把消息緩存,當新的Actor單例創(chuàng)建之后平夜,再把緩存的消息轉(zhuǎn)發(fā)過去蝶棋。

當然,Cluster Singleton也有它的問題忽妒,比如單點潛在的性能問題玩裙,而且singleton actor并不是100%可用兼贸。但相比于第一種方案,顯然這個要更接近我的期望献酗。


write on 2017-1-10

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寝受,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子罕偎,更是在濱河造成了極大的恐慌很澄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜及,死亡現(xiàn)場離奇詭異甩苛,居然都是意外死亡,警方通過查閱死者的電腦和手機俏站,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門讯蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肄扎,你說我怎么就攤上這事墨林。” “怎么了犯祠?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵旭等,是天一觀的道長。 經(jīng)常有香客問我衡载,道長搔耕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任痰娱,我火速辦了婚禮弃榨,結果婚禮上,老公的妹妹穿的比我還像新娘梨睁。我一直安慰自己鲸睛,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布坡贺。 她就那樣靜靜地躺著腊凶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拴念。 梳的紋絲不亂的頭發(fā)上钧萍,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音政鼠,去河邊找鬼风瘦。 笑死,一個胖子當著我的面吹牛公般,可吹牛的內(nèi)容都是我干的万搔。 我是一名探鬼主播胡桨,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞬雹!你這毒婦竟也來了昧谊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酗捌,失蹤者是張志新(化名)和其女友劉穎呢诬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胖缤,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尚镰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哪廓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狗唉。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涡真,靈堂內(nèi)的尸體忽然破棺而出分俯,到底是詐尸還是另有隱情,我是刑警寧澤哆料,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布缸剪,位于F島的核電站,受9級特大地震影響剧劝,放射性物質(zhì)發(fā)生泄漏橄登。R本人自食惡果不足惜抓歼,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一讥此、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谣妻,春花似錦萄喳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至减江,卻和暖如春染突,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辈灼。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工份企, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巡莹。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓司志,卻偏偏與公主長得像甜紫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骂远,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理囚霸,服務發(fā)現(xiàn),斷路器激才,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Actor系統(tǒng)的實體 在Actor系統(tǒng)中拓型,actor之間具有樹形的監(jiān)管結構,并且actor可以跨多個網(wǎng)絡節(jié)點進行透...
    JasonDing閱讀 3,341評論 2 6
  • 1 場景問題# 1.1 讀取配置文件的內(nèi)容## 考慮這樣一個應用贸营,讀取配置文件的內(nèi)容吨述。 很多應用項目,都有與應用相...
    七寸知架構閱讀 6,771評論 12 68
  • 本文檔翻譯自 http://redis.io/topics/cluster-tutorial 钞脂。 本文檔是 Red...
    會跳舞的機器人閱讀 66,933評論 2 21
  • 這個夏天揣云,我畢業(yè)了。 領畢業(yè)證的那天下了很大很大的雨冰啃,站在校門口的長亭里邓夕,看著來來去去的人群,突然間仿佛看到昨天進...
    檸檬小新dy閱讀 174評論 1 0