大型分布式網(wǎng)站設(shè)計與實踐
時間:2023-09-08 16:54:02 | 來源:網(wǎng)站運營
時間:2023-09-08 16:54:02 來源:網(wǎng)站運營
大型分布式網(wǎng)站設(shè)計與實踐:分布式應(yīng)用架構(gòu)就是解決系統(tǒng)之間的通信,存儲,安全,性能監(jiān)控,還有數(shù)據(jù)分析等問題。
通信:按照功能和業(yè)務(wù)分拆為多個子系統(tǒng)之后,首要問題就是各個子系統(tǒng)之間的通信,也叫作遠(yuǎn)程調(diào)用(RPC)。
基于http協(xié)議的RPC,具有靈活便捷,平臺無關(guān)性等優(yōu)點,因此得到廣泛的使用。
基于tcp協(xié)議的RPC,通信效率高,但是實現(xiàn)起來更加復(fù)雜,各個企業(yè)之間的協(xié)議和標(biāo)準(zhǔn)不同,難以實現(xiàn)跨平臺和企業(yè)間通信。
同時基于網(wǎng)絡(luò)環(huán)境的復(fù)雜性,同時還要考慮多線程并發(fā),鎖,io等底層細(xì)節(jié)的實現(xiàn),任意小的錯誤都會被無限放大。因此選擇http協(xié)議更符合主流 很多成熟的web容器已經(jīng)處理好這些事情 開放人員可以將更多的精力集中在業(yè)務(wù)的實現(xiàn)上,而非處理底層細(xì)節(jié)。
同時通過代碼優(yōu)化和使用gizp數(shù)據(jù)壓縮 能夠縮小與tcp通信效率的差距。
通信載體,JSON是以字符串形式,通過人眼可閱讀,
Protocol buffer雖然性能要更好,但是代碼入侵性大
XML結(jié)構(gòu)過于冗余
當(dāng)系統(tǒng)的集群規(guī)模很大時,通過人工去管理負(fù)載均衡,去配置維護(hù)服務(wù)和配置信息越來越困難。負(fù)載均衡服務(wù)器一旦宕機(jī),其他依賴它的服務(wù)就會失效。
此時,需要一個能夠動態(tài)注冊和獲取服務(wù)信息的地方,統(tǒng)一管理服務(wù)的名稱和其對應(yīng)的服務(wù)器列表信息,稱為服務(wù)配置中心。
能夠感知服務(wù)的存活狀態(tài),注冊新的可用服務(wù)。
zookeeper是針對大型分布式系統(tǒng)的可靠的協(xié)調(diào)系統(tǒng),提供的功能包括配置維護(hù),名字服務(wù),分布式同步等。
存儲:通過NoSQL實現(xiàn)熱點數(shù)據(jù)緩存。
使用NoSQL實現(xiàn)分布式session。
MySQL讀寫分離,分庫分表。
消息系統(tǒng),消息作為應(yīng)用間通信的一種方式,保存在隊列中,實現(xiàn)系統(tǒng)的異步,降低系統(tǒng)耦合度,提升響應(yīng)速度。
ActiveMQ,rabbitMQ等,常用的是發(fā)布訂閱模式。
垂直化的搜索引擎在分布式系統(tǒng)中是一個非常重要的角色,既能滿足用戶對于全文檢索,模糊查詢的需求,解決like查詢效率低的問題,同時解決由于分庫分表,或者使用NoSQL導(dǎo)致無法進(jìn)行多表關(guān)聯(lián)查詢的問題,開源的搜索引擎框架Lucene和solr的組合。
安全:對于常規(guī)的web攻擊手段,如xss,CRSF,SQL注入等,通常解決容易,如xss的防范通過轉(zhuǎn)義輸入的尖括號,
防范CRSF需要將cookie設(shè)置httponly 以及增加session的hash token,
防范SQL注入需要將分號等符號轉(zhuǎn)義
圖片上傳漏洞,通過壓縮圖片來處理。
數(shù)字摘要算法有md5,sha,base64,
就是一個值通過某個函數(shù)的處理得出另外一個對應(yīng)的值,當(dāng)有些摘要算法不可逆向,并且暴力破解難度大的時候就可以直接作為加密算法使用,base64可逆向,所以它不作為加密算法。
加密算法,
對稱加密算法,DES,AES
非對稱加密,RSA
簽名認(rèn)證是非對稱加密技術(shù)與數(shù)字摘要技術(shù)的綜合運用。
HTTPS就是簽名證書的一種運用。
OAuth協(xié)議是授權(quán)第三方應(yīng)用訪問開放平臺的技術(shù)。
性能監(jiān)控:由于線上系統(tǒng)不能夠debug解決問題,所以通常是通過分析日志查找問題。分析日志過程中,經(jīng)常需要使用一些shell命令,或者寫一些腳本加快分析的速度,更快的從日志中篩選有價值的內(nèi)容。
如grep,awk等命令
性能測試工具,ab,jmeter
數(shù)據(jù)分析:對于寫入的日志可以采用輪循的方式讀日志文件,但是對于不頻繁寫入的日志這樣做效率太低了,可以通過Linux系統(tǒng)提供的inotify機(jī)制,檢測文件被寫入了通知應(yīng)用程序來收集日志,
讀取到日志內(nèi)容不是簡單的輸出打印,而是通過activemq等消息中間件發(fā)送給那些日志訂閱方,然后進(jìn)行相應(yīng)的數(shù)據(jù)分析。
inotify解決日志收集效率問題,ActiveMQ解決日志數(shù)據(jù)分發(fā)問題,接下來就是解決日志分析和存儲問題。
數(shù)據(jù)經(jīng)過inotify的收集,activeMQ數(shù)據(jù)轉(zhuǎn)發(fā),經(jīng)過storm進(jìn)行實時處理,在存儲到MySQL,HDFS,hbase等存儲系統(tǒng),最后再進(jìn)行深度分析和實時的展現(xiàn)。
對于不需要實時分析的數(shù)據(jù),可以保存到HDFS上,然后通過mapreduce或者h(yuǎn)iveSQL進(jìn)行數(shù)據(jù)分析和挖掘。
對于需要實時展現(xiàn)的內(nèi)容,則可以保存到hbase上,hbase是高性能可伸縮的列表系統(tǒng)。
Hadoop的兩個核心,HDFS和mapreduce。
HDFS分布式文件系統(tǒng)并非傳統(tǒng)意義上的文件系統(tǒng),它工作在操作系統(tǒng)的用戶空間,由應(yīng)用程序來實現(xiàn),并不依賴底層文件系統(tǒng)的具體實現(xiàn)。
hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將HDFS存儲的結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供SQL查詢功能。
根據(jù)數(shù)據(jù)類型的不同,數(shù)據(jù)分析分兩種:
批量數(shù)據(jù)分析,適合做有限的數(shù)據(jù)的分析挖掘,離線數(shù)據(jù)分析大部分采用這種方式。如hive
流式數(shù)據(jù)分析,永遠(yuǎn)不會終結(jié)的流,源源不斷的從應(yīng)用服務(wù)器流向日志分析服務(wù) ,這種適合實時在線分析。如 storm
數(shù)據(jù)同步,
離線數(shù)據(jù)同步用sqoop,能夠?qū)ySQL和HDFS或者h(yuǎn)ive進(jìn)行雙向的轉(zhuǎn)換。
實時數(shù)據(jù)同步用activeMQ,實現(xiàn)增量數(shù)據(jù)同步。
數(shù)據(jù)報表工具,highcharts
關(guān)鍵詞:設(shè)計,實踐,分布,大型