单机负载告警,数据库与应用分离
隨著網(wǎng)站的開放,訪問量不斷增大,那么這個(gè)時(shí)候服務(wù)器的負(fù)載勢(shì)必會(huì)持續(xù)升高,必須要才需一些辦法來(lái)應(yīng)付。這里先不考慮更換機(jī)器和各種軟件層面的優(yōu)化,先從架構(gòu)的結(jié)構(gòu)上來(lái)做一些調(diào)整。我們可以把數(shù)據(jù)庫(kù)與應(yīng)用從一臺(tái)機(jī)器分到兩臺(tái)機(jī)器?
變化:
網(wǎng)站從一臺(tái)變成了2臺(tái),這個(gè)變化對(duì)我們來(lái)說(shuō)影響非常小。單機(jī)的情況下,我們應(yīng)用采用JDBC
的方式來(lái)和數(shù)據(jù)庫(kù)進(jìn)行連接,現(xiàn)在數(shù)據(jù)庫(kù)與應(yīng)用分開了,我們只需要在配置文件中把數(shù)據(jù)庫(kù)的地址
從本機(jī)改成數(shù)據(jù)庫(kù)服務(wù)器的ip地址就行。?
對(duì)于開發(fā)、測(cè)試、部署都沒有影響?
調(diào)整以后我們能夠緩解當(dāng)前的系統(tǒng)壓力,不過(guò)隨著時(shí)間的退役,訪問量繼續(xù)增大的話,我們的系統(tǒng)還是需要做改造?
?
為什么這么分呢?從計(jì)算機(jī)本身的角度來(lái)考慮的話,一個(gè)請(qǐng)求的訪問到處理最終到返回,性能瓶頸只會(huì)是:CPU、文件IO、網(wǎng)絡(luò)IO、內(nèi)存、等因素。
而一臺(tái)計(jì)算機(jī)中這些緯度是有性能瓶頸的,如果某個(gè)資源消耗過(guò)多,通常會(huì)造成系統(tǒng)的響應(yīng)速度較慢,所以增加一臺(tái)機(jī)器,
使得數(shù)據(jù)庫(kù)的IO和CPU資源獨(dú)占一臺(tái)機(jī)器從而增加性能。
這個(gè)地方插入一點(diǎn)題外話,就是簡(jiǎn)單說(shuō)一下各個(gè)資源的消耗原因。?
CPU/IO/內(nèi)存:?
1. 主要是上下文的切換,因?yàn)槊總€(gè)CPU核心在同一時(shí)刻只能執(zhí)行一個(gè)線程,而CPU的調(diào)度有幾種方式,比如搶占式和輪詢等,以搶占式為例,
每個(gè)線程會(huì)分配一定的執(zhí)行時(shí)間,當(dāng)達(dá)到執(zhí)行時(shí)間、線程中有IO阻塞或者有高優(yōu)先級(jí)的線程要執(zhí)行時(shí)。CPU會(huì)切換執(zhí)行其他線程。
而在切換的過(guò)程中,需要存儲(chǔ)當(dāng)前線程的執(zhí)行狀態(tài)并恢復(fù)要執(zhí)行的線程狀態(tài),這個(gè)過(guò)程就是上下文切換。比如IO、鎖等待等場(chǎng)景下也會(huì)觸發(fā)上下文切換,當(dāng)上下文切換
過(guò)多時(shí)會(huì)造成內(nèi)核占用比較多的CPU。
?
2. 文件IO,比如頻繁的日志寫入,磁盤本身的處理速度較慢、都會(huì)造成IO性能問題?
3. 網(wǎng)絡(luò)IO,帶寬不夠?
4. 內(nèi)存,包括內(nèi)存溢出、內(nèi)存泄漏、內(nèi)存不足?
實(shí)際上不管是應(yīng)用層的調(diào)優(yōu)也好,還是硬件的升級(jí)也好。其實(shí)無(wú)非就是這幾個(gè)因素的調(diào)整。
?
總結(jié)
以上是生活随笔為你收集整理的单机负载告警,数据库与应用分离的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大型网站的架构演进从一个电商网站开始
- 下一篇: linux cmake编译源码,linu