Screeps 彈性伸縮與節(jié)流

消息服務(wù)架構(gòu)

image-20210830142644101.png

數(shù)據(jù)存儲

image-20210830142343154.png

數(shù)據(jù)例子

image-20210830142422629.png

彈性伸縮

假如你手頭有一個計算量非常大的計算任務(wù),你想要加快任務(wù)的完成進度,你有兩種選擇

  1. 垂直縮放(Scaling up/Scaling down),升級手頭的計算機配置,加大內(nèi)存,換ssd,換更好的cpu,gpu等等。在Screeps中,可以理解為使用更大的Creep,更高效的執(zhí)行計劃(從單creep挖運,改成挖運分離)

  2. 水平縮放(Scaling out/Scaling in),多買幾臺計算機,一起參與計算。在Screeps中,可以理解為生更多的爬。

基于不同條件伸縮劃分的四種服務(wù)類型

img161223.png

基于消息水平縮放的服務(wù)

這類型的服務(wù),可以通過控制爬的數(shù)量來控制產(chǎn)出。

  1. 當(dāng)處理消息的速度低于消息增加的速度時,向孵化服務(wù)發(fā)送消息,請求更多的爬。

  2. 當(dāng)處理消息的速度高于消息增加的速度時,即消息存儲中經(jīng)常為空,則不請求爬,或者釋放一部分爬(回收,或者再分配)

基于配置水平縮放的服務(wù)

配置信息表示的是一種”理想狀態(tài)“,這類型的服務(wù)致力于縮小”理想“和”現(xiàn)實“的差距。以建造為例:配置中設(shè)定了A位置有Storage,建造服務(wù)就會檢查A位置上是否有Storage,如果沒有,就在該位置建造Storage。

基于環(huán)境水平縮放的服務(wù)

和上一類服務(wù)類似,區(qū)別在于,這類服務(wù)的理想狀況是”顯而易見“的,不需要配置。以維修服務(wù)為例:當(dāng)建筑的hits不滿時,維修這些建筑。

垂直縮放

每個服務(wù)內(nèi)部配置垂直縮放,例如:房間內(nèi)能量采集服務(wù),在RCL較低時,因為體型較小,可以多個Creep挖一個礦,且挖運一體;RCL提高后,替換單Creep挖,單Creep運;link建造之后,替換為單Creep挖,link運。

節(jié)流

image-20210830143439171.png

實時優(yōu)先級

優(yōu)先級不存儲在消息中,而是在消息處理服務(wù)從消息存儲讀取消息時,結(jié)合配置信息/環(huán)境實時計算出優(yōu)先級,這樣做的好處是,當(dāng)緊急情況發(fā)生時,可以立刻做出反應(yīng),比如能量不足,爬死光了,或者突然遭遇了進攻,動態(tài)的優(yōu)先級可以把最迫切的消息提到最高的優(yōu)先級。

消息的優(yōu)先級,可以隨著等待時間的增加而增加,避免這些消息永遠(yuǎn)得不到處理。

全局過濾

水平縮放的前提是,總資源足夠。但是在一些情況下,例如CPU緊缺,能量緊缺,開戰(zhàn),需要人為限制處理一些消息,這種時候優(yōu)先級就不能解決問題了,因為如果消息存儲中只有這條消息,他仍然會被處理。因此需要一個全局過濾器,當(dāng)消息的處理服務(wù)從消息存儲中讀取消息時,過濾這部分消息。

可以通過兩個維度來聯(lián)合過濾消息:

  1. 房間

  2. 消息發(fā)布者

例如某房間開戰(zhàn)時,其他房間的維修,建造服務(wù)都可以暫停,但是戰(zhàn)斗房間的維修服務(wù)不能暫停,這里體現(xiàn)了房間維度過濾的必要性。采集服務(wù)可以全部暫停,這就體現(xiàn)了消息發(fā)布者維度過濾的必要性。兩者結(jié)合,可以靈活處理各種突發(fā)事件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容