我最近開始搞亂阿卡的演員和http模塊。然而,我偶然發現了一個令人討厭的小怪癖,那就是創建singelton演員。阿卡和單身演員
這裏有兩個例子:
1)
我有一個內存緩存,我的服務是相當小的(其應用程序,而),所以我很喜歡這在內存模型。我可以在地圖中保存與用戶有關的大部分信息(以及列表圖,但仍然很容易推理結構),而且我沒有獲得redis,geode或aerospike的開銷和複雜性。
唯一的問題是這個內存chache可以被多個源修改,並且所述修改必須是同步的。我認爲我只是將結構和訪問方法包裝到一個actor中,構建消息隊列,容易接收 - >發送邏輯,而不是將這個結構的所有3個接入方法同步(例如通過構建消息隊列或實現鎖定)如果事情擴大,那麼使用內存數據庫中的專用數據庫替換DA角色將非常容易。我有一個「服務」層,應該用來爲各種作業調度角色(訪問數據庫,訪問內存中的緩存,使用數據執行此計算並將結果傳遞給用戶...等等)。
它使服務層成爲排序的「單例」,對某些函數進行封閉,因爲它沒有任何阻塞或CPU /內存密集的任何方式,它只是將任務進一步分配到下一行如決定請求應該有多少演員/線程/我們應該創建和去哪裏)
但是,這件事情需要之一:
a)使這兩個對象的單身者或
b)製作這兩個對象都是實際的「對象」(如在scala對象表示法中,它指定一個帶有fu的單名單例)在其範圍內關閉的節點)
b)存在很多問題,即服務層要麼必須讓一個actor系統「通過」它(我不確定這是一個最佳實踐)爲了創建參與者,而不是創建自己的「孩子」,它將使用全球參與者系統創建孩子,而消息傳遞和監控邏輯將更加尷尬和不直觀。此外,內存緩存不會有內置消息隊列的優勢(我不是說它很難實現一個,但這似乎是其中一種情況,其中之一是「哦,快活,它的好處我有演員,我不必花時間來實施和測試這個代碼「)
a)似乎有一個問題,一般來說,在akka文檔中通常沒有文檔記錄和未被記錄。我的意思是:
http://doc.akka.io/docs/akka/2.4/scala/cluster-singleton.html
看看這個狗屎,在文檔中有一半是警告不要使用它,它是它自己的依賴,並坦率地說,它非常難以閱讀的可憐的傢伙像我這樣還沒有併入編程的象牙塔&。
所以,啊。你們中的任何一個人可以向我解釋爲什麼它不好使用單身演員?你如何設計單身人士,如果他們不能成爲演員?有沒有什麼辦法可以設計出不會造成很多傷害的單身演員?整個「服務」模型是否具有「全球」服務而不是實例化的「un akka like」?