
假設網站基礎設施非常複雜且是完全分散的(可能像大多數大型網路公司一樣)。
我的想法是否正確,雖然有所有這些額外的網頁伺服器來處理多個客戶端請求,但仍然有一個用戶必須輸入的「機器」?我猜這台機器將是與 IP 位址物理關聯的機器?
我問這個問題是因為我需要知道在分散式系統存在的地方是否仍然存在單點故障——通常是控制節點,或者在本例中是連接到公共互聯網的機器?當然不能有兩台機器連接到互聯網,因為它們必須有不同的 IP 位址?
這台「機器」本身可能不是伺服器,但可能是一台思科設備。我只需要知道,在現實世界中,這些分散式系統是否仍然有一個特定部分依賴於一個電子設備的完整性?
答案1
可以但不需要有一台機器所有請求都經過,通常這台機器被稱為負載平衡器。但是,如果用戶端發出的每個請求都是自包含的,或者如果分散式前端可以與同步的分散式後端通信,則用戶端可以針對其發出的每個請求與不同的機器通信。
所需要發生的只是客戶端在請求中向獨立機器提供完成請求所需的所有信息,或者伺服器根據令牌(通常是網站的 cookie)向後端分佈式資料庫進行查詢)並且伺服器可以從另一台機器停止的地方繼續。
答案2
為了回答你的問題,不,您可以建立一個沒有單點故障的網站基礎架構。
DNS 循環允許多個 IP 與單一網域名稱關聯;這些前端中的每一個都可以依序與聚集的後端系統,其中有多個獨立的資料庫副本,並且持續同步。
傑夫·阿特伍德實際上寫部落格關於 Netflix 在使系統不受單點故障影響方面所做的工作,包括隨機關閉用於測試的服務/實例的守護程序。
答案3
一些例子:
在 Ubuntu 9.10 (Karmic) 上透過 IP 故障轉移、Heartbeat 和 Pacemaker 讓網站高度可用
Microsoft Cluster Server (MSCS) 提供了在叢集內定義 IP 位址資源並使其能夠從一個節點故障轉移到另一個節點的功能。
相同的原理可以應用於任何前端系統,例如負載平衡器,其工作是將傳入的 HTTP 請求分發到伺服器叢集中的 Web 伺服器節點。
答案4
一個網域可以(並且經常)有多個不同的 IP 位址關聯。例如,google.com 目前(對我來說)解析為:
Name: google.com
Address: 173.194.34.129
Name: google.com
Address: 173.194.34.130
Name: google.com
Address: 173.194.34.131
Name: google.com
Address: 173.194.34.132
Name: google.com
Address: 173.194.34.133
Name: google.com
Address: 173.194.34.134
Name: google.com
Address: 173.194.34.135
Name: google.com
Address: 173.194.34.136
Name: google.com
Address: 173.194.34.137
Name: google.com
Address: 173.194.34.142
Name: google.com
Address: 173.194.34.128
Web 瀏覽器的行為各不相同,但通常它會隨機嘗試一個 IP 位址,如果第一個位址沒有回复,則轉向另一個 IP 位址。所以這裡不存在單點故障。