2016-01-13 102 views
3

我已經閱讀了Akka docs on fault tolerance & supervision和我認爲我完全得到他們,有一個很大的例外(沒有雙關語意圖)。阻止Akka演員的目的是什麼?

爲什麼你會想要/需要stop一個小孩演員???

在文檔中唯一的線索是:

接近二郎方式是戰略只停留在他們失敗的孩子,然後採取主管糾正措施......

但對我來說,停止一個孩子就像說「不再執行此代碼」一樣,對我來說,這與對代碼進行新的更改實際上是相同的,

  • 每一個演員扮演的男主角系統
  • 要簡單地停止演員意味着演員目前沒有一個角色不再一些重要的角色,並假定該系統現在可以以某種方式(神奇),而它的工作
  • 如此反覆,對我來說,這是沒有比重構代碼,甚至沒有任何演員多,然後部署這些變化
  • 不同

我敢肯定,我只是沒有看到過的森林這個樹上的樹,但我只是沒有看到任何用例,我會有這個大的compl前演員系統,每個演員都在進行關鍵性的工作,然後把它交給下一個關鍵演員,但是隨後我停止了演員,神奇地是整個系統繼續完美地工作。

簡而言之:阻止演員(對我來說)就像是從行駛中的車輛中扯下變速器。這怎麼能成爲一件好東西?!?

+0

有人總是會經歷並降低我的Akka問題。我感覺Akka的用戶指南編輯團隊中有人對我產生怨恨,因爲我呼籲他們的文檔需要改進的地方! **這個問題是關於主題,不是一個騙局,而是一個[SSCCE](http://sscce.org)。爲什麼downvote?** – smeeb

+0

百特...是你?!?至少有勇氣說話! – smeeb

+0

這絕對是一個有效的問題,我可以爲Akka團隊擔保,我們沒有理由或希望減少在文檔中提出遺漏的問題。但讓他們修復的更好方法是在github上打開問題,我偶然偶然發現了這個問題。 –

回答

2

「錯誤內核」模式的本質是委託有風險的操作並保護基本狀態,通常爲一次性操作產生子actor,並且當操作完成並將其結果發送到其他地方時,小孩演員或父母演員需要阻止它。 (否則兒童演員將保持活躍/泄漏)

+0

Thanks @Viktor Klang(+1) - 這是一個有趣的答案,我可能決定恢復綠色檢查(對不起znurgl)。當你說「*否則孩子 - 演員會保持活動/泄漏*」,你是什麼意思**泄漏**?我假設,如果它沒有任何工作要做(否則它只是佔用資源),但我們不想確定你的意思是「泄漏」,並且擔心有一些與框架有關的大事在這裏失蹤了。再次感謝! – smeeb

+0

演員一直活着直到停下來,所以如果演員永遠不會有別的事情要做,那就需要停下來。行動者可以通過手工,監督或當他們的父母演員停止時停止。 –

1

如果孩子的演員正在做一個可以安全終止的較長過程,例如視頻編碼或某種文件轉換,並且您必須部署一個新的構建,那麼終止標誌對於優雅地停止運行進程。

+0

好吧,我*想*我明白了。我認爲可以這樣說* Stop *是一種特殊的用例,並不是錯誤處理生命週期中的正常部分(意思是說,你通常不會在父母的「SupervisorStrategy#Decider」中阻止一個孩子) )。 – smeeb

0

每一個演員扮演的男主角系統中的一些關鍵性的作用

這是你正在遭遇困境,我可以創造一個兒童演員到做一個工作,例如對數據庫執行查詢或維護連接用戶的狀態,這是它唯一的目的。

一旦數據庫查詢完成或者用戶已正常斷開連接,子actor就不再有任何角色可以播放,應該停止播放,以便釋放其擁有的任何資源。

要簡單地停止演員意味着演員目前沒有一個角色的任何>長,並假定該系統現在可以以某種方式(神奇),沒有它

工作,該系統能夠繼續因爲我可以在需要/需要時創建新的兒童演員。