| 簡談多程序架構和服務器群之二 |
| 送交者: 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 的。墨非定律。如果它可能出錯,那麼它一定出錯。 不管你怎麼改都沒有用的。那麼有沒有從設計開始就不容許出錯的語言,編譯器和計算機呢,當然有的。不過就不在本文範圍之內了。
註: 本文全憑記憶和個人經驗。 如有錯誤,歡迎指正。
|
|
![]() |
![]() |
| 實用資訊 | |
|
|
| 一周點擊熱帖 | 更多>> |
| 一周回復熱帖 |
| 歷史上的今天:回復熱帖 |
| 2015: | 最懷念的餃子是煮好, 晾涼, 再用油煎 | |
| 2015: | 我真運氣.有這麼好的朋友. 附歌曲:春天 | |
| 2014: | 馬來西亞11佛教團體總會聯署文告:“心 | |
| 2014: | 這個世界一片混亂。 | |
| 2013: | 額知道這個不好比,但一般認為MIT好還 | |
| 2013: | TZA持續新低 | |
| 2012: | 政治,只有會玩的才能玩得轉,和制度無 | |
| 2012: | 這個白靜是不是死有餘辜呢?看她面相, | |
| 2011: | 這次地震再次突顯了倭人的小聰明有餘, | |
| 2011: | 伊萍:大難面前令人起敬的日本人 | |




