架構設計基礎

只有爲用戶創造價值才能活下去!
業務驅動技術,業務成就了技術。
避免一味地追求技術、一味的模仿大公司、企圖用技術解決所有的問題。

大型網站架構演化之路:

1、初始階段的小網站:一臺服務器,服務器上部署了數據庫,web容器中放了應用程序app,以及文件也在這臺機器上。
應用一般也是分層開發的:MVC的模式,app是打成war包部署在tomcat等web容器中的。



2、應用服務器和數據服務分離:網站訪問量增加,一臺服務器扛不住了,將DB服務器分離出去,文件服務器也分離出去。

3、訪問量繼續增加,一個應用服務器又扛不住了,上應用服務器集羣,使用負載均衡。

4、數據庫受不了了,讀寫分離,部署兩臺數據庫服務。

5、兩臺數據還是不行,訪問有點慢,上緩存,本地緩存和分佈式遠程緩存。


6、爲了加快速度,繼續緩存,上CDN加速,反向代理加速。

7、數據庫分表分庫。加集羣

8、搜索引擎。

9、分割應用系統,業務拆分。

10、做服務化。




模式:解決同一類問題而出現的解決方案,可重複。反覆被實踐過。


網站架構模式:
分層:上層對下層依賴和調用,合理劃分邊界和接口,嚴禁跨層次調用。(MVC)
分割:縱向分割,業務拆分。
分佈式:在分層分割的前提下將應用分佈式部署。
集羣:無狀態,可重複,提高可用性。
緩存:加快速度。CDN、反向代理、本地緩存、分佈式遠程緩存
異步:加快響應速度,消息隊列。
冗餘:集羣,爲了高可用,防災備份。
自動化:運維,部署,測試,監控,失效轉移,資源分配
安全:sql注入,密碼,手機校驗碼,XSS攻擊。


架構的核心要素:
性能:響應速度
可用性:四個9
伸縮性:加機器擴展集羣
擴展性:添加新業務對原有業務不影響
安全性:……



性能:(就是爲了讓網站訪問更快,同時訪問的人更多)
不同人談性能:客戶,程序員,運維。
性能的指標:響應時間、併發數、吞吐量、硬件資源使用情況
性能測試:性能測試、負載測試、壓力測試、穩定性測試
性能優化:web前端優化(http請求數,瀏覽器緩存、壓縮、減少傳輸cookie、合理頁面佈局、CDN加速、反向代理加速),應用服務優化(緩存、異步處理、集羣、代碼優化(多線程、資源複用(數據庫連接、網絡通信連接、線程等,可使用單例或對象池))),存儲性能優化(使用SSD)



高可用:365×24h待命
可用性度量:幾個9?
可用性考覈:將故障分級對應分到不同人員身上。
可用性架構從軟件架構的基本分層模型(應用層、服務層、數據層)三方面來考慮:
應用層:負載均衡自動失效轉移,session管理(綁定、複製、cookie、統一存放)
服務層:無狀態、失效轉移、分級管理、隔離、超時設置、異步調用、服務降級、冪等性
數據層:數據備份、失效轉移,CAP原理
如何保證高可用性:發佈時逐步替換、自動化測試、預發佈驗證(預發環境)、代碼管理(Git)、自動化發佈(週四發佈)、灰度發佈(AB測試)
網站監控:數據採集,服務器性能監控,監控報警自動失效轉移、降級、恢復。


伸縮性:(加機器來擴展網站處理能力)
伸縮的兩步走:1、應用分層、分割到不同的物理機器來擴展;2、添加機器擴大集羣
集羣的伸縮考慮應用層和數據層:
應用層:負載均衡的分發策略:http請求重定向、DNS重定向、http請求轉發、修改IP地址、修改Mac地址
負載均衡算法:輪詢、加權輪詢、隨機、加權隨機、最小連接、IP綁定
分佈式緩存集羣的伸縮性設計:一致性hash算法,將所有的物理機虛擬化成多個節點均勻分佈在一個二叉樹環上,添加新節點時對原有節點的訪問壓力分攤了。
數據庫的伸縮:業務分庫、分表,分表需要數據訪問中間件。cobar



擴展性:要能方便的添加新功能而對原有業務不造成影響
架構層面的開閉原則(對擴展開放,對修改關閉)
設計擴展性的核心思想是模塊化,模塊間低耦合,可複用。
具體方案有分層分割,分佈式消息隊列,分佈式服務。
分佈式服務框架設計:參考李林峯的那本分佈式服務的書,代碼見MyCode。
可擴展的數據結構也是一個很好的方案:NoSQL(columnFamily列族設計,BigTable,稀疏式矩陣存儲)
建設開放平臺擴大生態圈,就是開放API,提供服務給第三方來做二次開發,


安全性
XSS:Cross Site Script 跨站腳本攻擊,防禦手段:對輸入字符進行消毒,如字符轉移<,&lt;
SQL注入:預編譯防禦。
CSRF:Cross Site Request Forgery,跨站點請求僞造。
祕鑰安全管理,加密技術
信息過濾與反垃圾:文本過濾,郵件分類,黑名單,風控


本文內容一切來源於《大型網站技術架構:核心原理與案例分析》(李智慧)
這個去年就看了的,現在又複習一下,綜合複習這四本架構相關的書:《大型網站技術架構:核心原理與案例分析》、《大型分佈式網站架構設計與實踐》、《大型網站系統與Java中間件實踐》、《分佈式服務框架原理與實踐》,還有微服務一直沒怎麼看。

感謝這些寫書的人給我們普及基礎知識,5星評價。
真的是開卷有益,不管讀的什麼書,都會接觸到這種我所不知的東西而擴展視野。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章