大型網際網路系統的特點
高并發,發流量:面對大量并發使用者
高可用:7 * 24 小時不間斷服務
海量資料:需要存儲,管理海量資料
使用者分布廣泛,網絡情況複雜:營運商通信可能困難,網絡地域網絡情況不同,國際網絡延遲
安全問題:被攻擊,資訊洩露
漸進式發展:網站都是從無到有,從小到大發展起來的,不要刻意為了 大型網站架構而設計大型網站架構,所有的系統更新都是為了業務,業務一定,追求穩定,隻有業務需要發生改變,才做出改變
- 初始階段網絡架構:應用程式、檔案、資料庫存在一台伺服器上
- 應用服務和資料服務分離:應用程式、檔案、資料庫 存在不同伺服器上
- 增加緩存:網站内容通路遵循 二八定律,是以,将經常通路的資料放在緩存裡,增加緩存
- 搭建應用程式叢集:将應用程式 搭建成叢集結構的,就是将應用程式原封不動拷貝到多個伺服器上,使用 負載均衡伺服器 調節
- 資料庫讀寫分離:緩存存在 不命中、緩存過期的情況,那麼使用者多了,資料庫就有壓力,是以,使用 資料庫主從 進行讀寫分離
-
使用反向代理和CDN
反向代理的使用:将一些靜态的頁面或者資源放在反向代理伺服器(一般是中心機房)上,使用者通路的時候就不用轉發請求到 應用程式伺服器,直接将靜态資源傳回給使用者
CDN:由于使用者一般是先和營運商互動,是以,企業可以将一些不經常改變的靜态資源放在營運商伺服器上,這樣就不要再請求 企業伺服器了
-
分布式檔案系統和分布式資料庫系統
分布式檔案系統:單一伺服器無法滿足需求
分布式資料庫系統:
一般情況,資料庫拆分的依據是不同的業務,也就是說,不同的業務才會拆分資料庫。
隻有當資料單表太大,才使用分布式資料庫
-
使用 NoSql和搜尋引擎
當對資料存儲和資料檢索的需求複雜時,
需要使用非關系型資料庫
非資料庫查詢技術,例如搜尋引擎
- 業務拆分:将不同業務拆分(例如:購物、商鋪、訂單……),分别放在不同伺服器,通過使用 消息隊列轉發消息
- 分布式服務:将業務拆分獨立部署,同時,将相同的業務,或者是相同的代碼塊拿出來複用,複用的業務再裝入到一個伺服器中,讓這個複用的伺服器來與資料庫、緩存、搜尋引擎等等來互動
雲計算:
大型網站,例如阿裡、華為、騰訊 等等公司的技術相對成熟,無論是安全性還是穩定性,他們已經做好了一些架構,普通的小型網站隻需要付錢,使用他們做好的架構即可,如果想有更高的性能,隻需要付更多的錢。
網站架構設計的問題:
網站都是從無到有,從小到大做起的
驅動網站發展的動力,是 業務,而不是為了更新的技術,不是為了使用更新的技術
小型網站不要追求大網站的解決方案,适合自己才是最好的
不要為了技術而技術,技術是為了業務而産生的,業務的提出也産生了更好的技術
不要一味用技術來解決所有問題,問題不一定都是技術不夠新而産生的,例如 安全問題,可能是業務的問題,不要一味使用新架構來解決