日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

《大型技術架構》讀書筆記

 流曲頻陽 2017-02-13

《大型技術架構》讀書筆記

 ·  10 回帖  ·  647 瀏覽  ·  7 個月前  · 
       
       

前段時間讀了《大型技術架構》一書,現(xiàn)把書中的要點記錄下來。


  1. 網(wǎng)站架構模式:分層(單一職責,MVC分層,控制層-服務層-數(shù)據(jù)層),分割(不同功能與服務分割),分布式(服務調(diào)用需要通過網(wǎng)絡,帶來了網(wǎng)絡問題;分布式數(shù)據(jù)一致性問題),集群,緩存,異步,冗余(冷備份,熱備份),自動化,安全。

  2. 常用的分布式方案:分布式應用與服務;分布式靜態(tài)資源(動靜分離JS,CSS,圖片等,減輕應用服務器的負載壓力);分布式數(shù)據(jù)與存儲(讀寫分離;分庫分表;緩存優(yōu)化;傳統(tǒng)數(shù)據(jù)庫分布式部署;使用NoSQL);分布式計算。

  3. 緩存:CDN(內(nèi)容分發(fā),部署在離用戶最近的網(wǎng)絡服務商),反向代理(部署在網(wǎng)站的數(shù)據(jù)中心),本地緩存(緩存在本機內(nèi)存中,但是不適合大量的數(shù)據(jù)),分布式緩存(分布式緩存集群)。熱點數(shù)據(jù)緩存,注意緩存的時間,避免出現(xiàn)數(shù)據(jù)臟讀,影響數(shù)據(jù)一致性。

  4. 異步:單一服務器可以通過多線程共享內(nèi)存隊列的方式實現(xiàn);分布式系統(tǒng)中可以通過分布式消息隊列實現(xiàn)。典型的模型就是生產(chǎn)者-消費者模式,兩者之間不存在直接調(diào)用,只是保持數(shù)據(jù)結構不變。作用:提高網(wǎng)站可用性;加快網(wǎng)站響應速度;消除并發(fā)訪問高峰。

  5. 性能問題,網(wǎng)站響應速度慢,優(yōu)化措施:通過瀏覽器緩存,頁面壓縮等;使用CDN,動靜分離,部署反向代理服務器,緩存熱點文件;使用本地緩存與分布式緩存;使用消息隊列,異步處理請求;代碼層面使用多線程,內(nèi)存管理等進行優(yōu)化;數(shù)據(jù)庫方面使用索引,緩存,優(yōu)化SQL,讀寫分離等。

  6. 可用性:網(wǎng)站高可用的主要手段就是冗余,通過負載均衡服務器統(tǒng)一一個集群對外提供服務,有效的負載均衡策略;數(shù)據(jù)服務器進行實時備份,宕機時進行數(shù)據(jù)轉(zhuǎn)移并恢復。

  7. 網(wǎng)站可擴展性的主要手段是事件驅(qū)動架構和分布式服務。事件驅(qū)動通常將請求構造成消息發(fā)布到消息隊列之中,消息處理者通過消息隊列中獲取消息進行處理。分布式服務是將業(yè)務與基礎服務分離開來。

  8. 性能優(yōu)化策略:首先要進行性能數(shù)據(jù)的搜集,然后針對性能報告進行性能分析,檢查請求處理的各個環(huán)節(jié)的日志信息,分析是哪個環(huán)節(jié)響應時間較長,檢查監(jiān)控數(shù)據(jù),分析影響性能的是硬件設施(內(nèi)存,磁盤,CPU,網(wǎng)絡)還是代碼問題還是架構設計不合理,亦或是系統(tǒng)資源不足等。找到問題的原因后再針對不同的問題進行相應的優(yōu)化。

  9. 瀏覽器訪問優(yōu)化:減少http請求(合并CSS,JS文件,圖片等),http協(xié)議是無狀態(tài)的應用層協(xié)議,意味著每次http請求都需要建立通信鏈路,進行數(shù)據(jù)傳輸。使用瀏覽器緩存(設置http的頭字段)。啟用壓縮(對html,css,js文件進行GZIP壓縮)

  10. 網(wǎng)站優(yōu)化第一定律:優(yōu)先考慮使用緩存優(yōu)化性能。

  11. 緩存的基本原理:緩存指的是將數(shù)據(jù)存儲在相對較高訪問速度的存儲介質(zhì)中,減少數(shù)據(jù)訪問的時間。緩存的本質(zhì)是一個內(nèi)存Hash表,數(shù)據(jù)緩存以一對Key,Value的形式存儲在內(nèi)存Hash表中。Hash表數(shù)據(jù)讀寫的時間復雜度為O(1)。緩存中主要用來存放讀寫比較高,很少變化的數(shù)據(jù),應用程序先讀寫緩存,緩存中沒有或者數(shù)據(jù)失效再去數(shù)據(jù)庫中查詢,并將查詢到的數(shù)據(jù)寫入緩存。緩存要考慮數(shù)據(jù)一致性問題與臟讀??梢栽O置策略是數(shù)據(jù)更新后馬上更新緩存。緩存雪崩問題通過分布式緩存解決。

  12. 分布式緩存:緩存部署在多個服務器組成的集群上。兩種緩存架構方式:JBoss Cache為代表的需要更新同步的分布式緩存;以Memcached為代表的不互相通信的分布式緩存。

  13. JBoss Cache的分布式緩存在集群中的所有服務器上都保存相同的緩存數(shù)據(jù),當某臺服務器緩存更新時,會通知集群中所有的機器進行緩存更新或清除緩存。一般會將JBoss Cache與應用程序部署在同一服務器上。

  14. Memcached采用的是集中式的緩存管理,緩存與應用分離部署,緩存系統(tǒng)部署在專門的集群上,應用程序通過一致性hash等路由算法選擇緩存服務器遠程訪問緩存數(shù)據(jù),緩存服務器之間不通信。這樣緩存集群可以很簡單的實現(xiàn)擴容,具備良好的可伸縮性。采用的是TCP協(xié)議(UDP也支持)通信,序列化協(xié)議是通過基于文本的自定義協(xié)議。服務端和客戶端,采用memcached協(xié)議交互。

  15. ①負載均衡+session復制,將session同步至每個應用服務器,保證服務的狀態(tài)。②session綁定,利用負載均衡的源地址hash算法實現(xiàn)將來源于同一IP的請求始終分發(fā)到同一臺應用服務器上。③利用瀏覽器的cookie記錄下session以及sessionID,將session以及sessionID發(fā)送給負載均衡器,負載均衡服務器根據(jù)sessionID將請求轉(zhuǎn)發(fā)至相應的應用服務器。④設置專門的session服務器統(tǒng)一管理session,應用程序每次讀寫session都通過session服務器。

  16. 負載均衡算法:輪詢:請求依次分發(fā)到每臺應用服務器上;加權輪詢:根據(jù)應用服務器的性能進行加權重新分配;隨機;最少連接:記錄每個應用服務器正在處理的請求連接數(shù),將新的請求分配到連接數(shù)最少的服務器上;源地址散列。

  17. 網(wǎng)絡IO的實現(xiàn):BIO;NIO;AIO。

  18. BIO采用阻塞的方式實現(xiàn),也就是說一個Socket套接字需要使用一個線程來處理。支持并發(fā)的連接,需要更多的線程來完成這個工作。

  19. NIO基于事件驅(qū)動思想,采用的是Reactor模式??梢栽谝粋€線程中處理多個套接字Socket相關的工作。Reactor會管理所有的handler,并把出現(xiàn)的事件交給相應的handler去處理。

  20. AIO就是異步IO。采用Proactor模式,AIO與NIO的區(qū)別:AIO在讀寫操作時,只需要調(diào)用相應的read/write方法,并且需要傳入CompletionHandler;在完成動作后會調(diào)用CompletionHandler。而NIO的通知是發(fā)生在動作之前,是在可寫可讀的時候,selector發(fā)現(xiàn)這些事件后調(diào)用handler處理。

  21. 控制器的變化:使用硬件負載均衡——》使用軟件負載均衡(LVS)(透明代理,請求發(fā)送發(fā)和處理方都不需要知道對方,但是存在不足:增加網(wǎng)絡的開銷,比如流量和延時;代理出現(xiàn)問題則所有請求都會受到影響)——》采用名稱服務直連方式請求調(diào)用(名稱服務器是通過跟請求處理的機器交互來獲取這些機器的地址)——》采用規(guī)則服務器控制路由的請求直連調(diào)用(規(guī)則服務器本身并不和請求處理的機器進行交互,只負責把規(guī)則提供給請求發(fā)起的機器)——》master+worker的方式(存在一個master來管理worker)

  22. 運算器的變化:DNS調(diào)度——》DNS+負載均衡調(diào)度(DNS返回的永遠都是負載均衡設備的地址)

  23. 存儲器的變化:單機的Key-Value服務——》使用代理服務器的多機Key-Value服務——》使用名稱服務的Key-Value服務——》使用規(guī)則服務器的Key-Value服務——》通過Master的Key-Value服務

  24. 分布式系統(tǒng)的難點:①缺乏全局時鐘;②面對故障獨立性;③處理單點故障;④事務的挑戰(zhàn)

  25. 數(shù)據(jù)庫讀寫分離:兩個問題:數(shù)據(jù)復制問題(使用數(shù)據(jù)庫本身提供的數(shù)據(jù)復制機制,但還是存在復制延時的數(shù)據(jù)不一致性問題);應用對于數(shù)據(jù)源的選擇問題(寫操作要走主庫,事務中的讀操作也要走主庫)

  26. 搜索引擎技術解決大型網(wǎng)站站內(nèi)搜索時的某些場景下的讀的問題,提供了更好的查詢效率,站內(nèi)搜索結構和使用讀庫非常相似,只是多了自己建立數(shù)據(jù)索引的步驟。

  27. 緩存:數(shù)據(jù)緩存(全數(shù)據(jù)緩存(數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化后會把數(shù)據(jù)寫入到緩存中,保證數(shù)據(jù)不會讀取失效);熱數(shù)據(jù)緩存(應用訪問緩存,如果數(shù)據(jù)不存在則去數(shù)據(jù)庫里讀取并把數(shù)據(jù)加入到緩存中));頁面緩存(ESI規(guī)范)

  28. 緩存的一個關鍵指標緩存命中率,如果緩存命中率比較低的話就意味著有不少請求要回到數(shù)據(jù)庫中查詢。還要考慮緩存服務器的擴容與縮容(一致性hash)以及緩存數(shù)據(jù)更新(定時失效,數(shù)據(jù)變更時失效,數(shù)據(jù)變更時更新)。

  29. 數(shù)據(jù)庫拆分:專庫專用,數(shù)據(jù)垂直拆分(不同業(yè)務數(shù)據(jù)拆分到不同的數(shù)據(jù)庫中);數(shù)據(jù)的水平拆分(把同一個表的數(shù)據(jù)拆分到不同的數(shù)據(jù)庫中)。

  30. 服務化:把應用分為三層,處于最上端的是Web系統(tǒng),用于完成不同的業(yè)務功能;處于中間的是一些服務中心,不同的服務中心提供不同的業(yè)務服務,處于下層的則是業(yè)務的數(shù)據(jù)庫同時引入了遠程調(diào)用,共享代碼不再散落在各個應用中而是放到了各個服務中心上。數(shù)據(jù)交互工作由業(yè)務服務中心完成。

  31. 遠程過程調(diào)用和對象訪問中間件(主要解決分布式環(huán)境下應用互相訪問的問題);消息中間件(解決應用之間的消息傳遞,解耦以及異步問題);數(shù)據(jù)訪問中間件(主要解決應用訪問數(shù)據(jù)庫的共性問題)

  32. 靜態(tài)代理與動態(tài)代理?靜態(tài)代理為每一個被代理的對象構造對應的代理類。動態(tài)代理是動態(tài)地生成具體委托類的代理實現(xiàn)對象,通過Proxy.newProxyInstance來創(chuàng)建代理方法可以為不同的委托類都創(chuàng)建代理類。方法調(diào)用使用invoke。

  33. 服務化使得原來的一些本地調(diào)用變?yōu)榱诉h程調(diào)用。遠程調(diào)用:獲取可用服務地址列表->確定要調(diào)用服務的目標機器->建立連接->請求序列化->發(fā)送請求->接受結果->解析結果

1     6     0     10     0     回帖

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多