設萬維讀者為首頁 廣告服務 聯繫我們 關於萬維
簡體 繁體 手機版
首頁 新聞 視頻 博客 論壇 分類廣告 購物
版主:阿飛的劍
萬維讀者網 > 茗香茶語 > 帖子
簡談多程序架構和服務器群之二
送交者: mingcheng99 2016年03月14日16:43:50 於 [茗香茶語] 發送悄悄話

簡談多程序架構和服務器群之二, 兼與懶網討論


我們把前文問題簡化為一個軟件在更新後重新起動的時候,需要其作用不被間斷, 這樣的問題我們在上文中指出在很多時候都有實際需求。 懶網提出用雙子星架構來解決這個問題。 採用過程是:A -> A' with alias B, B kills A, B deletes A, B copies itself to B', B' renames alias B to A'。  

我們把一個已經啟動的程序叫作它的 image 。就是它的機器碼已經加載在一定的已經 allocated 好的 memory 內並在執行。 它的原碼改動之後,可以再編譯成一個新的可執行文件,假設還是叫 XX。EXE。 你可以再起動它,這樣就有兩個同名, 但內容不同,  彼此獨立的 images 在跑。 但是,如果這兩個images 都要占用機器的某些不可以共享的資源,或者是機器容量不足以容納這兩個images同時在跑,那麼顯然是有問題。 其他問題根據具體軟件其實還有,不過這裡先放過.   如果我們先把舊的image 殺掉,再讓新的 image 起來。就沒有資源和容量問題,它們可以共享一個獨立運行的數據庫沒有問題。但是,對於有 real time 數據進來的程序,這就至少會失去在等待新程序起來的時間內進來的數據。傳統上解決這個問題的方法是再用一個控制軟件來控制這樣的程序,不管兩個程序是否同名。這個控製程序我們叫它 Director。Director只是一個小程序,它一般做成象計算機的一個 built in 的服務。它永遠是在運行的。 它管理這些程序的啟動和下去。並接受新image 上來之前的數據。以傳給新的image, 這樣就至少不會失去數據,即使可能處理不及時。


我說過,在做自動化控制的時候,軟件不但要同時控制多個程序,還要控制多個在協作運行的機器。 這些機器和自帶的控製程序還來自不同的廠家.   任何一個程序都可能當掉,下面我們看到連專業服務器群都可能當掉,所以任何架構都不是保險的。我們的一個底線就是要晶圓不掉下來和不碎。我們的設備是提供給英特耳的,那裡正在處理中的一個晶圓可能價值很多萬刀,我們有句話說,如果晶圓掉下來,那意味着我們的飯碗也掉下來。許多問題,在實際運行中才能發現,不是如同想象的那麼好做。


這樣的架構和概念發展成服務器群。一個目的是這些服務器可以同時運行做一樣的工作。這樣來支持多用戶。另一個目的就是在某一個服務器,特別是某些專門的服務器需要重新啟動或者是當掉的時候,對外的服務不被中斷。有一個專門的服務器來管理整個服務器群,就是我們提到的 Director. 基本上,所有重要的服務都用服務器群,以免服務不被中斷。


就在幾年以前,我們曾用過專業的服務器群來提供網絡電話的開發和測試,理論上不會失去數據,但在服務器轉換的時候依然會失去real time 數據,我們的程序都沒有看見數據進來。但處於同一個實驗室的測試用戶確實打了電話。我們都無法找到數據在那裡丟失的.  我們甚至經常可以看到一些著名IT公司的服務都會斷掉,就是說整個服務器群都當掉了。


為什麼任何軟件和機器都會出問題呢, 那就涉及到更深層的原因了。因為當前我們常見的民用計算機如 PC,服務器。和程序語言如 C,C++, C#, Java 還有相應的編譯器,等等,它們在設計上都是容許出錯 runtime error 的。墨非定律。如果它可能出錯,那麼它一定出錯。 不管你怎麼改都沒有用的。那麼有沒有從設計開始就不容許出錯的語言,編譯器和計算機呢,當然有的。不過就不在本文範圍之內了。


註: 本文全憑記憶和個人經驗。 如有錯誤,歡迎指正。


0%(0)
標 題 (必選項):
內 容 (選填項):
實用資訊
回國機票$360起 | 商務艙省$200 | 全球最佳航空公司出爐:海航獲五星
海外華人福利!在線看陳建斌《三叉戟》熱血歸回 豪情築夢 高清免費看 無地區限制