1. 模式:每個模式描述了一個在咱們周圍不斷重複發生的問題及該問題解決方案的核心。這樣,你就能一次又一次地使用該方案而沒必要作重複工做。html
2. 網站架構模式:大型互聯網公司在實踐中提出了許多解決方案,以實現網站高性能、高可用、易伸縮、可擴展、安全等各類技術框架目標。這些解決方案又被更多網站重複使用,從而逐漸造成大型網站架構模式。前端
1. 將系統在橫向維度上切分紅幾個部分,每一個部分負責一部分相對比較單一的職責,而後經過上層對下層的依賴和調用組成一個完整的系統。數據庫
2. 實踐中,大的分層結構內部還能夠繼續分層。緩存
1. 便於分工合做開發和維護;安全
2. 各層獨立,只要維持調用接口不變,各層可根據具體問題獨立演化發展而無需其餘層必須相應調整;服務器
3. 物理部署上,三層結構可部署在同一物理機器上,隨着網站業務發展,必然要分離部署,其三層結構分別部署在不一樣服務器,使網站擁有更多計算資源應對更多用戶訪網絡
問。多線程
應用層架構 |
負責具體業務和視圖展現,如網站首頁及搜索輸入和結果展現併發 |
服務層 |
爲應用層提供服務支持,如用戶管理服務,購物車服務等 |
數據層 |
提供數據存儲訪問服務,如數據庫、緩存、文件、搜索引擎等 |
1. 從縱向方面對軟件進行切分,將不一樣功能和服務分割開來,包裝成高內聚低耦合的模塊單元。
2. 大型網站分割粒度可能會很小。
1. 有助於軟件開發和維護;
2. 便於不一樣模塊的分佈式部署,提供網站的併發處理能力和功能擴展能力。
1. 在應用層,按業務分割爲購物、論壇、搜索、廣告不一樣的應用,獨立團隊負責,部署在不一樣服務器;
2. 同一應用內部,若是規模龐大業務複雜,會繼續分割,好比購物業務分割爲機票酒店業務、3C業務、小商品業務等更細小的粒度。
分層和分割的一個主要目的是爲了切分後的模塊便於分佈式部署,即不一樣模塊部署在不一樣服務器上,經過遠程調用協同工做。
可以使用更多的計算機完成一樣的功能,計算機越多,CPU、內存、存儲資源也越多,處理併發訪問和數據量就越大。
1. 分佈式服務調用必須經過網絡,可能會影響性能;
2. 服務器越多,服務器宕機機率就越大;
3. 分佈式環境數據一致性很是困難,分佈式事務也難以保證;
4. 分佈式致使網站依賴錯綜複雜,開發管理維護困難。
1. 分佈式應用和服務:將分層和分割後的應用和服務模塊分佈式部署。
2. 分佈式靜態資源:網站的靜態資源如JS、CSS、Logo圖片等資源獨立分佈式部署,並採用獨立域名,即動靜分離。
3. 分佈式數據和存儲:大型網站需處理以P爲單位的海量數據,單臺計算機沒法提供如此大的存儲空間,此時需分佈式存儲。
4. 分佈式計算:嚴格來講,應用、服務、實時數據處理都是計算,網站除了要處理這些在線業務,還有很大一部分後臺業務,包括搜索引擎的索引構建、數據倉庫的數據分析統計等。
經過負載均衡技術爲一個應用構建一個多臺服務器組成的集羣,共同對外提供服務。
提升系統可用性。
將數據存放在距離計算最近的位置。
加快處理速度。
1. CDN。
2. 反向代理。
3. 本地緩存。
4. 分佈式緩存。
5. 以上4個都在前面章節已說明,再也不贅述。
1. 單一服務器內部可經過多線程共享內部隊列方式實現異步,業務操做前面的線程將輸出寫入隊列,後面的線程從隊列讀取數據處理。
2. 分佈式系統中,多個服務器集羣經過分佈式消息隊列實現異步。
1. 提升系統可用性:消費者服務器發生故障,數據會在消息隊列服務器存儲堆積,生產服務器能夠繼續處理業務請求,系統總體表現無端障。消費者服務器恢復正常後,繼續處理消息隊列中的數據。
2. 加快網站響應速度:業務處理前端的生產着服務器將數據寫入消息隊列,無需等待消費者服務器處理就能夠返回,響應延遲減小。
3. 消除併發訪問高峯:用戶訪問網站是隨機的,雖然存在高峯和低谷,但突發事件(促銷活動、微博熱點事件)會形成網站併發訪問忽然增大。使用消息隊列將忽然增長的訪問請求數據放入消息隊列,等待消費者服務器依次處理,減少網站負載壓力。
4. 解耦,提高擴展性。
5. 缺點:消費者服務器處理(如業務校驗、寫數據庫)失敗,以訂單提交爲例,可在成功提交後Email或短信通知用戶訂單成功,避免交易糾紛。
任何服務都必須部署至少兩臺服務器構成的一個集羣。
實現服務高可用。
1. 冷備份:按期備份,存檔保存。
2. 熱備份:主從分離,實時同步。
減小人爲干預,減小故障。
1. 自動化發佈。
a) 自動化代碼管理:代碼版本控制、代碼分支建立合併等過程自動化,開發工程師只要提交本身參與開發的產品代號,系統自動爲其建立開發分支,後期自動合併代碼。
借鑑:http://www.javashuo.com/article/p-bvcrdsrx-bz.html
b) 自動化測試:代碼開發完成,提交測試後,系統自動將代碼部署到測試環境,啓動自動化測試用例測試,向相關人員發送測試報告,向系統反饋測試結果。
c) 自動化安全檢測:安全檢測工具對代碼靜態安全掃描及部署到安全測試環境進行安全攻擊測試,評估安全性。
d) 自動化部署:將工程代碼自動部署到線上生產環境。
2. 自動化監控。
a) 自動化報警:對線上生產環境自動化監控,對服務器心跳檢測,及各項性能指標和應用程序的關鍵數據指標。若是發現異常、超出預設閥值,自動化向相關人員發送報警,警告故障可能發生。
b) 自動化失效轉移:檢測到故障發生後,系統自動化將失效服務器從集羣隔離,再也不處理請求。
c) 自動化失效恢復:待故障消除後,系統自動化從新啓動服務,同步數據保證數據一致性。
d) 自動化降級:網站遇到訪問高峯,超出網站最大處理能力時,爲保證整個網站安全可用,會自動化拒絕部分請求及關閉部分不重要服務將系統負載降至安全水平。
e) 自動化分配資源:將空閒資源分配給重要服務,擴大部署規模。
1. 經過密碼和手機驗證碼身份認證。
2. 登陸、交易等操做需網絡通訊加密,網站服務器上存儲的敏感數據也加密處理。
3. 使用驗證碼識別,防止機器人程序濫用網絡資源攻擊網站。
4. 對常見的用於攻擊網站的XSS攻擊、SQL注入進行編碼轉換等處理。
5. 對垃圾信息、敏感信息過濾。
6. 對交易轉帳等重要操做根據交易模式和交易信息進行風險控制。