一旦走上多進程之路,開發者也發現了多進程系統的一些其他好處:可以利用多核CPU能力;使用操作系統的工具可以更仔細地監控運行狀態,使災難恢復更容易。多進程系統的經典模型是“三層架構”:
在多進程架構下,開發人員一般傾向于將每個模塊的功能獨立開發成一個進程,然后使用進程間通信來協調和處理完整的邏輯。這種思想是一種典型的“流水線和過濾器”架構模式——將每個進程視為一個過濾器,用戶發送的數據包流經由多個過濾器連接而成的流水線,最終得到完整的處理。因為使用了多個進程,首先,用一個進程和一個線程來構造每個進程。這樣對于游戲程序的開發來說,結構就清晰簡單多了,可以獲得更高的性能。
雖然有很多優點,但是在多進程系統中還有一個需要特別注意的問題——數據存儲。由于數據的一致性,很難將存儲過程分為多個過程。即使關系數據分為數據庫和表,也非常復雜,取決于業務類型。而且,如果單個邏輯處理流程無法承載,開發人員很難并行擴展特定的業務邏輯,因為其內存中的數據很難分割和同步。他們可能會選擇使業務邏輯流程無狀態化,但這增加了存儲流程的性能壓力,因為每個業務流程都需要在存儲流程中提取或寫入數據。
除了數據問題,多進程架構還帶來了一系列的運營開發問題:一是整個系統的部署比較復雜,因為需要連接配置多個不同類型的進程,導致需要管理大量的配置文件;其次,由于進程間通信較多,需要定義大量的協議。對于單個進程下的函數調用所解決的問題,必須在多個進程下定義一組請求和響應協議,這導致整個源代碼規模增加一個數量級。最后,整個系統被肢解成許多短功能的代碼片段。如果不了解整體結構,就很難理解一個完整的業務流程是如何處理的,這就使得代碼的閱讀和交接成本極高,尤其是在游戲領域。因為業務流程變化非常快,幾乎沒有人能完全掌握修改后的系統內容。有不懂的請咨詢夢飛服務器了解。
