跳转到企业缓存之前要考虑的事项
介紹
關(guān)系數(shù)據(jù)庫事務(wù)是ACID ,強(qiáng)大的一致性模型簡化了應(yīng)用程序開發(fā)。 由于啟用Hibernate緩存是一項(xiàng)配置 ,因此,只要數(shù)據(jù)訪問層開始顯示性能問題,就轉(zhuǎn)向緩存非常吸引人。 添加緩存層確實(shí)可以提高應(yīng)用程序性能,但是它有其代價(jià),您需要意識(shí)到這一點(diǎn)。
數(shù)據(jù)庫性能調(diào)優(yōu)
因此,數(shù)據(jù)庫是任何企業(yè)應(yīng)用程序的中心部分,其中包含有價(jià)值的業(yè)務(wù)資產(chǎn)。 數(shù)據(jù)庫服務(wù)器的資源有限,因此可以服務(wù)有限數(shù)量的連接。 數(shù)據(jù)庫事務(wù)越短,可以容納的事務(wù)越多。 第一項(xiàng)性能調(diào)整操作是通過正確索引和優(yōu)化查詢來減少查詢執(zhí)行時(shí)間。
優(yōu)化所有查詢和語句后,我們可以添加更多資源( 向上擴(kuò)展 )或添加更多數(shù)據(jù)庫節(jié)點(diǎn)(向外擴(kuò)展)。 水平縮放需要數(shù)據(jù)庫復(fù)制 ,這意味著要同步節(jié)點(diǎn)。 同步復(fù)制保留了強(qiáng)大的一致性,而異步主從復(fù)制則導(dǎo)致了最終的一致性。
類似于數(shù)據(jù)庫復(fù)制挑戰(zhàn),緩存節(jié)點(diǎn)會(huì)引發(fā)數(shù)據(jù)同步問題,尤其是對(duì)于分布式企業(yè)應(yīng)用程序。
快取
即使適當(dāng)?shù)貎?yōu)化了數(shù)據(jù)庫訪問模式,較高的負(fù)載也可能會(huì)增加延遲。 為了提供可預(yù)測且恒定的響應(yīng)時(shí)間,我們需要轉(zhuǎn)向緩存 。 緩存使我們可以將數(shù)據(jù)庫響應(yīng)重用于多個(gè)用戶請求。
因此,緩存可以:
- 減少數(shù)據(jù)庫端的CPU /內(nèi)存/ IO資源消耗
- 減少應(yīng)用程序節(jié)點(diǎn)與數(shù)據(jù)庫層之間的網(wǎng)絡(luò)流量
- 提供恒定的結(jié)果獲取時(shí)間,對(duì)流量突發(fā)不敏感
- 當(dāng)應(yīng)用程序處于維護(hù)模式時(shí)(例如,升級(jí)數(shù)據(jù)庫架構(gòu)時(shí))提供只讀視圖
引入緩存解決方案的不利之處在于,數(shù)據(jù)是通過兩種獨(dú)立的技術(shù)進(jìn)行復(fù)制的,這些技術(shù)可能很容易失步。
在最簡單的用例中,您有一臺(tái)數(shù)據(jù)庫服務(wù)器和一臺(tái)緩存節(jié)點(diǎn):
緩存抽象層知道數(shù)據(jù)庫服務(wù)器,但是數(shù)據(jù)庫對(duì)應(yīng)用程序級(jí)緩存一無所知。 如果某些外部進(jìn)程在不觸摸緩存的情況下更新數(shù)據(jù)庫,則兩個(gè)數(shù)據(jù)源將不同步。 因?yàn)楹苌儆袛?shù)據(jù)庫服務(wù)器支持應(yīng)用程序級(jí)通知 ,所以緩存可能會(huì)破壞強(qiáng)一致性保證。
為了避免最終的一致性,需要在分布式XA事務(wù)中注冊數(shù)據(jù)庫和緩存,因此受影響的緩存條目將被同步更新或無效。
通常,組成整個(gè)企業(yè)系統(tǒng)的應(yīng)用程序節(jié)點(diǎn)更多或多個(gè)不同的應(yīng)用程序(Web前端,批處理程序,調(diào)度程序):
如果每個(gè)節(jié)點(diǎn)都有其自己的隔離緩存節(jié)點(diǎn),則需要注意可能的數(shù)據(jù)同步問題。 如果一個(gè)節(jié)點(diǎn)在不通知其余節(jié)點(diǎn)的情況下更新數(shù)據(jù)庫及其自身的緩存,則其他緩存節(jié)點(diǎn)將不同步。
在分布式環(huán)境中,當(dāng)多個(gè)應(yīng)用程序或應(yīng)用程序節(jié)點(diǎn)使用緩存時(shí),我們需要使用分布式緩存解決方案,以便:
- 緩存節(jié)點(diǎn)以對(duì)等拓?fù)溥M(jìn)行通信
- 緩存節(jié)點(diǎn)以客戶端-服務(wù)器拓?fù)溥M(jìn)行通信,中央緩存服務(wù)器負(fù)責(zé)數(shù)據(jù)同步
結(jié)論
緩存是一種很好的擴(kuò)展技術(shù),但是您必須注意可能的一致性問題。 考慮到您當(dāng)前的項(xiàng)目數(shù)據(jù)完整性要求,您需要設(shè)計(jì)應(yīng)用程序以利用緩存而不損害關(guān)鍵數(shù)據(jù)。
緩存不是一個(gè)跨領(lǐng)域的問題,它滲入到您的應(yīng)用程序體系結(jié)構(gòu)中,并且需要一個(gè)經(jīng)過深思熟慮的計(jì)劃來補(bǔ)償數(shù)據(jù)完整性異常。
翻譯自: https://www.javacodegeeks.com/2015/04/things-to-consider-before-jumping-to-enterprise-caching.html
總結(jié)
以上是生活随笔為你收集整理的跳转到企业缓存之前要考虑的事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaOne 2015 –提交的技巧和
- 下一篇: 单元测试编写_为什么要编写单元测试-测试