云时代架构阅读笔记十三——你的系统如何处理高并发?
1?從最基礎(chǔ)的地方做起,優(yōu)化我們寫的代碼,減少必要的資源浪費(fèi)。
? a、避免頻繁的使用new對(duì)象,對(duì)于整個(gè)應(yīng)用只需要存在一個(gè)實(shí)例的類,我們可以使用單例模式。對(duì)于String連接操作,使用StringBuffer或StringBuilder,對(duì)于工具類可以通過靜態(tài)方法來訪問。
? b、避免使用錯(cuò)誤的方式,盡量不用instanceof做條件判斷。使用java中效率高的類,比如ArrayList比Vector性能好。
2?html靜態(tài)化
??我們通過一個(gè)鏈接地址訪問,通過這個(gè)鏈接地址,服務(wù)器對(duì)應(yīng)的模塊處理這個(gè)請(qǐng)求,轉(zhuǎn)到對(duì)應(yīng)的jsp頁面,最后生成我們要的數(shù)據(jù)。但是,如果上千萬個(gè)請(qǐng)求的話,有太多的高并發(fā)請(qǐng)求,那么就會(huì)加重服務(wù)器的壓力,最壞的情況是把服務(wù)器down掉。那么如何避免這種情況的出現(xiàn)呢?如果我們把最初對(duì)test.do的請(qǐng)求結(jié)果保存成一個(gè)html文件,然后每次用戶都去訪問這個(gè)html文件,這樣就不用再去訪問服務(wù)器了,服務(wù)器的壓力不就減少了?
??那如何自動(dòng)的生成靜態(tài)頁面,當(dāng)用戶去訪問,會(huì)自動(dòng)的生成test.html?,然后再顯示給用戶。
3?圖片服務(wù)器分離
??對(duì)于web服務(wù)器來說,圖片是最消耗資源的,于是我們有必要把圖片與頁面進(jìn)行分離,我們把圖片放到獨(dú)立的圖片服務(wù)器。這樣的架構(gòu)可以降低提供頁面訪問請(qǐng)求的服務(wù)器系統(tǒng)壓力,并且可以保證系統(tǒng)不會(huì)因?yàn)閳D片的問題而崩潰。在圖片服務(wù)器上,我們可以對(duì)不同的配置進(jìn)行優(yōu)化。
4?緩存
??具體接觸過的緩存機(jī)制是hibernate的緩存機(jī)制。為了避免每次都向數(shù)據(jù)庫中取得數(shù)據(jù),我們把用戶常常訪問到的數(shù)據(jù)放到內(nèi)存中,甚至緩存十分大的時(shí)候我們可以把內(nèi)存中的緩存放到硬盤中。還有高級(jí)的分布式緩存數(shù)據(jù)庫使用,都可以增加系統(tǒng)的抗壓力。
5?分批傳送
??在做某項(xiàng)目的時(shí)候,一次傳遞的參數(shù)太多,而且數(shù)據(jù)庫規(guī)定一次最多傳遞的參數(shù)最多是三萬條,當(dāng)時(shí)有五萬條記錄,那怎么傳送呢?最終是分批傳送,電梯里一次乘不下那么多的人,會(huì)報(bào)超重的bug,那就分批把人送上去。
??還有一次在考試系統(tǒng)中,如果那么多的考試人員同時(shí)提交到數(shù)據(jù)庫中,數(shù)據(jù)庫的壓力增大,有時(shí)會(huì)被down掉,當(dāng)時(shí)采用的方法是使用ajax異步傳輸,沒有等待考生點(diǎn)擊提交按鈕的時(shí)候,就把考生的答案自動(dòng)提交,這樣也避免了突然斷電考生前面做過的題出現(xiàn)丟失的現(xiàn)象。
6?數(shù)據(jù)庫集群
???當(dāng)面對(duì)復(fù)雜的應(yīng)用,用戶大量訪問的時(shí)候,一臺(tái)數(shù)據(jù)很快無法滿足需求,于是我們需要使用數(shù)據(jù)庫集群或者庫表散列。
我們?cè)趹?yīng)用程序中安裝業(yè)務(wù)和應(yīng)用或者功能模塊將數(shù)據(jù)進(jìn)行分離,不同的模塊對(duì)應(yīng)不同的數(shù)據(jù)庫或表,再按照一定的策略對(duì)某個(gè)頁面或者功能進(jìn)行更小的數(shù)據(jù)庫散列。
7?DB優(yōu)化
???a、在數(shù)據(jù)庫設(shè)計(jì)的時(shí)候就要考慮到后期的維護(hù),數(shù)據(jù)庫三范式是我們?cè)O(shè)計(jì)數(shù)據(jù)庫索要遵循的原則。
???b、索引的建立:建立索引要適當(dāng),如果一個(gè)表經(jīng)常用來被查詢,對(duì)于增加和修改很少被用到,我們就可以為這個(gè)表建立索引,因?yàn)閷?duì)于增加和修改和刪除操作時(shí),我們對(duì)索引的維護(hù)要大大超過索引給我們帶來的效率。
???c、表字段的類型選擇要恰當(dāng)包括字段的長度、類型等,要根據(jù)實(shí)際存儲(chǔ)的數(shù)據(jù)進(jìn)行選擇,長度不要過長,否則會(huì)影響效率。
???d、外鍵要慎用,因?yàn)橹麈I代表這一張表,而外鍵代表一群表,對(duì)表之間進(jìn)行了關(guān)聯(lián),在刪除修改等需要我們關(guān)聯(lián)。
???e、在數(shù)據(jù)庫操作上
?????盡量使用prepareStatement,少用Statement,因?yàn)镻repareStatement是進(jìn)行預(yù)編譯的。
?????connection設(shè)置為readOnly,Connection是對(duì)書庫連接,屬于重量級(jí),我們使用即可。
?????連接池的使用,我們可以修改數(shù)據(jù)庫默認(rèn)的連接數(shù)。
8硬件上做到負(fù)載均衡
轉(zhuǎn)自:https://blog.csdn.net/weixin_42666837/article/details/81192928
轉(zhuǎn)載于:https://www.cnblogs.com/guo-xu/p/11051858.html
總結(jié)
以上是生活随笔為你收集整理的云时代架构阅读笔记十三——你的系统如何处理高并发?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeforces 拼手速
- 下一篇: 第十四周学习报告