前一節(jié)中描述了如何使用Actor路徑,使位置透明性涩僻。這個(gè)特點(diǎn)值得額外的解釋缭召,因?yàn)橄嚓P(guān)的術(shù)語“透明遠(yuǎn)程”在上下文中使用編程語言栈顷,平臺(tái)和技術(shù)是完全不同的。
分布式
Akka中所有被設(shè)計(jì)為分布式環(huán)境工作:所有交互的Actor純粹用消息傳遞且都是異步實(shí)現(xiàn)嵌巷。它的成果是所有的功能在單個(gè)JVM上或成百上千的集群機(jī)器上同樣可用萄凤。啟用的關(guān)鍵是從遠(yuǎn)程到本地的優(yōu)化,而還是本地到遠(yuǎn)程的泛化搪哪∶遗看本文詳細(xì)論論第二種方法的注定失敗的原因。
透明傳輸?shù)姆椒ǖ娜毕?/h1>
由于設(shè)計(jì)分布式執(zhí)行帶來了一些限制晓折,哪些適用于Akka需要不適用于應(yīng)用程序使用它惑朦。最明顯的一點(diǎn)是所有消息發(fā)送時(shí)必須序列化。另一不太明顯的一點(diǎn)是在Actor在遠(yuǎn)程節(jié)點(diǎn)上創(chuàng)建時(shí)漓概,如果Actor工廠那樣封閉漾月。
另一方面,所有交互是異步的胃珍,這意味著一個(gè)消息在網(wǎng)絡(luò)中傳遞可能需要幾分鐘后到達(dá)接收人(按配置)梁肿。這表示消息丟失的可能遠(yuǎn)高于在一個(gè)JVM中,那里丟失的可能接近于零(仍無法絕地保證)觅彰。
如何遠(yuǎn)程使用
透明方式限制幾乎沒有Akka沒有API訪問遠(yuǎn)程:通過配置驅(qū)動(dòng)吩蔑。應(yīng)用程序根據(jù)前一節(jié)描述的原則,然后在配置文件中指定遠(yuǎn)程部署的Actor子樹填抬。通過這種方式,應(yīng)用程序可以向外擴(kuò)展,而無需訪問代碼烛芬。在遠(yuǎn)程布署時(shí)僅有的可編程API是Prop
字段,可能指定為Deploy
實(shí)例痴奏。把布署內(nèi)容在配置文件中發(fā)布會(huì)有同樣的效果(兩者都有取配置文件中的)蛀骇。
點(diǎn)對(duì)點(diǎn)和客戶服務(wù)方式
Akka遠(yuǎn)程的連接Actor系統(tǒng)的通訊方式是點(diǎn)對(duì)點(diǎn),這是Akka集群的基礎(chǔ)读拆。這樣設(shè)計(jì)遠(yuǎn)程驅(qū)動(dòng)有兩點(diǎn)(相關(guān)):
- 系統(tǒng)間的通信是對(duì)稱的;如果系統(tǒng)A能連接到系統(tǒng)B鸵闪,那么系統(tǒng)B也能獨(dú)立的連接到系統(tǒng)A檐晕。
- 通信系統(tǒng)的規(guī)則是對(duì)稱的連接模式:沒有系統(tǒng)只接收連接,沒有系統(tǒng)只發(fā)送連接蚌讼。
這些是不可能安全地創(chuàng)建純客戶端-服務(wù)器設(shè)置預(yù)定義的規(guī)則(違反假設(shè)2)辟灰。客戶端-服務(wù)器設(shè)置最好是使用HTTP或Akka I / O
重要:使用設(shè)置網(wǎng)絡(luò)地址轉(zhuǎn)換篡石、負(fù)載均衡和Dock容器違反假設(shè)1芥喇,除非采取額外的步驟允許所涉及對(duì)稱通信系統(tǒng)通信。在這種情況下可以配置Akka綁定到一個(gè)不同的網(wǎng)絡(luò)地址用于Akka節(jié)點(diǎn)之間建立連接凰萨。
標(biāo)記點(diǎn)擴(kuò)大用于路由
除了能夠一個(gè)Actor系統(tǒng)的不同部分在不同節(jié)點(diǎn)上的集群運(yùn)行继控,還可以擴(kuò)大到更多的內(nèi)核繁殖Actor子樹支持并行化(例如搜索引擎并行處理不同的查詢)械馆。克隆可以用不同的方式被路由到武通,例如循環(huán)霹崎。唯一需要實(shí)現(xiàn)目標(biāo)是,開發(fā)人員需要聲明一個(gè)特定的演員“withRouter”,接著路由Actor將會(huì)創(chuàng)建冶忱,它會(huì)產(chǎn)生一定數(shù)量可配置的相要的子級(jí)尾菇,并通過配置方式路由到它們。當(dāng)一個(gè)路由被申明后囚枪,它能自由的被覆蓋派诬,包括被遠(yuǎn)程發(fā)布的(子)級(jí)混合。