首先講一下架構:
分層:根據職責進行分層;分區;
切割-分布式:基於職責對於分層進行縱切進行分布式部署,比如家用空調和商用空調部署要分開來部署,比如兄弟項目組一個APP項目,訂單,商品,維護都是分開來進行部署,做到業務之間松耦合;
集群,服務器負載均衡集群,數據集群,熱備;
水平擴展整完了就是再回到垂直了,緩存,比如海爾的項目,因為和數據庫IO很高,性能嚴重影響,引入了memcache,極大地提升了性能,數據庫瓶頸減少了;
再就是回到了代碼涉及級別,異步處理,避免同步導致的資源占用;自動化測試部署,減少人為錯誤;
還有就是安全;
下圖是架構層級圖:
接下來講述的是架構師需要考慮的點:
性能提升從前端到后端一次是:
- 瀏覽器:css放在上面,javascript放在后面;采用瀏覽器緩存;
- 傳輸層上面:采用CDN,反向代理服務器壓縮傳輸;
- 業務服務器:采用緩存,分布式緩存;
- 數據庫層面:采用集群;比如mysql的讀寫分離,主服務器負責寫,從服務器負責讀;
然后是可用性,顧名思義:服務可用,即使有的時候體驗差一點,但是要提供服務:
- 首先就是負載均衡,一個壞了,另外一個接上,
- 這里有個失效轉移以及熱備的概念,一旦發生意外,熱備機器要頂上去;
- 分布式(分級)部署,對於有些服務,比如評價,在雙11的高峰期就可以關閉,在部署上面按照級別進行拆分部署,做到特殊情況服務間影響較小;
- 程序設計級別就是冪等設計,比如提交支付,點擊一次和點擊兩次效果是一樣的,這種設計也叫作防呆設計,比如對於上傳文件,點擊一次上傳后,按鈕就要置灰,防止其二次提交;
- 再后端是數據庫,對數據進行熱備份;
- 最后面就是監控了,及時發現問題並解決問題;
第三,伸縮性,設計讓應用能夠水平擴展:
- 服務器水平擴展,使用nginx,apache等反向代理;要考慮session的處理,是session統一緩存保存,還是通過讓代理服務器保證同IP轉接到同一台機器上面;
- 緩存擴展,比如memcache的一致性算法,還是緩存數據的復制,比如Redis集群;
- 數據庫的擴展,mysql集群,分區技術;
第四,擴展性,伸縮是硬件的水平擴展,擴展性講的是業務水平擴展,要保證對項目影響很小,比如業務分布式部署,通過webservice技術做通信等;阿里有一個服務器注冊以及發現的礦漿叫Dubbo;
第五,安全性,
- 操作上,需要輸入驗證碼;
- 通道上,https;
- 通信上,加密,對稱,非對稱加密;
- 權限控制;
- 對於Ddos攻擊,這些需要從代理服務器,防火牆等角度進行設計考慮;
