一:網站架構模式
1.分層
分層是企業應用中最多見的一種架構模式,將系統在橫向維度上切分紅幾個部分,每一個部分負責一部分相對單一的職責,而後經過上下層的依賴和調用組成一個完整的系統。
分層在計算機世界裏無處不在,網絡的七層結構就是一種分層架構。計算機的硬件,操做系統,應用軟件也能夠當作一種分層。大型網站架構通常將系統分爲應用層,服務層,數據層(這和MVC有殊途同歸之意)
經過分層,咱們能夠將龐大的系統分割成不一樣的部分,便於分工合做開發與維護。並且各層之間具備必定的獨立性,只要維護調用接口不變,各層內部能夠獨立演化發展只要保證接口不變
2.分割
分割就是在系統縱向上進行切分,將同一層的服務進行縱向分割,包裝成高內聚低耦合的模塊單元。好比購物、論壇、搜索、廣告、賣家、賣家分割成不一樣的應用,交給不一樣的部門獨立開發
3.分佈式
對於大型網站,分割和分層的一個主要目的就是便於分佈式部署,及不一樣的模塊部署到不一樣的服務器上,經過遠程調用協同工做(這些服務器在同一機房內網時,速度會很快,網絡延遲率很低)。分佈式意味着使用更多的機器,CPU以及系統資源也就更多,相似於分而治之,將一項工做分給多我的共同完成。、
另外分佈式也存在的一些問題,服務器越多,服務宕機的機率也就越大,一臺服務器不可用可能致使整個系統不可用。另外分佈式環境中保證數據一致性也比較困難,分佈式事務也難以保證。分佈式還致使網站依賴錯綜複雜,開發維護難度大。
經常使用的分佈式,分佈式應用和服務:是將分層分割後的應用和服務模塊分佈式部署,改善網站性能。分佈式靜態資源:將網站的講臺資源如JS,CSS,LOGO圖片等資源獨立部署,採用獨立域名,即人們常說的動靜分離
4.集羣
使用分佈式雖然已經將模塊分開,然而對於用戶集中訪問的模塊(好比網站首頁)效果依然很差,因此還須要獨立部署服務器集羣,即多態服務器都不熟相同應用,經過負載均衡設備共同對外服務。
5.緩存
緩存是解決系統性能的首選方案,在在以前的《大型網站架構演化》中,咱們也有提到緩存的形式及特色,這裏不作過多累述,主要分爲如下幾種:本地緩存 ,分佈式緩存,CDN,反向代理
6.異步
異步消息隊列可用性搶,一臺宕機另外一臺能夠繼續工做(消息產生的服務器和消息處理的服務器)可用性好,另外一方面也大大減小了響應時間,消除了併發訪問高峯的問題,好比新浪微博就是一個很好的例子,大V用戶好比姚晨發了一條微博,咱們默認採用退的模式的時候,她發完微博咱們就要推2000萬次,不可能等待執行完了纔給姚晨返回,因此將任務扔到消息隊列中,先返回用戶體驗會更好
二:架構要素
網站的架構主要要涉及以下五個方面的問題: 性能、可用性、伸縮性、擴展性、安全性。通常狀況下性能室決定網站升級的觸發器
1.性能
在瀏覽器端,咱們能夠經過瀏覽器緩存,使用頁面壓縮,合理佈局頁面,減小cookie傳輸的手段改善性能
在前端服務器,還可使用CDN,反向代理,緩存熱點數據等方法
在應用服務器,可使用服務器本地緩存,分佈式緩存,集羣負載均衡等,還能夠經過異步,消息隊列等方面
在代碼層,可使用多線程,改善內存管理等手段
在數據庫端,索引,緩存,SQL優化,硬件優化,底層參數優化(參見《Mysql性能優化》)等方法,還可使用NoSQL等技術
2.可用性
可用性就如同網站可用的時間長度,可用性意味着當服務器宕機時服務依舊可用,對於應用服務器而言,多臺服務器經過負載軍和組成一個集羣,當一臺服務器宕機時,只需把請求引導其餘的服務器上就可實現高可用
3.伸縮性
當訪問增大時,服務器須要擴展,加入更多的服務器,這就是伸縮性。服務器的擴展性須要咱們選擇合適的負載均衡設備
4.擴展性
隨着網站的發展,業務很少增大,此時就要考驗到服務器的擴展性,新加功能是否容易。採用事件驅動,將消息的產生和處理分開,可有效提升服務器的擴展性
5.安全性
安全性天然沒必要多說,衡量網站安全性的標準就是針對現存和潛在的各類攻擊和竊取手段是否有可靠的應對策略
參見:大型網站技術架構--李智慧