架構設計--網際網路架構演化(轉發)
阿新 • • 發佈:2022-01-10
- 轉發
- 微博
- Qzone
- 微信
- 支撐海量資料
- 非常高的訪問量
- class 檔案、依賴 jar等;
- js、css、圖片等靜態資源;
- 對於使用者上傳檔案的場景,直接在伺服器上新建一個目錄,將上傳的檔案放置在目錄即可。
- 使用者通過瀏覽器直接與 Java 應用程式進行互動(通常是 Tomcat);
- Java 應用程式通過 JDBC 與本機的資料庫進行互動(如 MySQL);
- 如果存在檔案讀寫的需求,Java 應用程式通過檔案介面直接對檔案進行操作。
- 使用者不在直接與 Java 應用程式進行互動,而是與 Nginx 進行互動;
- Tomcat 掛在 Nginx 後,對動態請求進行處理;
- 對於靜態資源的訪問,通過 Nginx 直接訪問檔案系統;
- 當有檔案寫需求時,通過 Java 應用程式直接寫入磁碟。
- 通過不同的域名對動態請求和靜態請求進行分離;
- 新增靜態資源伺服器,專門處理靜態請求,並在伺服器上部署Java 應用程式,處理檔案寫需求;Nginx只負責檔案的讀操作;
- 對動態請求進行獨立部署,應用程式將檔案的寫請求轉發到靜態伺服器進行處理;
- 對 Nginx 進行獨立部署,形成Web 叢集;
- 對 Java 應用程式進行獨立部署,形成應用叢集;
- 對資料庫進行獨立部署;
- Web 叢集與應用叢集間通過HTTP協議進行互動;
- 應用叢集與資料庫間通過JDBC協議進行互動。
- Web 伺服器重啟 Session 丟失;
- 負載均衡需要進行應用層解析(第7層),效能損耗較大;
- 負載均衡器變為一個有狀態的點,不易容災;
- 造成網路開銷;
- 每臺 Web 伺服器都儲存所有的 Session,記憶體開銷大;
- 讀取Session引入了網路開銷;
- 儲存設施問題影響應用;
- 受到 Cookie 大小的限制;
- 存在安全性問題;
- 每次都攜帶巨大的 Cookie,頻寬消耗嚴重;
- 每次都進行 Session 資料恢復,加大應用伺服器的負擔;
- 對資料庫實施主從部署策略;
- 對於資料的寫請求,只能在主庫上進行;
- 對於資料的讀請求,可以在任意的從庫上進行;
- 主庫與從庫間,通過資料庫同步策略進行資料同步。
- 新增搜尋叢集,用以提升資料檢索效能;
- 新增快取叢集,用以提升熱點資料訪問效能。
- 通過不同的域名或 URL 將整個系統分解為多個子系統;
- 使用者通過瀏覽器將各子系統拼接成一個完整的系統;
- 各系統間存在少量互動,甚至沒有互動;
- 整理各個系統間通用業務功能,將其封裝為服務,以承載核心業務邏輯,構建成服務叢集;
- 原來的子系統或子頻道,變成薄薄的一層,不承載核心業務,只是根據業務流程對業務服務進行編排;
- 應用服務與業務服務間通過 HTTP 或 其他協議進行通訊,常見的包括 Dubbo、Thrift等。