後端架構設計涉及不少方面,而且跟網站規模有很大關係,規模越大涉及技術越多,下面介紹一下超大型網站後端架構設計,以及包含哪些核心技術。java
分層是架構設計一種重要方式,經過分層來說問題很高隔離,後端架構能夠分爲三層,一層是接入層、服務層、存儲層。mysql
接入層經過LVS、HAProxy等技術將請求接入,將請求量轉發給後邊nginx+lua,在這一層經過lua擴展構建一些業務邏輯,性能很高。nginx
服務層包含http 服務,http服務通常實現組合邏輯,Tomcat是http服務所在容器,http服務通常實現好比填充sku 屬性、描述、圖片、說明、介紹等信息業務邏輯。redis
服務層RPC服務通常是更爲基層服務,好比提供個性化推薦BI服務,返回推薦sku列表或者文章素材列表。RPC服務實現服務橫向擴展,以及實現業務縱向拆分,可以使團隊按職能進行拆分。RPC服務目前用的比較多的是dubbo、spring cloud。spring
服務層包含Monitor監控服務,監控包含多個緯度。線上服務業務緯度,對線上服務性能好比tp99指標,對於可用率是否100%狀況進行監控,而且能夠設置報警閾值,當監控達到閾值進行相應報警。jvm監控,對jvm內存、cpu、線程數等狀況進行監控。docker監控,對docker內存、進程數、線程數、網絡、磁盤等進行監控。經過以上技術手段實現對線上服務可用率、性能、jvm、docker等資源使用狀況監控。可以預防線上服務問題,以及線上出現問題後可以快速定位問題,查找問題緣由從而解決問題。sql
服務層Zookeeper能夠實現註冊中心和配置管理下發等。Zookeeper做爲分佈式系統核心協做組件,在分佈式系統中起着很重要做用。在服務端開發中Zookeeper也起着核心做用,好比用做微服務註冊中心,管理微服務註冊信息。或者基於Zookeeper實現配置管理工具,方便對於線上服務配置管理以及配置下發,從而實現秒級降級以及秒級配置更新。Zookeeper還能夠用做分佈式鎖,協調多個微服務同步操做。好比微服務緩存更新,能夠經過Zookeeper協調,避免後端數據庫壓力過大致使數據庫服務過載或崩潰。docker
存儲層memcached、redis能夠用來做爲緩存服務提高訪問性能,在某些場景下redis也能夠做爲主要存儲,好比推薦系統,訪問量大,可是對於數據事務性要求不高,做爲惟一存儲時,須要注意緩存系統不穩定或性能問題,須要服務本地緩存通用數據以做爲兜底,避免緩存不可用致使服務不可用。數據庫
存儲層mysql、oracle做爲關係型數據存儲,使用場景是訂單、支付等事務強需求場景下,這種場景下分佈式nosql數據庫對事務支持自己是不夠好的,比不上傳統數據庫,這種場景下mysql、oracle是最優選擇。編程
存儲層hbase是一種基於列式存儲,方便基於列進行數據分析,分析單列不須要涉及全部列性能會快不少。但不適合基於行查出全部列,由於列存儲在不一樣位置,根據行取出全部列性能會比較差。後端
以及基於Rocksdb類分佈式KV存儲,存儲基於磁盤能夠進行持久化存儲,優勢存儲量大而且能進行持久化,缺點是基於磁盤以及數據結構等多種因素,隨機讀性能沒有redis那麼高。因此適合寫多讀少場景。能夠結合redis緩存,做爲redis後端的持久化存儲。
ES做爲全文檢索服務,適合於全文檢索服務,Mysql就不適合做爲全文檢索使用,由於一篇文章,每一個詞都有可能被檢索,所有構建索引索引會很是很是大。
java語言棧Spring是事實上Bean管理、以及託管總體配置工業標準。jdk是java基石,支持java運行以及龐大工具包,來支撐業務快速開發。jdk中容器、多線程、鎖、io、nio等。方便應用開發實現高性能網絡、磁盤等設備操做,方便應用使用多線程技術。
每一種技術都有它的適用場景,架構設計時要根據實際狀況去用,有不少trade off的事情,不要強行復用,要根據實際場景不管是編程語言,仍是存儲,仍是消息隊列技術等,都要根據實際場景去合理使用,才能發揮出技術最大價值。