日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《大型分布式网站架构设计与实践》

發布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《大型分布式网站架构设计与实践》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、面向服務的體系架構SOA

1、RPC:遠程過程調用

2、OutputStream中直接寫入一個int類型,會截取其低8位,丟棄其高24位

3、HTTP請求與響應過程:

1)瀏覽器根據所使用的http協議,解析出url對應的域名

2)通過DNS域名解析,查詢出該域名對應的IP地址

3)通過url解析出對應的端口號

4)瀏覽器發起并建立到目的ip和端口的連接

5)瀏覽器向服務器發送請求

6)服務器響應瀏覽器的請求,瀏覽器讀取響應,渲染網頁

7)瀏覽器關閉與服務器的連接

4、

1)RPC風格:直接在HTTP請求的參數中標明需要遠程調用的服務接口名稱、服務需要的參數

2)RESTful風格:符合REST原則的設計

注:a、REST架構原則:表現層狀態轉換;b、HTTP協議是一種無狀態協議。

5、服務配置中心:一個能夠動態注冊和獲取服務信息的地方,來統一管理服務名稱和其對應的服務器列表信息

6、常見的負載均衡算法包括:輪詢法、隨機法、源地址哈希法、加權輪詢法、加權隨機法、最小連接法等

1)輪詢法:將請求按順序輪流地分配到后端服務器上

???????? 注:a、服務消費者的實現端需要考慮服務器新增、下線、宕機的情況

???????? b、輪詢策略使用悲觀鎖synchronized,性能代價大,并發吞吐量下降

2)隨機法:通過系統隨機函數,根據后端服務器列表的大小值來隨機選取其中一臺進行訪問

3)源地址哈希法:獲取客戶端訪問的IP地址值,通過哈希函數計算得到一個數值,用該數值對服務器列表的大小進行取模運算,得到的結果便是要訪問的服務器的序號

4)加權輪詢法:將請求順序且按照權重分配到后端

5)加權隨機法:按照權重來隨機選取服務器

6)最小連接數法:根據后端服務器當前的連接情況,動態地選取其中當前積壓連接數最少的一臺服務器來處理當前請求。

7、Groovy腳本語言能夠直接編譯成java的class字節碼,運行在java虛擬機上,且能夠很好的跟java進行交互

8、ZooKeeper:是Hadoop下的一個子項目,是一個針對大型分布式系統的可靠的協調系統,提供的功能包括配置維護、名字服務、分布式同步、組服務等,可以集群復制。通過Zab協議來保持數據的一致性。包括:leader election階段和Atomic broadcas階段。

1)leader election階段:集群中將選舉出一個leader,其他的機器則稱為follower,所有的寫操作都被傳送給leader,并通過broadcas將所有的更新告訴follower。當leader崩潰或者leader失去大多數的follower時,需要重新選舉出一個新的leader,讓所有的服務器都恢復到一個正確的狀態。

2)Atomic broadcas階段:同步leader和follow之間的信息,保證leader和follower具有相同的系統狀態。

注:ZooKeeper的核心其實類似一個精簡的文件系統

9、ZooKeeper API:1)創建節點;2)刪除節點;3)設置和獲取節點內容;4)添加子節點;5)判斷節點是否存在;6)watcher的實現

注:常見兩種異常:a、ConnectionLossException:客戶端與其中的一臺服務器socket連接出現異常、連接丟失;b、SessionExpiredException:客戶端的session已經超過sessionTimeout,未進行任何操作

10、第三方客戶端工具包zkClient:將znode的事件重新定義為子節點的變化、數據的變化、連接及狀態的變化三類。

GitHub源碼:https://github.com/sgroschupf/zkclient.git

11、對于單點故障問題,采用雙機高可用的部署方案,能部分解決問題,但負載均衡設備的昂貴成本,導致難以全面推廣。

二、分布式系統基礎設施

1、分布式系統的基礎設施:1)分布式協作及配置管理系統;2)分布式緩存系統;3)持久化存儲;4)分布式消息系統;5)搜索引擎;6)CDN系統;7)負載均衡系統;8)運維自動化系統;9)實時計算系統;10)離線計算系統;11)分布式文件系統;12)日志收集系統;13)監控系統;14)數據倉庫

2、memcache是一款開源的高性能的分布式內存對象緩存系統,使用key-value形式存儲和訪問數據,在內存中維護一張巨大的HashTable,將高層抽象的對象轉化成二進制數據存儲。

1)其通過構建在TCP協議之上的memcache協議來進行通信

2)支持文本行和非結構化數據

注:非結構化數據采用字節流的形式在客戶端和服務端之間進行傳輸和存儲

3)API:a、set;b、add;c、replace;d、append;e、prepend;f、cas:提供對變量的原子操作;g、get;h、incr:對計數器進行增量操作;i:decr:對計數器進行減量操作;j:delete

4)memcache本身并不是一種分布式的緩存系統,它的分布式是由訪問它的客戶端來實現的。

5)consistent Hash:將Hash函數的值域空間組織成一個圓環,整個空間按照順時針方向進行組織,然后對相應的服務器節點進行Hash,將它們映射到Hash環上,即將該key映射在該位置的下一個節點服務器。

注:節點的分布可能不均勻,為了避免這種情況,引入虛擬節點機制,對每一個服務器節點都計算多個Hash值,即多了一步從虛擬節點再映射到真實節點的過程。

3、解決分布式session的方法

1)通過將一部分數據存儲在cookie中,來規避分布式環境下session的操作

2)將session統一存儲在緩存集群上

4、IOE解決方案:IBM、oracle、EMC高端存儲

5、一種分庫分表的路由策略:

1)中間變量=user_id%(庫數量*每個庫的表數量)

2)庫=取整(中間變量/每個庫的表數量)

3)表=取余(中間變量%每個庫的表數量)

注:要考慮分布式事務問題

6、HBase是ApacheHadoop項目下的一個子項目,設計實現了高可靠性、高可擴展性、實時讀/寫的列存儲數據庫。其本質上是一張稀疏的大表,用來存儲粗粒度的結構化數據,并且能夠通過簡單的增加節點來實現系統的線性擴展。

1)HBase運行在分布式文件系統HDFS之上

2)HBase的數據以表的形式進行組織,每個表由行列組成;每個列屬于一個特定的列族,通過行和列來確定一個存儲單元,而每個存儲單元又可以有多個版本,通過時間戳來標識。

3)HBase集群包含兩種角色:HMaster和HRegionServer。一個HRegionServer可以管理多個Region,并由HMaster來負責HRegionServer的調度及集群狀態的監管

注:當表隨著記錄條數的增加而不斷變大后,將會分裂成一個個Region,每個Region可以由(startkey,endkey)來表示

4)HBase shell 命令:

a、status:查看HBase集群狀態

b、create ‘表名’、’列族名稱1’、’列族名稱2’…:創建一個表,并制定列族的名稱

c、list:列出已有的表,并查看表的描述

d、alter ‘表名’ ,NAME=>’列族名稱’:給表新增一個列族

e、alert ‘表名’,NAME=>’列族名稱’, METHOD=>’delete’:刪除表的一個列族

f、disable? ‘表名’?? drop ’表名’ :刪除一個表

注:在使用drop刪除一個表之前,必須先將該表disable

g、put ‘表名’,‘rowkey’, ‘列族名稱:列名稱’, ‘值’:給表添加記錄

h、get ‘表名稱’,‘rowkey’:根據rowkey查看數據

i:get ‘表名稱’, ‘rowkey’,‘列族名稱:列名稱’:根據rowkey查看對應列的數據

j:count ‘表名稱’:查看表中的記錄總數

k:scan ‘表名’ :查看表中所有記錄

l:scan ‘表名’, {COLUMNS=> ‘列族’} :查看表中指定列族的所有記錄

m:scan ‘表名’, {COLUMNS=> ‘列族’, LIMIT => 記錄數, STARTROW => ‘開始rowkey’, STOPROW => ’結束rowkey’}

n:delete ‘表名’, ‘rowkey’,‘列族名稱’:根據rowkey刪除列數據

o:deleteall ‘表名’ ,‘rowkey’:根據rowkey刪除一行數據

5)訪問HBase三種方式:

a、通過指定rowkey進行訪問

b、指定rowkey的range進行scan

c、全表掃描

注:HBase的行是按照rowkey來排序的

7、緩存操作,可通過批量操作,避免多次請求帶來的網絡開銷,提高性能

1)lpush和rpush分別在list的首部和尾部添加元素

2)lpop和rpop分別在list的首部和尾部刪除元素

3)lrange,獲取list指定區間的元素

8、消息的異步接收降低了系統集成的耦合度,提升了分布式系統協作的效率,使得系統能夠更快地響應用戶,提供更高的吞吐。作為緩沖,削峰填谷,緩解集群的壓力,避免整個系統被壓垮。

9、JMS(Java MessageService)java消息服務:支持兩種消息發送和接收模型

1)P2P:點對點,基于隊列(queue)

2)Pub/Sub:發布/訂閱模型,基于主題(topic)

注:訂閱模式設置為持久訂閱:斷開à保存à連接à重發

10、消息集群Master-Slave模式:包括基于共享文件系統的Master-Slave架構和基于共享數據庫的Master-Slave架構。

???????? Master啟動時,獲得排他鎖,其他Slave則stand-by,不對外提供服務,同時等待獲取排他鎖。Master連接中斷或異常,排他鎖會立即釋放,另一個Slave能夠爭奪到Master的排他鎖,成為Master對外提供服務。

注:1)真正提供服務的只有一臺,其它節點只為保障高可用

2)對于ActiveMQ來說,可以采用broker拆分的方式,將不相關的queue和topic拆分到多個broker,來達到提升系統吞吐能力的目的

11、垂直化的搜索引擎主要針對企業內部的自有數據的檢索;搜索引擎平臺,采用網絡爬蟲對全網數據進行抓取,從而建立索引并提供給用戶進行檢索

12、Lucene相關概念

1)倒排索引:也稱反向索引,將文檔中的詞作為關鍵字,建立詞與文檔的映射關系,通過倒排索引的檢索,可以根據詞快速獲取包含這個詞的文檔列表

2)分詞:又稱切詞,將句子或者段落進行切割,從中提取包含固定語義的詞

3)停止詞:需要被忽略掉

4)排序:需要將相關度更大的內容排在前面

5)文檔:是一系列域的組合,相當于表

6)域:相當于列

7)詞:搜索的基本單元

8)查詢

9)分詞器:提取關鍵的語義單元,常見有一元分詞、二元分詞、詞庫分詞等

13、Lucene的使用:

1)對某個Field進行關鍵字查詢

2)根據某個范圍對Field的值進行區間查詢

3)通過通配符來對Field進行查詢

注:a、通配符:?表示0個或一個字母;*表示0個或多個字母

b、兩個Field之間所允許的最大距離稱為slop

4)結果排序:按照指定的Field

5)高亮:對匹配的內容進行突出展現

6)中文分詞工具:Lucene自帶的中日韓文分詞器CJKAnalyzer,IK分詞,MM分詞,庖丁分詞,imdict分詞器

7)索引優化:Lucene的索引是由段組成的,每個段可能又包含多個索引文件,即每個段包含了一個或者多個Document。當索引段的數量達到設置上限時,Lucene會自動進行索引段的優化,將索引段合并成為一個,以提高查詢的性能

14、Solr:是一個基于Lucene的搜索引擎工具,提供了一系列功能強大的HTTP操作接口,支持通過Data Schema來定義字段、類型和設置文本分析,使得用戶可以通過HTTP POST請求,向服務器提交Document,生成索引,以及進行索引的更新和刪除操作。對于復雜的查詢條件,Solr提供了一整套表達式查詢語言

三、互聯網安全架構

1、常見的Web攻擊手段:xss攻擊、CRSF攻擊、SQL注入攻擊、文件上傳攻擊、DDoS攻擊等。

?

2、XSS攻擊:跨站腳本攻擊

1)定義:指的是攻擊者在網頁中嵌入惡意腳本程序,當用戶打開該網頁時,腳本程序便開始在客戶端的瀏覽器上執行,以盜取客戶端cookie、用戶名密碼,下載執行病毒木馬程序,甚至是獲取客戶端admin權限等。

???????? 2)原理:用戶輸入的數據變成了代碼

???????? 3)措施:需要對用戶輸入的數據進行HTML轉義處理,將其中的“尖括號”、“單引號”、“引號”之類的特殊字符串進行轉義編碼

?

3、CRSF攻擊:跨站請求偽造

???????? 1)原理:用戶訪問A站點后未登出,訪問攻擊站點B,B站點要求使用用戶在A的cookie訪問A站點

???????? 2)措施:a、將cookie設置為HttpOnly,這樣通過程序就無法讀取到cookie信息,避免了攻擊者偽造cookie的情況出現

???????? b、增加token:在請求中放入攻擊者所不能偽造的信息,并且該信息不存在于cookie之中

???????? c、通過Referer識別:在HTTP頭中有一個字段叫Referer,它記錄了該HTTP請求的源地址

?

4、SQL注入攻擊:通過把SQL命令偽裝成正常的HTTP請求參數,傳遞到服務端,欺騙服務器最終執行惡意的SQL命令,達到入侵目的。措施:

???????? 1)使用預編譯語句:即變量使用占位符替代

???????? 2)使用ORM框架:對一些關鍵字符進行轉義

3)避免密碼明文存放:對存儲的密碼進行單向hash,如md5

注:a、哈希加鹽法:在生成hash時給予一個擾動,使hash值與標準的hash結果不同,這樣就可以對抗彩虹表了

b、拖庫:從數據庫中導出數據

4)處理好相應的異常

?

5、文件上傳攻擊:利用一些站點沒有對文件的類型做很好的校驗,上傳了可執行的文件或者腳本,并且通過腳本獲得服務器上相應的權利,或者是通過誘導外部用戶訪問下載上傳的病毒或木馬文件,達到攻擊的目的

???????? 1)魔數:根據文件起始的幾個字節內容可以確定文件類型

???????? 2)imagemagick:是一套功能強大、穩定并且開源的針對圖片處理的開發工具包,能夠處理多種格式的圖片文件,可以利用imagemagick來對圖片進行縮放處理

?

6、DDoS攻擊:分布式拒絕服務攻擊,是目前最為強大、最難以防御的攻擊方式之一,一般采用一對一的方式。

???????? 1)原理:攻擊者借助公共網絡,將數量龐大的計算機設備聯合起來作為攻擊平臺,對一個或多個目標發動攻擊,從而達到癱瘓目標主機的目的。

???????? 注:通常在攻擊開始前,攻擊者會提前控制大量的用戶計算機,稱之為“肉雞”,并通過指令使大量的肉雞在同一時刻對某個主機進行訪問,從而達到癱瘓目標主機的目的。

???????? 2)常見的攻擊手段

???????? a、SYN Flood:利用TCP協議三次握手的過程來達成攻擊的目的。攻擊者偽造大量的IP地址給服務器發送SYN報文,由于偽造的IP幾乎不可能存在,也就不可能從客戶端得到任何回應,服務端維護一個非常大的半連接等待列表,并且不斷對這個列表中的IP地址進行遍歷和重試,占用了大量的系統資源

???????? b、DNS QueryFlood:UDP Flood攻擊的一種變形,向被攻擊的服務器發送海量的域名解析請求,并且通過偽造端口和客戶端IP,防止查詢請求被ACL(訪問控制列表)過濾

???????? c、CC攻擊:基于應用層HTTP協議發起的DDos攻擊,也被稱為HTTPFlood。攻擊者通過控制大量的“肉雞”或者從互聯網上搜尋的大量匿名的HTTP代理,模擬正常用戶給網站發起請求直到該網站拒絕服務為止。

???????? 注:其他攻擊手段還有:DNS域名劫持、CDN回源攻擊、服務器權限提升等

7、常用的安全算法有:摘要算法、對稱加密算法、非對稱加密算法、信息編碼等

8、數字摘要:也稱消息摘要,是一個唯一對應一個消息或文本的固定長度的值,由一個單向Hash函數對消息進行計算而產生

1)消息摘要的特點:

???????? a、無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的

???????? b、輸入不同,消息摘要一般也不同;輸入相同,則輸出必相同

???????? c、單向性

???????? 2)常見算法:

???????? a、MD5:信息摘要算法5,用于確保信息傳輸完整性和一致性,摘要長度為128位

???????? b、SHA:安全散列算法:SHA-1是基于MD4算法的,公認的最安全的散列算法之一,摘要信息的長度為160位

???????? c、十六進制編碼

???????? d、Base64編碼:一種基于64個可打印字符來表示二進制數據的方法,每6位為一個單元。

???????? 注:Base64算法僅僅只是一種編碼算法而已,不是加密算法。

???????? e、彩虹表破解Hash算法:彩虹表就是一張采用各種Hash算法生成的明文和密文的對照表,在彩虹表中,表內的每一條記錄都是一串明文對應一種Hash算法生成的一串密文。通過對彩虹表進行查找、比較、運算,能夠迅速得出此加密字符串對應的明文。

9、對稱加密算法

???????? 1)特點:算法公開、計算量小、加密速度快、加密效率高、秘鑰私有、使用算法的逆算法

???????? 2)常見算法:

???????? a、DES:明文按64位進行分組,秘鑰長64位,事實上只有56位參與DES運算,8的倍數位是校驗位,分組后的明文和56位的秘鑰按位替代或交換的方法形成密文

???????? b、3DES算法:使用3條64位的密鑰對數據進行3次加密,是DES的一個更安全的變形

???????? c、AES:高級加密標準,有三個秘鑰長度(128、192、256位)

10、非對稱加密算法:公開秘鑰加密算法,公鑰對數據進行加密,只有私鑰才能進行解密;私鑰對數據進行加密,只有公鑰才能進行解密

???????? 1)過程:甲方生成一對秘鑰并將其中的一把作為公鑰向其他人公開,得到該公鑰的乙方使用該秘鑰對機密信息進行加密后再發送給甲方,甲方在使用自己保存的另一把專用秘鑰(即私鑰)對加密后的信息進行解密

???????? 2)RSA算法:基于“將兩個大素數相乘十分容易,但反過來想要對其乘積進行因式分解卻極其困難,因此可以將乘積作為公鑰”。其keysize位數越高,其產生秘鑰對及加密、解密的速度越慢

11、數字簽名:

???????? 1)原理:a、數字簽名的生成:通信正文à摘要算法à摘要à發送者私鑰à數字簽名

???????? b、數字簽名的校驗:通信正文通過摘要算法獲得摘要1,數字簽名通過發送者公鑰解密得到摘要2,若摘要1和摘要2相同則表示內容沒有被篡改過

???????? 2)常見的數字簽名算法

???????? a、MD5withRSA:采用MD5算法生成需要發送正文的數字摘要,并使用RSA算法來對正文進行加密和解密

???????? b、SHA1withRSA:采用SHA-1算法生成正文的數字摘要,并且使用RSA算法來對摘要進行加密和解密

12、數字證書:也稱電子證書,用于標識網絡中的用戶身份

1)數字證書包含內容:a、對象的名稱(人、服務器、組織);b、證書的過期時間;c、證書的頒發機構(誰為證書擔保);d、證書頒發機構對證書信息的數字簽名;e、簽名算法;f、對象的公鑰

2)X.509:大多數的數字證書都以一種標準的格式(X.509)來存儲它們的信息

3)證書簽發:由數字證書認證機構CA來進行頒發

4)證書校驗:用簽發該證書的證書來驗證,形成一條證書鏈,終結于根證書。

注:下載安裝根證書就表明對該根證書及其所簽發的證書都表示信任

5)證書的使用:Java提供了完善證書管理工具keytool

注:使用OpenSSL生成的數字證書和私鑰,如需在Java環境下使用,需要先將其轉換成PKCS#12編碼格式的秘鑰庫,才能夠使用keytool工具進行相應的管理

13、摘要認證的實現:1)客戶端參數摘要生成;2)服務端參數摘要校驗;3)服務端響應摘要生成;4)客戶端響應摘要校驗

注:使用HTTPS有性能上的成本,而且需要額外申請CA證書

14、簽名認證的實現:1)客戶端參數簽名生成;2)服務端參數簽名校驗;3)服務端響應簽名生成;4)客戶端響應簽名校驗

15、HTTPS協議:基于SSL的HTTP協議,它能夠確保整個通信過程都是經過加密的,秘鑰隨機產生,并且能夠通過數字證書驗證通信雙方的身份,以此來保障信息安全。

注:1)通信的內容使用對稱加密方式進行加密

2)HTTPS協議在HTTP協議與TCP協議增加了一層安全層,所有請求和響應數據在經過網絡傳輸之前,都會先進行加密,然后在進行傳輸

3)HTTPS既支持單向認證,也支持雙向認證。單向認證只校驗服務端證書的有效性,雙向認證既校驗服務端證書也校驗客戶端證書的有效性

16、SSL全稱安全套接層,保障網絡通信的安全,校驗通信雙方的身份,加密傳輸數據,與應用層協議獨立無關。

1)SSL的繼任者是TLS,全稱傳輸層安全協議,同樣位于應用層與傳輸層之間

2)SSL/TLS可分為兩層,一層為RecordProtocol(記錄協議),另一層為Handshake Protocol(握手協議)。記錄協議建立在可靠的傳輸協議(如TCP)之上,提供數據封裝、加密解密、數據壓縮、數據校驗等基本功能。握手協議建立在記錄協議之上,在實際的數據傳輸開始前,進行加密算法的協商,通信秘鑰的交換,通信雙方身份的認證等工作

17、JSSE是Sun公司為了解決互聯網信息安全傳輸提出的一個解決方案,它實現了SSL和TSL協議,包含了數據加密、服務器驗證、消息完整性和客戶端驗證等技術

18、OAuth協議旨在為用戶資源的授權訪問提供一個安全、開放的標準。平臺商通過OAuth協議,提示用戶對第三方軟件廠商(ISV)進行授權,使得第三方軟件廠商能夠使用平臺商的部分數據,對用戶提供服務

注:一次OAuth授權涵蓋了三個角色:普通用戶、第三方應用、平臺商

四、系統穩定性

1、日志分析常用命令

1)cat:查看文件的內容

2)more:分頁顯示文件

3)tail:顯示文件尾

4)head:顯示文件頭

5)sort:內容排序,默認是按字符排列的,-n 指定按數字順序排序,-r 指定逆序排列,-k 指定排序的列

6)wc:用來統計指定文件中的字符數、字數、行數,并輸出統計結果

7)uniq:用來顯示文件中行重復的次數,或者顯示僅出現一次的行,以及僅僅顯示重復出現的行,uniq的去重針對的知識連續的兩行

8)grep:字符串查找

9)find:文件查找

注:whereis命令,能夠方便地定位到文件系統中可執行文件的位置

10)expr:能夠對運算表達式或者字符串進行運算求值

11)tar:生成歸檔文件或將歸檔文件展開

12)curl:在命令行下通過HTTP協議訪問網頁文檔

2、sed編輯器:也稱流編輯器,在編輯數據之前,預先指定數據的編輯規則,然后按照規則將數據輸出到標準輸出

3、awk程序:提供一種編程語言而不僅僅是一組文本編輯的命令,再編程語言的內部,可以定義保存數據的變量,使用算術和字符串操作函數對數據進行運算,支持結構化編程概念,能夠使用if和循環語句等

awk [option] ‘pattern {action}’ file

其中:option為命令的選項,pattern為行匹配規則,action為執行的具體操作,file為輸入的文件

注:如果沒有pattern,則對所有執行action;如果沒有action,則打印所有匹配的行

4、監控指標

1)load:特定時間間隔內運行隊列中的平均線程數,可通過top和uptime來查看

注:每個CPU的核都維護了一個運行隊列

2)CPU利用率:top |grep Cpu

用戶時間us、系統時間sy(內核態所花費的時間)、Nice時間ni(調整進程優先級的時候所花費的時間)、空閑時間id、等待時間wa、硬件中斷處理時間hi、軟件中斷處理時間si、丟失時間st(被強制等待虛擬CPU的時間)

3)磁盤剩余空間 df –h 或 df –l

4)網絡traffic :sar –n DEV 11

5)磁盤I/O:iostat –d –k

6)內存使用:free –m 注:Linux的內存包括物理內存Mem和虛擬內存swap

7)qps:每秒查詢數

8)rt:請求的響應時間

9)select/ps:每秒處理的select語句的數量

10)update/ps、delete/ps

11)GC

5、心跳檢測

1)ping

2)應用層檢測

3)業務檢測:a、通過頁面的大小來判斷頁面是否出現了異常;b、檢測頁面的返回值;c、可在response的header中約定一個值,來標識返回的結果是否正常

6、流量控制,對于超載的流量:1)將這部分流量丟棄;2)通過單擊內存隊列來進行有限的等待;3)通過分布式消息隊列來將用戶的請求異步化

7、服務穩定性:

1)依賴管理

2)優雅降級:暫時不可用,后期恢復

3)服務分級:非常時期,只為優先級高的消費者提供服務

4)開關

5)應急預案

8、高并發系統設計

1)操作原子性

2)多線程同步:指的是線程之間執行的順序,多個線程并發地訪問和操作同一數據,并且執行的結果與訪問或者操作的次序有關

注:公平鎖指的是多個線程在等待同一個鎖時,必須按照申請鎖的先后順序來依次獲得鎖

3)數據一致性

a、強一致性:無論數據的更新操作是在哪個副本上執行,之后所有的讀操作都要能夠獲取到更新的最新數據

b、弱一致性:系統的某個數據被更新后,后續對該數據的讀取操作取到的可能是更新前的值,也可能是更新后的值

c、最終一致性:是若一致性的一種特殊形式,用戶最終能夠讀取到某個操作對系統的更新

注:分布式系統中采用最終一致性的例子很多

4)系統可擴展性,也稱可伸縮性

注:CAP理論指出:系統的一致性、可用性和可擴展性這三個要素對于分布式系統來說,很難同時滿足

5)并發減庫存

9、如何尋找性能瓶頸:前端優化工具——YSlow、頁面響應時間、方法響應時間、GC日志分析、數據庫查詢(慢查詢日志)、系統資源使用

10、性能測試:通過一些自動化的測試工具模擬多種正常、峰值,以及異常負載的條件來對系統的各項性能指標進行測試

1)ab全稱ApacheBench

2)Apache JMeter:純java實現,支持多種協議(HTTP、SOAP、FTP、TCP、SMTP、POP3等)

3)HP LoadRunner:商業付費性能測試工具,幾乎是應用性能測試領域的行業標準

4)反向代理引流

5)TCPCopy:請求復制工具

11、性能優化措施:

1)前端性能優化:a、頁面的HTTP請求數量;b、是否使用CDN網絡;c、是否使用壓縮

2)Java程序優化

a、單例

b、Future模式:異步處理,主線程使用處理結果時若未完成則阻塞

c、線程池:避免因過多線程導致的內存溢出,減少了線程創建和銷毀本身的消耗

d、選擇就緒:使用NIO代替阻塞I/O

e、減少上下文切換

f、降低鎖競爭:一種有效的方式是盡可能地縮短鎖持有的時間;另一種方式是減小鎖的粒度;第三種是放棄使用獨占鎖,而使用其他更友好的并發方式來保障數據的同步

3)壓縮

4)結果緩存

5)數據庫查詢性能優化:

a、合理使用索引

b、反范式設計:適當冗余,減少聯表

c、使用查詢緩存

d、使用搜索引擎

e、使用key-value數據庫

f、GC優化

g、硬件提升性能:針對需求進行適當配置

12、Java應用故障排查

1)jps:輸出JVM虛擬機進程的一些信息

2)jstat:是一個可以用來對虛擬機各種運行狀態進行監控的工具,通過它可以查看到虛擬機的類加載與卸載情況,管理內存使用和垃圾收集等信息,監視JIT即時編譯器的運行情況等

3)jinfo:用于查看應用程序的配置參數

4)jstack:用來生成虛擬機當前的線程快照信息

5)jmap:可以用來查看等待回收對象的隊列,查看堆的概要信息,包括采用的是哪種GC收集器,堆空間的使用情況,以及通過JVM參數指定的各個內存空間的大小等

6)BTrace:是一個開源的Java程序動態跟蹤工具

7)JConsole:是一款JDK內置的圖形化性能分析工具,可以用來連接本地或者遠程正在運行的JVM,對運行的Java應用程序的性能及資源消耗情況進行分析和監控,并提供可視化的圖表對相關數據進行展現

8)Memory Analyzer(MAT):是一款功能強大的Java堆分析工具

9)VisualVM:涵蓋了JVM內存消耗監視、性能分析、線程,以及堆轉儲分析、垃圾回收監視等幾乎所有能包含進來的功能

五、數據分析

1、inotify機制:對文件系統的變化進行監控

注:1)觀察者模式:響應式地對文件寫入進行監控,讀取文件每一次更改

2)inotify解決了日志收集的效率問題,ActiveMQ解決了日志數據分發的問題

3)削峰填谷的思想

2、Storm是一個實時的分布式流處理系統,要處理的對象是沒有終點的數據流。Storm使得數據消費的工作能夠以topology的形式提交到集群,集群來進行任務的調度、數據流的切割、容錯處理等一系列操作,而這一切對用戶透明,用戶只需定義好他的topology、spout、bolt即可,其他的邏輯則交由集群來處理

3、Chukwa:是基于Hadoop開發的數據采集與分析的框架,用來支持大型分布式系統的海量日志的收集與分析工作,它具有良好的適應性和可擴展性,天生支持與MapReduce協同進行數據處理,能提供完整的數據收集與分析的解決方案,五個關鍵部分:

1)Agent:負責采集每個節點上的原始數據,并發送數據給Collector

2)Collector:負責接收Agent所發送的數據,并且寫入到穩定的存儲當中

3)ETL數據處理任務,負責數據解析和歸檔

4)數據分析腳本任務:負責對收集的數據進行分析

5)HICC:Hadoop基礎管理平臺,提供數據展現的Web頁面

4、Hadoop項目的核心是分布式文件系統HDFS和編程模型MapReduce。HDFS用來對海量的數據提供高可靠性、高容錯性、高可擴展性、高吞吐的存儲解決方案,而MapReduce則是一種用來處理海量數據的并行編程模型和計算框架,用于對大規模的數據集進行并行計算。

注:高性能分布式協作服務ZooKeeper,可伸縮的支持大表結構化存儲的分布式數據庫Hbase,提供類SQL查詢功能的數據倉庫平臺Hive,大規模分布式系統的數據收集系統Chukwa,海量數據并行計算的編程語言和執行框架Pig,可擴展的機器學習和數據挖掘庫Mahout

1)HDFS:主從結構,集群擁有一個NameNode和一些DataNode,NameNode負責管理文件系統的命名空間,維護著每個文件名稱到對應的文件分塊的映射,以及每個文件分塊對應的機器列表;DataNode則負責它們所在的物理節點上的存儲管理。

注:副本的數量默認為3

2)MapReduce可以分為map和reduce兩個階段。在map階段:a、將任務的輸入數據切割為固定大小的片段(split);b、將這些片段進一步分解為鍵值對;c、為每一個split創建一個map任務,執行用戶定義的map處理邏輯,并將split中的鍵值對作為輸入傳遞給map進行處理;d、map處理后得到的中間結果輸出也是鍵值對形式,結果會被排序,并將鍵值相同的值合并到一個列表;e、根據鍵值的排序結果,將中間結果分配到不同的reduce任務。

在reduce階段:會對中間結果數據進行相應的加工處理,得到最終結果的鍵值對,并以鍵值對的形式輸出到HDFS文件系統上。

5、HDFS基本操作命令:HDFSShell命令使用hadoop fs <args> 的形式,并使用URI路徑作為參數,URI格式是scheme://authority/path,對于HDFS,scheme為hdfs,對于本地文件系統,scheme是file

1)touchz:hadoop fs –touchzURI[URI …] 創建一個文件

2)text:hadoop fs –text<src> 以文本的形式展現文件的內容

3)rmr:hadoop fs –rmr[-skipTrash] URI[URI …] 遞歸刪除,該命令將會遞歸刪除目錄和目錄下的文件

4)mkdir:hadoop fs –mkdir<paths> 創建paths指定的目錄

5)ls:hadoop fs –ls<args> 列出args路徑下的文件

6)cp:hadoop fs –cpURI [URI …] <dest> 從源地址將文件復制到目的地址

7)mv:hadoop fs –mvURI[URI …]<dest> 將文件從源地址移動到目的地址

6、MapReduce:map方法中value值存儲的是HDFS文件中的一行,而key值為該行的首字符相對于文件首地址的偏移量;reduce方法輸入的key為map中輸出的key值,values則對應了map過程中該key輸出的value集合

7、Hive是基于Hadoop的一個數據倉庫工具,可以將HDFS存儲的結構化的數據文件映射為一張數據庫表,并提供完整的SQL查詢功能。支持數據類型:

1)基本數據類型:數值型、布爾型、字符型;

2)復雜類型:ARRAY、MAP、STRUCT

8、Storm是一個開源的分布式實時計算系統。MapReduce執行的是批處理任務,Storm所提出的Topology原語執行的是實時處理任務。

注:Toplogy任務會永遠地運行,直到用戶手動kill掉

1)Storm特點:a、編程模型簡單;b、高容錯性和高可靠性;c、高效,ZeroMQ作為底層的消息隊列;d、多語言支持;e、可擴展性

2)集群架構:Storm集群包含了兩種類型的節點,管理節點和工作節點。管理節點上運行著一個稱為Nimbus的后臺進程,負責在集群中分發代碼,分配任務給其他機器,并且監控集群的異常狀態。每一個工作節點上運行著一個叫做Supervisor的后臺進程,負責接收Nimbus分配給當前的節點任務,啟動或者是關閉相應的工作進程。

注:a、每一個工作進程負責執行Topogy的一個子集,而一個運行著的Topology由運行在多個節點上的工作進程所組成。

b、Nimbus和Supervisor間的所有協調工作都是由ZooKeeper來完成的,Nimbus和Supervisor進程都是快速失敗且無狀態的,所有狀態都存儲在ZooKeeper或者本地磁盤上。

9、Storm的一個核心抽象便是stream(流),stream是一個沒有邊界的tuple(元組)序列,而Storm則提供了在分布式環境中進行可靠的流轉換的原語。Storm提供的最基本的處理stream的原語是spout和blot。

注:消息源spout是一個Topology里邊的消息產生者

10、流分組將告訴Topology如何在兩個組件之間發送tuple序列,Storm里有7種類型的流分組:1)隨機分組;2)按照字段進行分組;3)廣播發送;4)全局分組;5)不分組;6)直接分組;7)Local orShuffle Grouping

11、Sqoop是Apache下的一個開源同步工具,支持關系型數據到Hadoop的數據導入和導出功能,既能夠通過Sqoop將關系型數據庫(如MySQL、Orcale)中的數據導入到HDFS,也能通過Sqoop從HDFS中將數據同步回關系型數據庫。

12、Highcarts是一個非常流行、界面美觀、功能豐富的Javascript圖表庫,它包含兩個部分:Highcharts和Highstock。前者主要是為web站點提供直觀的、交互式的圖表體驗,目前支持線圖、條形圖、曲面圖、條形曲面圖、柱狀圖、餅圖、散布圖等圖表樣式;后者能方便快捷地用Javascript建立時間軸圖表,提供復雜精致的導航選項,支持預設日期范圍、日期選擇器、滾動和平移等功能。



總結

以上是生活随笔為你收集整理的《大型分布式网站架构设计与实践》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。