更新時(shí)間:2020-03-25 15:45:01 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2041次
1.應(yīng)用和靜態(tài)資源分離
剛開始的時(shí)候應(yīng)用和靜態(tài)資源是保存在一起的,當(dāng)并發(fā)量達(dá)到一定程度的時(shí)候就需要將靜態(tài)資源保存到專門的服務(wù)器中,靜態(tài)資源主要包括圖片、視頻、js、css和一些資源文件等,這些文件因?yàn)闆]有狀態(tài)所以分離比較簡(jiǎn)單,直接存放到響應(yīng)的服務(wù)器就可以了,一般會(huì)使用專門的域名去訪問(wèn)。
通過(guò)不同的域名可以讓瀏覽器直接訪問(wèn)資源服務(wù)器而不需要再訪問(wèn)應(yīng)用服務(wù)器了。架構(gòu)圖如下:
2.頁(yè)面緩存
頁(yè)面緩存是將應(yīng)用生成的頁(yè)面緩存起來(lái),這樣就不需要每次都生成頁(yè)面了,從而可以節(jié)省大量的CPU資源,如果將緩存的頁(yè)面放到內(nèi)存中速度就更快了。如果使用Nginx服務(wù)器就可以使用它自帶的緩存功能,當(dāng)然也可以使用專門的Squid服務(wù)器。頁(yè)面緩存的默認(rèn)失效機(jī)制一班都是按緩存時(shí)間處理的,當(dāng)然也可以在修改數(shù)據(jù)之后手動(dòng)讓相應(yīng)的緩存失效。
頁(yè)面緩存主要是使用在數(shù)據(jù)很少發(fā)生變化的頁(yè)面,但是很多頁(yè)面是大部分?jǐn)?shù)據(jù)都很少發(fā)生變化,而其中很少一部分?jǐn)?shù)據(jù)變化頻率卻非常高,比如說(shuō)一個(gè)顯示文章的頁(yè)面,正常來(lái)說(shuō)完全可以靜態(tài)化,但是如果文章后面有“頂”和“踩”的功能而且顯示的有響應(yīng)的數(shù)量,這個(gè)數(shù)據(jù)的變化頻率就比較高了,這就會(huì)影響靜態(tài)化。這個(gè)問(wèn)題可以用先生成靜態(tài)頁(yè)面然后使用Ajax來(lái)讀取并修改響應(yīng)的數(shù)據(jù),這樣就可以一舉兩得來(lái),既可以使用頁(yè)面緩存也可以實(shí)時(shí)顯示一些變化頻率高的數(shù)據(jù)來(lái)。
其實(shí)大家都知道,效率最高、消耗最小的就是純靜態(tài)化的html頁(yè)面,所以我們盡可能使我們的網(wǎng)站上的頁(yè)面采用靜態(tài)頁(yè)面來(lái)實(shí)現(xiàn),這個(gè)最簡(jiǎn)單的方法其實(shí)也是最有效的方法。但是對(duì)于大量?jī)?nèi)容并且頻繁更新的網(wǎng)站,我們無(wú)法全部手動(dòng)去挨個(gè)實(shí)現(xiàn),于是出現(xiàn)了我們常見的信息發(fā)布系統(tǒng)CMS,像我們常訪問(wèn)的各個(gè)門戶站點(diǎn)的新聞?lì)l道,甚至他們的其他頻道,都是通過(guò)信息發(fā)布系統(tǒng)來(lái)管理和實(shí)現(xiàn)的,信息發(fā)布系統(tǒng)可以實(shí)現(xiàn)最簡(jiǎn)單的信息錄入自動(dòng)生成靜態(tài)頁(yè)面,還能具備頻道管理、權(quán)限管理、自動(dòng)抓取等功能,對(duì)于一個(gè)大型網(wǎng)站來(lái)說(shuō),擁有一套高效、可管理的CMS是必不可少的。
除了門戶和信息發(fā)布類型的網(wǎng)站,對(duì)于交互性要求很高的社區(qū)類型網(wǎng)站來(lái)說(shuō),盡可能的靜態(tài)化也是提高性能的必要手段,將社區(qū)內(nèi)的帖子、文章進(jìn)行實(shí)時(shí)的靜態(tài)化,有更新的時(shí)候再重新靜態(tài)化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網(wǎng)易社區(qū)等也是如此。
同時(shí),html靜態(tài)化也是某些緩存策略使用的手段,對(duì)于系統(tǒng)中頻繁使用數(shù)據(jù)庫(kù)查詢但是內(nèi)容更新很小的應(yīng)用,可以考慮使用html靜態(tài)化來(lái)實(shí)現(xiàn),比如論壇中論壇的公用設(shè)置信息,這些信息目前的主流論壇都可以進(jìn)行后臺(tái)管理并且存儲(chǔ)再數(shù)據(jù)庫(kù)中,這些信息其實(shí)大量被前臺(tái)程序調(diào)用,但是更新頻率很小,可以考慮將這部分內(nèi)容進(jìn)行后臺(tái)更新的時(shí)候進(jìn)行靜態(tài)化,這樣避免了大量的數(shù)據(jù)庫(kù)訪問(wèn)請(qǐng)求。
3.集群與分布式
集群是每臺(tái)服務(wù)器都具有相同的功能,處理請(qǐng)求時(shí)調(diào)用那臺(tái)服務(wù)器都可以,主要起分流作用。
分布式是將不同的業(yè)務(wù)放到不同的服務(wù)器中,處理一個(gè)請(qǐng)求可能需要用到多臺(tái)服務(wù)器,這樣就可以提高一個(gè)請(qǐng)求的處理速度,而且集群和分布式也可以同時(shí)使用。
集群有兩個(gè)方式:一種是在靜態(tài)資源集群。另一種是應(yīng)用程序集群。靜態(tài)資源集群比較簡(jiǎn)單。應(yīng)用程序集群在處理過(guò)程中最核心的問(wèn)題就是Session同步問(wèn)題。
Session同步有兩種處理方式:一種是在Session發(fā)生變化后自動(dòng)同步到其他服務(wù)器,另一種就是用個(gè)程序統(tǒng)一管理Session。所有集群的服務(wù)器都使用同一個(gè)Session,Tomcat默認(rèn)使用就是第一種方式,通過(guò)簡(jiǎn)單的配置就可以實(shí)現(xiàn),第二種方式可以使用專門的服務(wù)器安裝Mencached等高效的緩存程序統(tǒng)一來(lái)管理session,然后再應(yīng)用程序中通過(guò)重寫Request并覆蓋getSession方法來(lái)獲取制定服務(wù)器中的Session。
對(duì)于集群來(lái)說(shuō)還有一個(gè)核心的問(wèn)題就是負(fù)載均衡,也就是接收到一個(gè)請(qǐng)求后具體分配到那個(gè)服務(wù)器去處理的問(wèn)題,這個(gè)問(wèn)題可以通過(guò)軟件處理也可以使用專門的硬件(如:F5)解決。
4.反向代理
反向代理指的是客戶端直接訪問(wèn)的服務(wù)器并不真正提供服務(wù),它從別的服務(wù)器獲取資源然后將結(jié)果返回給用戶。
Java架構(gòu)-高并發(fā)的解決實(shí)戰(zhàn)總結(jié)方案,看完這些就夠了!
4.1反向代理服務(wù)器和代理服務(wù)器的區(qū)別
代理服務(wù)器的作用是代我門獲取想要的資源然后將結(jié)果返回給我們,所要獲取的資源是我門主動(dòng)告訴代理服務(wù)器的,比如,我門想訪問(wèn)Facebook,但是直接訪問(wèn)不了,這時(shí)就可以讓代理服務(wù)器訪問(wèn),然后將結(jié)果返回給我們。
反向代理服務(wù)器是我門正常訪問(wèn)一臺(tái)服務(wù)器的時(shí)候,服務(wù)器自己去調(diào)用了別的服務(wù)器資源并將結(jié)果返回給我們,我門自己并不知道。
代理服務(wù)器是我們主動(dòng)使用的,是為我們服務(wù)的,他不需要有自己的域名;反向代理服務(wù)器是服務(wù)器自己試用的,我門并不知道,它有自己的域名,我門訪問(wèn)它和訪問(wèn)正常的網(wǎng)址沒有任何區(qū)別。
反向代理服務(wù)器主要有三個(gè)作用:
1.可以作為前端服務(wù)器跟實(shí)際處理請(qǐng)求的服務(wù)器集成;
2.可以做負(fù)載均衡
3.轉(zhuǎn)發(fā)請(qǐng)求,比如說(shuō)可以將不同類型的資源請(qǐng)求轉(zhuǎn)發(fā)到不同的服務(wù)器去處理。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java架構(gòu)師實(shí)戰(zhàn)視頻教程”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743