《大型分布式网站架构设计与实践》
一、面向服務(wù)的體系架構(gòu)SOA
1、RPC:遠(yuǎn)程過程調(diào)用
2、OutputStream中直接寫入一個(gè)int類型,會(huì)截取其低8位,丟棄其高24位
3、HTTP請(qǐng)求與響應(yīng)過程:
1)瀏覽器根據(jù)所使用的http協(xié)議,解析出url對(duì)應(yīng)的域名
2)通過DNS域名解析,查詢出該域名對(duì)應(yīng)的IP地址
3)通過url解析出對(duì)應(yīng)的端口號(hào)
4)瀏覽器發(fā)起并建立到目的ip和端口的連接
5)瀏覽器向服務(wù)器發(fā)送請(qǐng)求
6)服務(wù)器響應(yīng)瀏覽器的請(qǐng)求,瀏覽器讀取響應(yīng),渲染網(wǎng)頁
7)瀏覽器關(guān)閉與服務(wù)器的連接
4、
1)RPC風(fēng)格:直接在HTTP請(qǐng)求的參數(shù)中標(biāo)明需要遠(yuǎn)程調(diào)用的服務(wù)接口名稱、服務(wù)需要的參數(shù)
2)RESTful風(fēng)格:符合REST原則的設(shè)計(jì)
注:a、REST架構(gòu)原則:表現(xiàn)層狀態(tài)轉(zhuǎn)換;b、HTTP協(xié)議是一種無狀態(tài)協(xié)議。
5、服務(wù)配置中心:一個(gè)能夠動(dòng)態(tài)注冊(cè)和獲取服務(wù)信息的地方,來統(tǒng)一管理服務(wù)名稱和其對(duì)應(yīng)的服務(wù)器列表信息
6、常見的負(fù)載均衡算法包括:輪詢法、隨機(jī)法、源地址哈希法、加權(quán)輪詢法、加權(quán)隨機(jī)法、最小連接法等
1)輪詢法:將請(qǐng)求按順序輪流地分配到后端服務(wù)器上
???????? 注:a、服務(wù)消費(fèi)者的實(shí)現(xiàn)端需要考慮服務(wù)器新增、下線、宕機(jī)的情況
???????? b、輪詢策略使用悲觀鎖synchronized,性能代價(jià)大,并發(fā)吞吐量下降
2)隨機(jī)法:通過系統(tǒng)隨機(jī)函數(shù),根據(jù)后端服務(wù)器列表的大小值來隨機(jī)選取其中一臺(tái)進(jìn)行訪問
3)源地址哈希法:獲取客戶端訪問的IP地址值,通過哈希函數(shù)計(jì)算得到一個(gè)數(shù)值,用該數(shù)值對(duì)服務(wù)器列表的大小進(jìn)行取模運(yùn)算,得到的結(jié)果便是要訪問的服務(wù)器的序號(hào)
4)加權(quán)輪詢法:將請(qǐng)求順序且按照權(quán)重分配到后端
5)加權(quán)隨機(jī)法:按照權(quán)重來隨機(jī)選取服務(wù)器
6)最小連接數(shù)法:根據(jù)后端服務(wù)器當(dāng)前的連接情況,動(dòng)態(tài)地選取其中當(dāng)前積壓連接數(shù)最少的一臺(tái)服務(wù)器來處理當(dāng)前請(qǐng)求。
7、Groovy腳本語言能夠直接編譯成java的class字節(jié)碼,運(yùn)行在java虛擬機(jī)上,且能夠很好的跟java進(jìn)行交互
8、ZooKeeper:是Hadoop下的一個(gè)子項(xiàng)目,是一個(gè)針對(duì)大型分布式系統(tǒng)的可靠的協(xié)調(diào)系統(tǒng),提供的功能包括配置維護(hù)、名字服務(wù)、分布式同步、組服務(wù)等,可以集群復(fù)制。通過Zab協(xié)議來保持?jǐn)?shù)據(jù)的一致性。包括:leader election階段和Atomic broadcas階段。
1)leader election階段:集群中將選舉出一個(gè)leader,其他的機(jī)器則稱為follower,所有的寫操作都被傳送給leader,并通過broadcas將所有的更新告訴follower。當(dāng)leader崩潰或者leader失去大多數(shù)的follower時(shí),需要重新選舉出一個(gè)新的leader,讓所有的服務(wù)器都恢復(fù)到一個(gè)正確的狀態(tài)。
2)Atomic broadcas階段:同步leader和follow之間的信息,保證leader和follower具有相同的系統(tǒng)狀態(tài)。
注:ZooKeeper的核心其實(shí)類似一個(gè)精簡(jiǎn)的文件系統(tǒng)
9、ZooKeeper API:1)創(chuàng)建節(jié)點(diǎn);2)刪除節(jié)點(diǎn);3)設(shè)置和獲取節(jié)點(diǎn)內(nèi)容;4)添加子節(jié)點(diǎn);5)判斷節(jié)點(diǎn)是否存在;6)watcher的實(shí)現(xiàn)
注:常見兩種異常:a、ConnectionLossException:客戶端與其中的一臺(tái)服務(wù)器socket連接出現(xiàn)異常、連接丟失;b、SessionExpiredException:客戶端的session已經(jīng)超過sessionTimeout,未進(jìn)行任何操作
10、第三方客戶端工具包zkClient:將znode的事件重新定義為子節(jié)點(diǎn)的變化、數(shù)據(jù)的變化、連接及狀態(tài)的變化三類。
GitHub源碼:https://github.com/sgroschupf/zkclient.git
11、對(duì)于單點(diǎn)故障問題,采用雙機(jī)高可用的部署方案,能部分解決問題,但負(fù)載均衡設(shè)備的昂貴成本,導(dǎo)致難以全面推廣。
二、分布式系統(tǒng)基礎(chǔ)設(shè)施
1、分布式系統(tǒng)的基礎(chǔ)設(shè)施:1)分布式協(xié)作及配置管理系統(tǒng);2)分布式緩存系統(tǒng);3)持久化存儲(chǔ);4)分布式消息系統(tǒng);5)搜索引擎;6)CDN系統(tǒng);7)負(fù)載均衡系統(tǒng);8)運(yùn)維自動(dòng)化系統(tǒng);9)實(shí)時(shí)計(jì)算系統(tǒng);10)離線計(jì)算系統(tǒng);11)分布式文件系統(tǒng);12)日志收集系統(tǒng);13)監(jiān)控系統(tǒng);14)數(shù)據(jù)倉(cāng)庫(kù)
2、memcache是一款開源的高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),使用key-value形式存儲(chǔ)和訪問數(shù)據(jù),在內(nèi)存中維護(hù)一張巨大的HashTable,將高層抽象的對(duì)象轉(zhuǎn)化成二進(jìn)制數(shù)據(jù)存儲(chǔ)。
1)其通過構(gòu)建在TCP協(xié)議之上的memcache協(xié)議來進(jìn)行通信
2)支持文本行和非結(jié)構(gòu)化數(shù)據(jù)
注:非結(jié)構(gòu)化數(shù)據(jù)采用字節(jié)流的形式在客戶端和服務(wù)端之間進(jìn)行傳輸和存儲(chǔ)
3)API:a、set;b、add;c、replace;d、append;e、prepend;f、cas:提供對(duì)變量的原子操作;g、get;h、incr:對(duì)計(jì)數(shù)器進(jìn)行增量操作;i:decr:對(duì)計(jì)數(shù)器進(jìn)行減量操作;j:delete
4)memcache本身并不是一種分布式的緩存系統(tǒng),它的分布式是由訪問它的客戶端來實(shí)現(xiàn)的。
5)consistent Hash:將Hash函數(shù)的值域空間組織成一個(gè)圓環(huán),整個(gè)空間按照順時(shí)針方向進(jìn)行組織,然后對(duì)相應(yīng)的服務(wù)器節(jié)點(diǎn)進(jìn)行Hash,將它們映射到Hash環(huán)上,即將該key映射在該位置的下一個(gè)節(jié)點(diǎn)服務(wù)器。
注:節(jié)點(diǎn)的分布可能不均勻,為了避免這種情況,引入虛擬節(jié)點(diǎn)機(jī)制,對(duì)每一個(gè)服務(wù)器節(jié)點(diǎn)都計(jì)算多個(gè)Hash值,即多了一步從虛擬節(jié)點(diǎn)再映射到真實(shí)節(jié)點(diǎn)的過程。
3、解決分布式session的方法
1)通過將一部分?jǐn)?shù)據(jù)存儲(chǔ)在cookie中,來規(guī)避分布式環(huán)境下session的操作
2)將session統(tǒng)一存儲(chǔ)在緩存集群上
4、IOE解決方案:IBM、oracle、EMC高端存儲(chǔ)
5、一種分庫(kù)分表的路由策略:
1)中間變量=user_id%(庫(kù)數(shù)量*每個(gè)庫(kù)的表數(shù)量)
2)庫(kù)=取整(中間變量/每個(gè)庫(kù)的表數(shù)量)
3)表=取余(中間變量%每個(gè)庫(kù)的表數(shù)量)
注:要考慮分布式事務(wù)問題
6、HBase是ApacheHadoop項(xiàng)目下的一個(gè)子項(xiàng)目,設(shè)計(jì)實(shí)現(xiàn)了高可靠性、高可擴(kuò)展性、實(shí)時(shí)讀/寫的列存儲(chǔ)數(shù)據(jù)庫(kù)。其本質(zhì)上是一張稀疏的大表,用來存儲(chǔ)粗粒度的結(jié)構(gòu)化數(shù)據(jù),并且能夠通過簡(jiǎn)單的增加節(jié)點(diǎn)來實(shí)現(xiàn)系統(tǒng)的線性擴(kuò)展。
1)HBase運(yùn)行在分布式文件系統(tǒng)HDFS之上
2)HBase的數(shù)據(jù)以表的形式進(jìn)行組織,每個(gè)表由行列組成;每個(gè)列屬于一個(gè)特定的列族,通過行和列來確定一個(gè)存儲(chǔ)單元,而每個(gè)存儲(chǔ)單元又可以有多個(gè)版本,通過時(shí)間戳來標(biāo)識(shí)。
3)HBase集群包含兩種角色:HMaster和HRegionServer。一個(gè)HRegionServer可以管理多個(gè)Region,并由HMaster來負(fù)責(zé)HRegionServer的調(diào)度及集群狀態(tài)的監(jiān)管
注:當(dāng)表隨著記錄條數(shù)的增加而不斷變大后,將會(huì)分裂成一個(gè)個(gè)Region,每個(gè)Region可以由(startkey,endkey)來表示
4)HBase shell 命令:
a、status:查看HBase集群狀態(tài)
b、create ‘表名’、’列族名稱1’、’列族名稱2’…:創(chuàng)建一個(gè)表,并制定列族的名稱
c、list:列出已有的表,并查看表的描述
d、alter ‘表名’ ,NAME=>’列族名稱’:給表新增一個(gè)列族
e、alert ‘表名’,NAME=>’列族名稱’, METHOD=>’delete’:刪除表的一個(gè)列族
f、disable? ‘表名’?? drop ’表名’ :刪除一個(gè)表
注:在使用drop刪除一個(gè)表之前,必須先將該表disable
g、put ‘表名’,‘rowkey’, ‘列族名稱:列名稱’, ‘值’:給表添加記錄
h、get ‘表名稱’,‘rowkey’:根據(jù)rowkey查看數(shù)據(jù)
i:get ‘表名稱’, ‘rowkey’,‘列族名稱:列名稱’:根據(jù)rowkey查看對(duì)應(yīng)列的數(shù)據(jù)
j:count ‘表名稱’:查看表中的記錄總數(shù)
k:scan ‘表名’ :查看表中所有記錄
l:scan ‘表名’, {COLUMNS=> ‘列族’} :查看表中指定列族的所有記錄
m:scan ‘表名’, {COLUMNS=> ‘列族’, LIMIT => 記錄數(shù), STARTROW => ‘開始rowkey’, STOPROW => ’結(jié)束rowkey’}
n:delete ‘表名’, ‘rowkey’,‘列族名稱’:根據(jù)rowkey刪除列數(shù)據(jù)
o:deleteall ‘表名’ ,‘rowkey’:根據(jù)rowkey刪除一行數(shù)據(jù)
5)訪問HBase三種方式:
a、通過指定rowkey進(jìn)行訪問
b、指定rowkey的range進(jìn)行scan
c、全表掃描
注:HBase的行是按照rowkey來排序的
7、緩存操作,可通過批量操作,避免多次請(qǐng)求帶來的網(wǎng)絡(luò)開銷,提高性能
1)lpush和rpush分別在list的首部和尾部添加元素
2)lpop和rpop分別在list的首部和尾部刪除元素
3)lrange,獲取list指定區(qū)間的元素
8、消息的異步接收降低了系統(tǒng)集成的耦合度,提升了分布式系統(tǒng)協(xié)作的效率,使得系統(tǒng)能夠更快地響應(yīng)用戶,提供更高的吞吐。作為緩沖,削峰填谷,緩解集群的壓力,避免整個(gè)系統(tǒng)被壓垮。
9、JMS(Java MessageService)java消息服務(wù):支持兩種消息發(fā)送和接收模型
1)P2P:點(diǎn)對(duì)點(diǎn),基于隊(duì)列(queue)
2)Pub/Sub:發(fā)布/訂閱模型,基于主題(topic)
注:訂閱模式設(shè)置為持久訂閱:斷開à保存à連接à重發(fā)
10、消息集群Master-Slave模式:包括基于共享文件系統(tǒng)的Master-Slave架構(gòu)和基于共享數(shù)據(jù)庫(kù)的Master-Slave架構(gòu)。
???????? Master啟動(dòng)時(shí),獲得排他鎖,其他Slave則stand-by,不對(duì)外提供服務(wù),同時(shí)等待獲取排他鎖。Master連接中斷或異常,排他鎖會(huì)立即釋放,另一個(gè)Slave能夠爭(zhēng)奪到Master的排他鎖,成為Master對(duì)外提供服務(wù)。
注:1)真正提供服務(wù)的只有一臺(tái),其它節(jié)點(diǎn)只為保障高可用
2)對(duì)于ActiveMQ來說,可以采用broker拆分的方式,將不相關(guān)的queue和topic拆分到多個(gè)broker,來達(dá)到提升系統(tǒng)吞吐能力的目的
11、垂直化的搜索引擎主要針對(duì)企業(yè)內(nèi)部的自有數(shù)據(jù)的檢索;搜索引擎平臺(tái),采用網(wǎng)絡(luò)爬蟲對(duì)全網(wǎng)數(shù)據(jù)進(jìn)行抓取,從而建立索引并提供給用戶進(jìn)行檢索
12、Lucene相關(guān)概念
1)倒排索引:也稱反向索引,將文檔中的詞作為關(guān)鍵字,建立詞與文檔的映射關(guān)系,通過倒排索引的檢索,可以根據(jù)詞快速獲取包含這個(gè)詞的文檔列表
2)分詞:又稱切詞,將句子或者段落進(jìn)行切割,從中提取包含固定語義的詞
3)停止詞:需要被忽略掉
4)排序:需要將相關(guān)度更大的內(nèi)容排在前面
5)文檔:是一系列域的組合,相當(dāng)于表
6)域:相當(dāng)于列
7)詞:搜索的基本單元
8)查詢
9)分詞器:提取關(guān)鍵的語義單元,常見有一元分詞、二元分詞、詞庫(kù)分詞等
13、Lucene的使用:
1)對(duì)某個(gè)Field進(jìn)行關(guān)鍵字查詢
2)根據(jù)某個(gè)范圍對(duì)Field的值進(jìn)行區(qū)間查詢
3)通過通配符來對(duì)Field進(jìn)行查詢
注:a、通配符:?表示0個(gè)或一個(gè)字母;*表示0個(gè)或多個(gè)字母
b、兩個(gè)Field之間所允許的最大距離稱為slop
4)結(jié)果排序:按照指定的Field
5)高亮:對(duì)匹配的內(nèi)容進(jìn)行突出展現(xiàn)
6)中文分詞工具:Lucene自帶的中日韓文分詞器CJKAnalyzer,IK分詞,MM分詞,庖丁分詞,imdict分詞器
7)索引優(yōu)化:Lucene的索引是由段組成的,每個(gè)段可能又包含多個(gè)索引文件,即每個(gè)段包含了一個(gè)或者多個(gè)Document。當(dāng)索引段的數(shù)量達(dá)到設(shè)置上限時(shí),Lucene會(huì)自動(dòng)進(jìn)行索引段的優(yōu)化,將索引段合并成為一個(gè),以提高查詢的性能
14、Solr:是一個(gè)基于Lucene的搜索引擎工具,提供了一系列功能強(qiáng)大的HTTP操作接口,支持通過Data Schema來定義字段、類型和設(shè)置文本分析,使得用戶可以通過HTTP POST請(qǐng)求,向服務(wù)器提交Document,生成索引,以及進(jìn)行索引的更新和刪除操作。對(duì)于復(fù)雜的查詢條件,Solr提供了一整套表達(dá)式查詢語言
三、互聯(lián)網(wǎng)安全架構(gòu)
1、常見的Web攻擊手段:xss攻擊、CRSF攻擊、SQL注入攻擊、文件上傳攻擊、DDoS攻擊等。
?
2、XSS攻擊:跨站腳本攻擊
1)定義:指的是攻擊者在網(wǎng)頁中嵌入惡意腳本程序,當(dāng)用戶打開該網(wǎng)頁時(shí),腳本程序便開始在客戶端的瀏覽器上執(zhí)行,以盜取客戶端cookie、用戶名密碼,下載執(zhí)行病毒木馬程序,甚至是獲取客戶端admin權(quán)限等。
???????? 2)原理:用戶輸入的數(shù)據(jù)變成了代碼
???????? 3)措施:需要對(duì)用戶輸入的數(shù)據(jù)進(jìn)行HTML轉(zhuǎn)義處理,將其中的“尖括號(hào)”、“單引號(hào)”、“引號(hào)”之類的特殊字符串進(jìn)行轉(zhuǎn)義編碼
?
3、CRSF攻擊:跨站請(qǐng)求偽造
???????? 1)原理:用戶訪問A站點(diǎn)后未登出,訪問攻擊站點(diǎn)B,B站點(diǎn)要求使用用戶在A的cookie訪問A站點(diǎn)
???????? 2)措施:a、將cookie設(shè)置為HttpOnly,這樣通過程序就無法讀取到cookie信息,避免了攻擊者偽造cookie的情況出現(xiàn)
???????? b、增加token:在請(qǐng)求中放入攻擊者所不能偽造的信息,并且該信息不存在于cookie之中
???????? c、通過Referer識(shí)別:在HTTP頭中有一個(gè)字段叫Referer,它記錄了該HTTP請(qǐng)求的源地址
?
4、SQL注入攻擊:通過把SQL命令偽裝成正常的HTTP請(qǐng)求參數(shù),傳遞到服務(wù)端,欺騙服務(wù)器最終執(zhí)行惡意的SQL命令,達(dá)到入侵目的。措施:
???????? 1)使用預(yù)編譯語句:即變量使用占位符替代
???????? 2)使用ORM框架:對(duì)一些關(guān)鍵字符進(jìn)行轉(zhuǎn)義
3)避免密碼明文存放:對(duì)存儲(chǔ)的密碼進(jìn)行單向hash,如md5
注:a、哈希加鹽法:在生成hash時(shí)給予一個(gè)擾動(dòng),使hash值與標(biāo)準(zhǔn)的hash結(jié)果不同,這樣就可以對(duì)抗彩虹表了
b、拖庫(kù):從數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)
4)處理好相應(yīng)的異常
?
5、文件上傳攻擊:利用一些站點(diǎn)沒有對(duì)文件的類型做很好的校驗(yàn),上傳了可執(zhí)行的文件或者腳本,并且通過腳本獲得服務(wù)器上相應(yīng)的權(quán)利,或者是通過誘導(dǎo)外部用戶訪問下載上傳的病毒或木馬文件,達(dá)到攻擊的目的
???????? 1)魔數(shù):根據(jù)文件起始的幾個(gè)字節(jié)內(nèi)容可以確定文件類型
???????? 2)imagemagick:是一套功能強(qiáng)大、穩(wěn)定并且開源的針對(duì)圖片處理的開發(fā)工具包,能夠處理多種格式的圖片文件,可以利用imagemagick來對(duì)圖片進(jìn)行縮放處理
?
6、DDoS攻擊:分布式拒絕服務(wù)攻擊,是目前最為強(qiáng)大、最難以防御的攻擊方式之一,一般采用一對(duì)一的方式。
???????? 1)原理:攻擊者借助公共網(wǎng)絡(luò),將數(shù)量龐大的計(jì)算機(jī)設(shè)備聯(lián)合起來作為攻擊平臺(tái),對(duì)一個(gè)或多個(gè)目標(biāo)發(fā)動(dòng)攻擊,從而達(dá)到癱瘓目標(biāo)主機(jī)的目的。
???????? 注:通常在攻擊開始前,攻擊者會(huì)提前控制大量的用戶計(jì)算機(jī),稱之為“肉雞”,并通過指令使大量的肉雞在同一時(shí)刻對(duì)某個(gè)主機(jī)進(jìn)行訪問,從而達(dá)到癱瘓目標(biāo)主機(jī)的目的。
???????? 2)常見的攻擊手段
???????? a、SYN Flood:利用TCP協(xié)議三次握手的過程來達(dá)成攻擊的目的。攻擊者偽造大量的IP地址給服務(wù)器發(fā)送SYN報(bào)文,由于偽造的IP幾乎不可能存在,也就不可能從客戶端得到任何回應(yīng),服務(wù)端維護(hù)一個(gè)非常大的半連接等待列表,并且不斷對(duì)這個(gè)列表中的IP地址進(jìn)行遍歷和重試,占用了大量的系統(tǒng)資源
???????? b、DNS QueryFlood:UDP Flood攻擊的一種變形,向被攻擊的服務(wù)器發(fā)送海量的域名解析請(qǐng)求,并且通過偽造端口和客戶端IP,防止查詢請(qǐng)求被ACL(訪問控制列表)過濾
???????? c、CC攻擊:基于應(yīng)用層HTTP協(xié)議發(fā)起的DDos攻擊,也被稱為HTTPFlood。攻擊者通過控制大量的“肉雞”或者從互聯(lián)網(wǎng)上搜尋的大量匿名的HTTP代理,模擬正常用戶給網(wǎng)站發(fā)起請(qǐng)求直到該網(wǎng)站拒絕服務(wù)為止。
???????? 注:其他攻擊手段還有:DNS域名劫持、CDN回源攻擊、服務(wù)器權(quán)限提升等
7、常用的安全算法有:摘要算法、對(duì)稱加密算法、非對(duì)稱加密算法、信息編碼等
8、數(shù)字摘要:也稱消息摘要,是一個(gè)唯一對(duì)應(yīng)一個(gè)消息或文本的固定長(zhǎng)度的值,由一個(gè)單向Hash函數(shù)對(duì)消息進(jìn)行計(jì)算而產(chǎn)生
1)消息摘要的特點(diǎn):
???????? a、無論輸入的消息有多長(zhǎng),計(jì)算出來的消息摘要的長(zhǎng)度總是固定的
???????? b、輸入不同,消息摘要一般也不同;輸入相同,則輸出必相同
???????? c、單向性
???????? 2)常見算法:
???????? a、MD5:信息摘要算法5,用于確保信息傳輸完整性和一致性,摘要長(zhǎng)度為128位
???????? b、SHA:安全散列算法:SHA-1是基于MD4算法的,公認(rèn)的最安全的散列算法之一,摘要信息的長(zhǎng)度為160位
???????? c、十六進(jìn)制編碼
???????? d、Base64編碼:一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,每6位為一個(gè)單元。
???????? 注:Base64算法僅僅只是一種編碼算法而已,不是加密算法。
???????? e、彩虹表破解Hash算法:彩虹表就是一張采用各種Hash算法生成的明文和密文的對(duì)照表,在彩虹表中,表內(nèi)的每一條記錄都是一串明文對(duì)應(yīng)一種Hash算法生成的一串密文。通過對(duì)彩虹表進(jìn)行查找、比較、運(yùn)算,能夠迅速得出此加密字符串對(duì)應(yīng)的明文。
9、對(duì)稱加密算法
???????? 1)特點(diǎn):算法公開、計(jì)算量小、加密速度快、加密效率高、秘鑰私有、使用算法的逆算法
???????? 2)常見算法:
???????? a、DES:明文按64位進(jìn)行分組,秘鑰長(zhǎng)64位,事實(shí)上只有56位參與DES運(yùn)算,8的倍數(shù)位是校驗(yàn)位,分組后的明文和56位的秘鑰按位替代或交換的方法形成密文
???????? b、3DES算法:使用3條64位的密鑰對(duì)數(shù)據(jù)進(jìn)行3次加密,是DES的一個(gè)更安全的變形
???????? c、AES:高級(jí)加密標(biāo)準(zhǔn),有三個(gè)秘鑰長(zhǎng)度(128、192、256位)
10、非對(duì)稱加密算法:公開秘鑰加密算法,公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有私鑰才能進(jìn)行解密;私鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有公鑰才能進(jìn)行解密
???????? 1)過程:甲方生成一對(duì)秘鑰并將其中的一把作為公鑰向其他人公開,得到該公鑰的乙方使用該秘鑰對(duì)機(jī)密信息進(jìn)行加密后再發(fā)送給甲方,甲方在使用自己保存的另一把專用秘鑰(即私鑰)對(duì)加密后的信息進(jìn)行解密
???????? 2)RSA算法:基于“將兩個(gè)大素?cái)?shù)相乘十分容易,但反過來想要對(duì)其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積作為公鑰”。其keysize位數(shù)越高,其產(chǎn)生秘鑰對(duì)及加密、解密的速度越慢
11、數(shù)字簽名:
???????? 1)原理:a、數(shù)字簽名的生成:通信正文à摘要算法à摘要à發(fā)送者私鑰à數(shù)字簽名
???????? b、數(shù)字簽名的校驗(yàn):通信正文通過摘要算法獲得摘要1,數(shù)字簽名通過發(fā)送者公鑰解密得到摘要2,若摘要1和摘要2相同則表示內(nèi)容沒有被篡改過
???????? 2)常見的數(shù)字簽名算法
???????? a、MD5withRSA:采用MD5算法生成需要發(fā)送正文的數(shù)字摘要,并使用RSA算法來對(duì)正文進(jìn)行加密和解密
???????? b、SHA1withRSA:采用SHA-1算法生成正文的數(shù)字摘要,并且使用RSA算法來對(duì)摘要進(jìn)行加密和解密
12、數(shù)字證書:也稱電子證書,用于標(biāo)識(shí)網(wǎng)絡(luò)中的用戶身份
1)數(shù)字證書包含內(nèi)容:a、對(duì)象的名稱(人、服務(wù)器、組織);b、證書的過期時(shí)間;c、證書的頒發(fā)機(jī)構(gòu)(誰為證書擔(dān)保);d、證書頒發(fā)機(jī)構(gòu)對(duì)證書信息的數(shù)字簽名;e、簽名算法;f、對(duì)象的公鑰
2)X.509:大多數(shù)的數(shù)字證書都以一種標(biāo)準(zhǔn)的格式(X.509)來存儲(chǔ)它們的信息
3)證書簽發(fā):由數(shù)字證書認(rèn)證機(jī)構(gòu)CA來進(jìn)行頒發(fā)
4)證書校驗(yàn):用簽發(fā)該證書的證書來驗(yàn)證,形成一條證書鏈,終結(jié)于根證書。
注:下載安裝根證書就表明對(duì)該根證書及其所簽發(fā)的證書都表示信任
5)證書的使用:Java提供了完善證書管理工具keytool
注:使用OpenSSL生成的數(shù)字證書和私鑰,如需在Java環(huán)境下使用,需要先將其轉(zhuǎn)換成PKCS#12編碼格式的秘鑰庫(kù),才能夠使用keytool工具進(jìn)行相應(yīng)的管理
13、摘要認(rèn)證的實(shí)現(xiàn):1)客戶端參數(shù)摘要生成;2)服務(wù)端參數(shù)摘要校驗(yàn);3)服務(wù)端響應(yīng)摘要生成;4)客戶端響應(yīng)摘要校驗(yàn)
注:使用HTTPS有性能上的成本,而且需要額外申請(qǐng)CA證書
14、簽名認(rèn)證的實(shí)現(xiàn):1)客戶端參數(shù)簽名生成;2)服務(wù)端參數(shù)簽名校驗(yàn);3)服務(wù)端響應(yīng)簽名生成;4)客戶端響應(yīng)簽名校驗(yàn)
15、HTTPS協(xié)議:基于SSL的HTTP協(xié)議,它能夠確保整個(gè)通信過程都是經(jīng)過加密的,秘鑰隨機(jī)產(chǎn)生,并且能夠通過數(shù)字證書驗(yàn)證通信雙方的身份,以此來保障信息安全。
注:1)通信的內(nèi)容使用對(duì)稱加密方式進(jìn)行加密
2)HTTPS協(xié)議在HTTP協(xié)議與TCP協(xié)議增加了一層安全層,所有請(qǐng)求和響應(yīng)數(shù)據(jù)在經(jīng)過網(wǎng)絡(luò)傳輸之前,都會(huì)先進(jìn)行加密,然后在進(jìn)行傳輸
3)HTTPS既支持單向認(rèn)證,也支持雙向認(rèn)證。單向認(rèn)證只校驗(yàn)服務(wù)端證書的有效性,雙向認(rèn)證既校驗(yàn)服務(wù)端證書也校驗(yàn)客戶端證書的有效性
16、SSL全稱安全套接層,保障網(wǎng)絡(luò)通信的安全,校驗(yàn)通信雙方的身份,加密傳輸數(shù)據(jù),與應(yīng)用層協(xié)議獨(dú)立無關(guān)。
1)SSL的繼任者是TLS,全稱傳輸層安全協(xié)議,同樣位于應(yīng)用層與傳輸層之間
2)SSL/TLS可分為兩層,一層為RecordProtocol(記錄協(xié)議),另一層為Handshake Protocol(握手協(xié)議)。記錄協(xié)議建立在可靠的傳輸協(xié)議(如TCP)之上,提供數(shù)據(jù)封裝、加密解密、數(shù)據(jù)壓縮、數(shù)據(jù)校驗(yàn)等基本功能。握手協(xié)議建立在記錄協(xié)議之上,在實(shí)際的數(shù)據(jù)傳輸開始前,進(jìn)行加密算法的協(xié)商,通信秘鑰的交換,通信雙方身份的認(rèn)證等工作
17、JSSE是Sun公司為了解決互聯(lián)網(wǎng)信息安全傳輸提出的一個(gè)解決方案,它實(shí)現(xiàn)了SSL和TSL協(xié)議,包含了數(shù)據(jù)加密、服務(wù)器驗(yàn)證、消息完整性和客戶端驗(yàn)證等技術(shù)
18、OAuth協(xié)議旨在為用戶資源的授權(quán)訪問提供一個(gè)安全、開放的標(biāo)準(zhǔn)。平臺(tái)商通過OAuth協(xié)議,提示用戶對(duì)第三方軟件廠商(ISV)進(jìn)行授權(quán),使得第三方軟件廠商能夠使用平臺(tái)商的部分?jǐn)?shù)據(jù),對(duì)用戶提供服務(wù)
注:一次OAuth授權(quán)涵蓋了三個(gè)角色:普通用戶、第三方應(yīng)用、平臺(tái)商
四、系統(tǒng)穩(wěn)定性
1、日志分析常用命令
1)cat:查看文件的內(nèi)容
2)more:分頁顯示文件
3)tail:顯示文件尾
4)head:顯示文件頭
5)sort:內(nèi)容排序,默認(rèn)是按字符排列的,-n 指定按數(shù)字順序排序,-r 指定逆序排列,-k 指定排序的列
6)wc:用來統(tǒng)計(jì)指定文件中的字符數(shù)、字?jǐn)?shù)、行數(shù),并輸出統(tǒng)計(jì)結(jié)果
7)uniq:用來顯示文件中行重復(fù)的次數(shù),或者顯示僅出現(xiàn)一次的行,以及僅僅顯示重復(fù)出現(xiàn)的行,uniq的去重針對(duì)的知識(shí)連續(xù)的兩行
8)grep:字符串查找
9)find:文件查找
注:whereis命令,能夠方便地定位到文件系統(tǒng)中可執(zhí)行文件的位置
10)expr:能夠?qū)\(yùn)算表達(dá)式或者字符串進(jìn)行運(yùn)算求值
11)tar:生成歸檔文件或?qū)w檔文件展開
12)curl:在命令行下通過HTTP協(xié)議訪問網(wǎng)頁文檔
2、sed編輯器:也稱流編輯器,在編輯數(shù)據(jù)之前,預(yù)先指定數(shù)據(jù)的編輯規(guī)則,然后按照規(guī)則將數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出
3、awk程序:提供一種編程語言而不僅僅是一組文本編輯的命令,再編程語言的內(nèi)部,可以定義保存數(shù)據(jù)的變量,使用算術(shù)和字符串操作函數(shù)對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,支持結(jié)構(gòu)化編程概念,能夠使用if和循環(huán)語句等
awk [option] ‘pattern {action}’ file
其中:option為命令的選項(xiàng),pattern為行匹配規(guī)則,action為執(zhí)行的具體操作,file為輸入的文件
注:如果沒有pattern,則對(duì)所有執(zhí)行action;如果沒有action,則打印所有匹配的行
4、監(jiān)控指標(biāo)
1)load:特定時(shí)間間隔內(nèi)運(yùn)行隊(duì)列中的平均線程數(shù),可通過top和uptime來查看
注:每個(gè)CPU的核都維護(hù)了一個(gè)運(yùn)行隊(duì)列
2)CPU利用率:top |grep Cpu
用戶時(shí)間us、系統(tǒng)時(shí)間sy(內(nèi)核態(tài)所花費(fèi)的時(shí)間)、Nice時(shí)間ni(調(diào)整進(jìn)程優(yōu)先級(jí)的時(shí)候所花費(fèi)的時(shí)間)、空閑時(shí)間id、等待時(shí)間wa、硬件中斷處理時(shí)間hi、軟件中斷處理時(shí)間si、丟失時(shí)間st(被強(qiáng)制等待虛擬CPU的時(shí)間)
3)磁盤剩余空間 df –h 或 df –l
4)網(wǎng)絡(luò)traffic :sar –n DEV 11
5)磁盤I/O:iostat –d –k
6)內(nèi)存使用:free –m 注:Linux的內(nèi)存包括物理內(nèi)存Mem和虛擬內(nèi)存swap
7)qps:每秒查詢數(shù)
8)rt:請(qǐng)求的響應(yīng)時(shí)間
9)select/ps:每秒處理的select語句的數(shù)量
10)update/ps、delete/ps
11)GC
5、心跳檢測(cè)
1)ping
2)應(yīng)用層檢測(cè)
3)業(yè)務(wù)檢測(cè):a、通過頁面的大小來判斷頁面是否出現(xiàn)了異常;b、檢測(cè)頁面的返回值;c、可在response的header中約定一個(gè)值,來標(biāo)識(shí)返回的結(jié)果是否正常
6、流量控制,對(duì)于超載的流量:1)將這部分流量丟棄;2)通過單擊內(nèi)存隊(duì)列來進(jìn)行有限的等待;3)通過分布式消息隊(duì)列來將用戶的請(qǐng)求異步化
7、服務(wù)穩(wěn)定性:
1)依賴管理
2)優(yōu)雅降級(jí):暫時(shí)不可用,后期恢復(fù)
3)服務(wù)分級(jí):非常時(shí)期,只為優(yōu)先級(jí)高的消費(fèi)者提供服務(wù)
4)開關(guān)
5)應(yīng)急預(yù)案
8、高并發(fā)系統(tǒng)設(shè)計(jì)
1)操作原子性
2)多線程同步:指的是線程之間執(zhí)行的順序,多個(gè)線程并發(fā)地訪問和操作同一數(shù)據(jù),并且執(zhí)行的結(jié)果與訪問或者操作的次序有關(guān)
注:公平鎖指的是多個(gè)線程在等待同一個(gè)鎖時(shí),必須按照申請(qǐng)鎖的先后順序來依次獲得鎖
3)數(shù)據(jù)一致性
a、強(qiáng)一致性:無論數(shù)據(jù)的更新操作是在哪個(gè)副本上執(zhí)行,之后所有的讀操作都要能夠獲取到更新的最新數(shù)據(jù)
b、弱一致性:系統(tǒng)的某個(gè)數(shù)據(jù)被更新后,后續(xù)對(duì)該數(shù)據(jù)的讀取操作取到的可能是更新前的值,也可能是更新后的值
c、最終一致性:是若一致性的一種特殊形式,用戶最終能夠讀取到某個(gè)操作對(duì)系統(tǒng)的更新
注:分布式系統(tǒng)中采用最終一致性的例子很多
4)系統(tǒng)可擴(kuò)展性,也稱可伸縮性
注:CAP理論指出:系統(tǒng)的一致性、可用性和可擴(kuò)展性這三個(gè)要素對(duì)于分布式系統(tǒng)來說,很難同時(shí)滿足
5)并發(fā)減庫(kù)存
9、如何尋找性能瓶頸:前端優(yōu)化工具——YSlow、頁面響應(yīng)時(shí)間、方法響應(yīng)時(shí)間、GC日志分析、數(shù)據(jù)庫(kù)查詢(慢查詢?nèi)罩?#xff09;、系統(tǒng)資源使用
10、性能測(cè)試:通過一些自動(dòng)化的測(cè)試工具模擬多種正常、峰值,以及異常負(fù)載的條件來對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試
1)ab全稱ApacheBench
2)Apache JMeter:純java實(shí)現(xiàn),支持多種協(xié)議(HTTP、SOAP、FTP、TCP、SMTP、POP3等)
3)HP LoadRunner:商業(yè)付費(fèi)性能測(cè)試工具,幾乎是應(yīng)用性能測(cè)試領(lǐng)域的行業(yè)標(biāo)準(zhǔn)
4)反向代理引流
5)TCPCopy:請(qǐng)求復(fù)制工具
11、性能優(yōu)化措施:
1)前端性能優(yōu)化:a、頁面的HTTP請(qǐng)求數(shù)量;b、是否使用CDN網(wǎng)絡(luò);c、是否使用壓縮
2)Java程序優(yōu)化
a、單例
b、Future模式:異步處理,主線程使用處理結(jié)果時(shí)若未完成則阻塞
c、線程池:避免因過多線程導(dǎo)致的內(nèi)存溢出,減少了線程創(chuàng)建和銷毀本身的消耗
d、選擇就緒:使用NIO代替阻塞I/O
e、減少上下文切換
f、降低鎖競(jìng)爭(zhēng):一種有效的方式是盡可能地縮短鎖持有的時(shí)間;另一種方式是減小鎖的粒度;第三種是放棄使用獨(dú)占鎖,而使用其他更友好的并發(fā)方式來保障數(shù)據(jù)的同步
3)壓縮
4)結(jié)果緩存
5)數(shù)據(jù)庫(kù)查詢性能優(yōu)化:
a、合理使用索引
b、反范式設(shè)計(jì):適當(dāng)冗余,減少聯(lián)表
c、使用查詢緩存
d、使用搜索引擎
e、使用key-value數(shù)據(jù)庫(kù)
f、GC優(yōu)化
g、硬件提升性能:針對(duì)需求進(jìn)行適當(dāng)配置
12、Java應(yīng)用故障排查
1)jps:輸出JVM虛擬機(jī)進(jìn)程的一些信息
2)jstat:是一個(gè)可以用來對(duì)虛擬機(jī)各種運(yùn)行狀態(tài)進(jìn)行監(jiān)控的工具,通過它可以查看到虛擬機(jī)的類加載與卸載情況,管理內(nèi)存使用和垃圾收集等信息,監(jiān)視JIT即時(shí)編譯器的運(yùn)行情況等
3)jinfo:用于查看應(yīng)用程序的配置參數(shù)
4)jstack:用來生成虛擬機(jī)當(dāng)前的線程快照信息
5)jmap:可以用來查看等待回收對(duì)象的隊(duì)列,查看堆的概要信息,包括采用的是哪種GC收集器,堆空間的使用情況,以及通過JVM參數(shù)指定的各個(gè)內(nèi)存空間的大小等
6)BTrace:是一個(gè)開源的Java程序動(dòng)態(tài)跟蹤工具
7)JConsole:是一款JDK內(nèi)置的圖形化性能分析工具,可以用來連接本地或者遠(yuǎn)程正在運(yùn)行的JVM,對(duì)運(yùn)行的Java應(yīng)用程序的性能及資源消耗情況進(jìn)行分析和監(jiān)控,并提供可視化的圖表對(duì)相關(guān)數(shù)據(jù)進(jìn)行展現(xiàn)
8)Memory Analyzer(MAT):是一款功能強(qiáng)大的Java堆分析工具
9)VisualVM:涵蓋了JVM內(nèi)存消耗監(jiān)視、性能分析、線程,以及堆轉(zhuǎn)儲(chǔ)分析、垃圾回收監(jiān)視等幾乎所有能包含進(jìn)來的功能
五、數(shù)據(jù)分析
1、inotify機(jī)制:對(duì)文件系統(tǒng)的變化進(jìn)行監(jiān)控
注:1)觀察者模式:響應(yīng)式地對(duì)文件寫入進(jìn)行監(jiān)控,讀取文件每一次更改
2)inotify解決了日志收集的效率問題,ActiveMQ解決了日志數(shù)據(jù)分發(fā)的問題
3)削峰填谷的思想
2、Storm是一個(gè)實(shí)時(shí)的分布式流處理系統(tǒng),要處理的對(duì)象是沒有終點(diǎn)的數(shù)據(jù)流。Storm使得數(shù)據(jù)消費(fèi)的工作能夠以topology的形式提交到集群,集群來進(jìn)行任務(wù)的調(diào)度、數(shù)據(jù)流的切割、容錯(cuò)處理等一系列操作,而這一切對(duì)用戶透明,用戶只需定義好他的topology、spout、bolt即可,其他的邏輯則交由集群來處理
3、Chukwa:是基于Hadoop開發(fā)的數(shù)據(jù)采集與分析的框架,用來支持大型分布式系統(tǒng)的海量日志的收集與分析工作,它具有良好的適應(yīng)性和可擴(kuò)展性,天生支持與MapReduce協(xié)同進(jìn)行數(shù)據(jù)處理,能提供完整的數(shù)據(jù)收集與分析的解決方案,五個(gè)關(guān)鍵部分:
1)Agent:負(fù)責(zé)采集每個(gè)節(jié)點(diǎn)上的原始數(shù)據(jù),并發(fā)送數(shù)據(jù)給Collector
2)Collector:負(fù)責(zé)接收Agent所發(fā)送的數(shù)據(jù),并且寫入到穩(wěn)定的存儲(chǔ)當(dāng)中
3)ETL數(shù)據(jù)處理任務(wù),負(fù)責(zé)數(shù)據(jù)解析和歸檔
4)數(shù)據(jù)分析腳本任務(wù):負(fù)責(zé)對(duì)收集的數(shù)據(jù)進(jìn)行分析
5)HICC:Hadoop基礎(chǔ)管理平臺(tái),提供數(shù)據(jù)展現(xiàn)的Web頁面
4、Hadoop項(xiàng)目的核心是分布式文件系統(tǒng)HDFS和編程模型MapReduce。HDFS用來對(duì)海量的數(shù)據(jù)提供高可靠性、高容錯(cuò)性、高可擴(kuò)展性、高吞吐的存儲(chǔ)解決方案,而MapReduce則是一種用來處理海量數(shù)據(jù)的并行編程模型和計(jì)算框架,用于對(duì)大規(guī)模的數(shù)據(jù)集進(jìn)行并行計(jì)算。
注:高性能分布式協(xié)作服務(wù)ZooKeeper,可伸縮的支持大表結(jié)構(gòu)化存儲(chǔ)的分布式數(shù)據(jù)庫(kù)Hbase,提供類SQL查詢功能的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái)Hive,大規(guī)模分布式系統(tǒng)的數(shù)據(jù)收集系統(tǒng)Chukwa,海量數(shù)據(jù)并行計(jì)算的編程語言和執(zhí)行框架Pig,可擴(kuò)展的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫(kù)Mahout
1)HDFS:主從結(jié)構(gòu),集群擁有一個(gè)NameNode和一些DataNode,NameNode負(fù)責(zé)管理文件系統(tǒng)的命名空間,維護(hù)著每個(gè)文件名稱到對(duì)應(yīng)的文件分塊的映射,以及每個(gè)文件分塊對(duì)應(yīng)的機(jī)器列表;DataNode則負(fù)責(zé)它們所在的物理節(jié)點(diǎn)上的存儲(chǔ)管理。
注:副本的數(shù)量默認(rèn)為3
2)MapReduce可以分為map和reduce兩個(gè)階段。在map階段:a、將任務(wù)的輸入數(shù)據(jù)切割為固定大小的片段(split);b、將這些片段進(jìn)一步分解為鍵值對(duì);c、為每一個(gè)split創(chuàng)建一個(gè)map任務(wù),執(zhí)行用戶定義的map處理邏輯,并將split中的鍵值對(duì)作為輸入傳遞給map進(jìn)行處理;d、map處理后得到的中間結(jié)果輸出也是鍵值對(duì)形式,結(jié)果會(huì)被排序,并將鍵值相同的值合并到一個(gè)列表;e、根據(jù)鍵值的排序結(jié)果,將中間結(jié)果分配到不同的reduce任務(wù)。
在reduce階段:會(huì)對(duì)中間結(jié)果數(shù)據(jù)進(jìn)行相應(yīng)的加工處理,得到最終結(jié)果的鍵值對(duì),并以鍵值對(duì)的形式輸出到HDFS文件系統(tǒng)上。
5、HDFS基本操作命令:HDFSShell命令使用hadoop fs <args> 的形式,并使用URI路徑作為參數(shù),URI格式是scheme://authority/path,對(duì)于HDFS,scheme為hdfs,對(duì)于本地文件系統(tǒng),scheme是file
1)touchz:hadoop fs –touchzURI[URI …] 創(chuàng)建一個(gè)文件
2)text:hadoop fs –text<src> 以文本的形式展現(xiàn)文件的內(nèi)容
3)rmr:hadoop fs –rmr[-skipTrash] URI[URI …] 遞歸刪除,該命令將會(huì)遞歸刪除目錄和目錄下的文件
4)mkdir:hadoop fs –mkdir<paths> 創(chuàng)建paths指定的目錄
5)ls:hadoop fs –ls<args> 列出args路徑下的文件
6)cp:hadoop fs –cpURI [URI …] <dest> 從源地址將文件復(fù)制到目的地址
7)mv:hadoop fs –mvURI[URI …]<dest> 將文件從源地址移動(dòng)到目的地址
6、MapReduce:map方法中value值存儲(chǔ)的是HDFS文件中的一行,而key值為該行的首字符相對(duì)于文件首地址的偏移量;reduce方法輸入的key為map中輸出的key值,values則對(duì)應(yīng)了map過程中該key輸出的value集合
7、Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將HDFS存儲(chǔ)的結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢功能。支持?jǐn)?shù)據(jù)類型:
1)基本數(shù)據(jù)類型:數(shù)值型、布爾型、字符型;
2)復(fù)雜類型:ARRAY、MAP、STRUCT
8、Storm是一個(gè)開源的分布式實(shí)時(shí)計(jì)算系統(tǒng)。MapReduce執(zhí)行的是批處理任務(wù),Storm所提出的Topology原語執(zhí)行的是實(shí)時(shí)處理任務(wù)。
注:Toplogy任務(wù)會(huì)永遠(yuǎn)地運(yùn)行,直到用戶手動(dòng)kill掉
1)Storm特點(diǎn):a、編程模型簡(jiǎn)單;b、高容錯(cuò)性和高可靠性;c、高效,ZeroMQ作為底層的消息隊(duì)列;d、多語言支持;e、可擴(kuò)展性
2)集群架構(gòu):Storm集群包含了兩種類型的節(jié)點(diǎn),管理節(jié)點(diǎn)和工作節(jié)點(diǎn)。管理節(jié)點(diǎn)上運(yùn)行著一個(gè)稱為Nimbus的后臺(tái)進(jìn)程,負(fù)責(zé)在集群中分發(fā)代碼,分配任務(wù)給其他機(jī)器,并且監(jiān)控集群的異常狀態(tài)。每一個(gè)工作節(jié)點(diǎn)上運(yùn)行著一個(gè)叫做Supervisor的后臺(tái)進(jìn)程,負(fù)責(zé)接收Nimbus分配給當(dāng)前的節(jié)點(diǎn)任務(wù),啟動(dòng)或者是關(guān)閉相應(yīng)的工作進(jìn)程。
注:a、每一個(gè)工作進(jìn)程負(fù)責(zé)執(zhí)行Topogy的一個(gè)子集,而一個(gè)運(yùn)行著的Topology由運(yùn)行在多個(gè)節(jié)點(diǎn)上的工作進(jìn)程所組成。
b、Nimbus和Supervisor間的所有協(xié)調(diào)工作都是由ZooKeeper來完成的,Nimbus和Supervisor進(jìn)程都是快速失敗且無狀態(tài)的,所有狀態(tài)都存儲(chǔ)在ZooKeeper或者本地磁盤上。
9、Storm的一個(gè)核心抽象便是stream(流),stream是一個(gè)沒有邊界的tuple(元組)序列,而Storm則提供了在分布式環(huán)境中進(jìn)行可靠的流轉(zhuǎn)換的原語。Storm提供的最基本的處理stream的原語是spout和blot。
注:消息源spout是一個(gè)Topology里邊的消息產(chǎn)生者
10、流分組將告訴Topology如何在兩個(gè)組件之間發(fā)送tuple序列,Storm里有7種類型的流分組:1)隨機(jī)分組;2)按照字段進(jìn)行分組;3)廣播發(fā)送;4)全局分組;5)不分組;6)直接分組;7)Local orShuffle Grouping
11、Sqoop是Apache下的一個(gè)開源同步工具,支持關(guān)系型數(shù)據(jù)到Hadoop的數(shù)據(jù)導(dǎo)入和導(dǎo)出功能,既能夠通過Sqoop將關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、Orcale)中的數(shù)據(jù)導(dǎo)入到HDFS,也能通過Sqoop從HDFS中將數(shù)據(jù)同步回關(guān)系型數(shù)據(jù)庫(kù)。
12、Highcarts是一個(gè)非常流行、界面美觀、功能豐富的Javascript圖表庫(kù),它包含兩個(gè)部分:Highcharts和Highstock。前者主要是為web站點(diǎn)提供直觀的、交互式的圖表體驗(yàn),目前支持線圖、條形圖、曲面圖、條形曲面圖、柱狀圖、餅圖、散布圖等圖表樣式;后者能方便快捷地用Javascript建立時(shí)間軸圖表,提供復(fù)雜精致的導(dǎo)航選項(xiàng),支持預(yù)設(shè)日期范圍、日期選擇器、滾動(dòng)和平移等功能。
總結(jié)
以上是生活随笔為你收集整理的《大型分布式网站架构设计与实践》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【网络科学导论】【复杂网络】基础知识总结
- 下一篇: srb timestamp2 (2022
