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