Linux

真實世界建築

  • June 15, 2018

我對現實世界的 Web 應用程序的架構方式有點困惑,我很高興能得到一些澄清。我知道有很多方法和不同的方法,但是來自 Facebook/Amazon/Youtube 等知名網站的範例就足夠了。可以說我正在提供網路內容。我假設我將有一個 Web 伺服器集群和一個 DB 集群,它們前面有一個負載均衡器。

我的問題是:

  1. 你如何儲存http程式碼?它是本地儲存在每台機器上還是共享儲存上?如果在本地,如果網站發生更改,我如何更新程式碼
  2. 靜態內容也是如此,我假設它駐留在共享儲存中
  3. 如果我使用的是 CDN ,它是否只是記憶體所有靜態訪問的數據?多長時間?
  4. LB - 我可以擁有一個 LB 集群嗎?如果是這樣,它是如何工作的?
  5. 您會為 youtube/streaming like 網站選擇什麼數據庫?為什麼

我知道這是很多問題,但如果我能得到所有答案,我將不勝感激。謝謝!

你如何儲存http程式碼?它是本地儲存在每台機器上還是共享儲存上?如果在本地,如果網站發生更改,我如何更新程式碼

有多種方法,您可以將程式碼儲存在共享儲存上,例如 NFS/S3 掛載 - 使得集中更新非常容易,顯然您會引入單點故障,因此人們通常有兩個副本程式碼在不同的儲存上,因此它們只能失去一半的節點 - 您也可以將其用於藍/綠測試/部署。另一種選擇是將其儲存在諸如 Ceph 或類似的分佈式文件系統上,同樣的警告顯然是成立的。

靜態內容也是如此,我假設它駐留在共享儲存中

通常這是真的,很多人使用基於雲的儲存來儲存靜態內容,因為從網路的角度來看,它通常“靠近”他們的 CDN,現在很少看到直接儲存在網路伺服器上的內容。

如果我使用的是 CDN ,它是否只是記憶體所有靜態訪問的數據?多長時間?

這當然是基本功能,它們通常可以做更多的事情,而且 TTL 幾乎總是可以在單個對象/文件的基礎上進行配置。

LBs - 如果有的話,如何查看機器是否過載(平均負載)?

許多不同的方式,打開連接,響應時間,共享資源使用率統計資訊 - LB 可以非常“可調”,我非常尊重優秀的 LB 經理。

LB - 我可以擁有一個 LB 集群嗎?如果是這樣,它是如何工作的?

是的,從字面上看,它們的層級和您喜歡的方式 - 例如,我們使用 Global LB’ing 根據多種因素將流量發送到特定數據中心,然後一旦到達該站點,它就會被分成不同的服務組(綠色/例如藍色),然後到實際的服務負載均衡器。

您會為 youtube/streaming like 網站選擇什麼數據庫?為什麼

沒有一個最好的數據庫對不起 - 有太多的因素,成本是一個主要的(我的話 MSSQL 和 Oracle 這些天可能會變得超級花錢!)但要考慮的主要事情是你的數據庫是否需要引用完整性,好像它那麼您是否需要一個基於 SQL 的數據庫(雖然有免費的,但 MySQL 和 PostGRES 非常受歡迎),但是如果您可以正確設計數據,那麼您可以擺脫“NoSQL”數據庫,例如 Couchbase/Mongo/Cassandra 和它們絕對是FLY,比基本查詢的 SQL 快得多——但顯然它們的功能不那麼豐富。另一件事是您現在可以完全在雲中完成您的數據庫工作——AWS 尤其擁有強大的數據庫類型組合,Azure 顯然將 MSSQL 作為其組合的一部分。

引用自:https://serverfault.com/questions/916787