<mark id="5z1b5"><cite id="5z1b5"></cite></mark>

        <video id="5z1b5"></video>
          <noframes id="5z1b5"><ins id="5z1b5"></ins>

            <em id="5z1b5"></em>

            <dl id="5z1b5"><ins id="5z1b5"></ins></dl>

              內存緩存(in-memory cache)

                當建立一個大型Java應用時,引起性能問題大部分是延遲,延遲是指請求和響應之間的時間差,在一個分布式Java系統中引起延遲的原因有:

              1. 從磁盤上加裝數據的IO延遲
              2. 跨網絡加裝數據的IO延遲。
              3. 在分布式鎖上的資源爭奪。
              4. 垃圾回收引起的暫停。

                典型Ping時間是:本地機器是57μs;局域網是300 μs;從倫敦到紐約是100ms;對于1Gb網絡,網絡數據傳輸是每秒25MB – 30MB。對于10GB網絡是每秒250MB – 350MB。使用SATA 3.0接口的SSD硬盤數據傳輸是每秒500-600MB。如果你有1G以上數據需要處理,磁盤延遲會嚴重影響應用性能。

                硬件上最低延遲是內存,典型的內存緩存是每秒3-5 GB,能夠隨著CPU擴展。如果你有兩個處理器,你就能每秒10GB,如果有4CPU就能獲得 20GB. 有一個內存基準測試稱為STREAM (http://www.cs.virginia.edu/stream/) 是測試許多計算機的內存吞吐量,一些在大量CPU幫助下能夠實現每秒TB級別的吞吐量。

              因此可以總結如下:

              • 內存是快的: 為了高性能,你需要在內存中處理數據。
              • 網絡是慢的: 通過網絡傳輸數據會嚴重影響性能,包括數據庫連接池。

                在許多應用中,應用的快速性能與數據實時更新需要尋找一個平衡點,有時你需要大膽地使用緩存,但是你可能會發現有舊臟數據現象發生,當然可以再抓取更新數據,但是可能會犧牲一些性能,你能,你可以魚和熊掌兼得,那么就要花費購買更多硬件,增加軟件的復雜性。

                內存緩存原來作用是提高數據庫訪問性能。但是緩存不是數據庫遮羞布,架構上緩存引入有著重要意義:狀態對象:數據庫的替代者

                緩存實際是內存,將狀態置于內存而不是數據庫,不但性能提升,還提高軟件的可伸縮性和擴展性,直至輕松發展為分布式系統或云計算,這種緩存稱為內存緩存(in-memory cache)或稱 數據網格In-Memory-Data-Grid (IMDG);Java EE 7引入分布式 彈性緩存Elastic Caching ,作為其云核心戰略的一部分。 云計算是一種計算和存儲分離的模型,云計算本質是分布式可伸縮的內存計算,可見Amazon彈性緩存介紹

                當我們將DDD領域模型加載到內存中以后,我們就不再面向關系數據庫中數據表編程,而是真正直接面向模型對象編程。Java內存模型優點:基于內存的并發模型,多線程機制,大量線程安全型庫包支持 基于內存的并發機制,粒度靈活控制,靈活度高于數據庫鎖。 多核并行計算模型 基于線程的異步模型(Domain Events)。

                Twitter從Ruby轉向JAVA的實踐證明:Cache緩存 + JVM微調是Java/JVM的核心競爭力,這也是最容易被我們忽視的,因為很多使用Java系統(包括Spring + Hibernate)只是當作SQL語句的包裝器來使用,負載主要集中在數據庫上,根本不會使用In-memory Cache。

                Jdon認為對象緩存恰好是領域模型和Java內存模型之間的銜接物,通過引入緩存,將領域模型落實到計算機平臺上,如下圖,基于此理念JdonFramework特點就是DDD + Cache,而Spring 3才剛剛加入緩存,兩種框架相比可見關鍵性方向的不同:

              cache

              相關文章和教程:

              性能優化的首要法則

              Web緩存教程

              數據庫緩存幾種方式

              可擴展伸縮架構中的狀態

              為什么計算科學中最難的兩件事是命名和緩存失效

              Netflix的EVCache緩存分布式復制架構

              為什么要使用數據網格Data Grid

              數據網格介紹

              Hazelcast入門教程

              Redis Cluster快速安裝指南

              12306鐵路售票系統核心開源中間件Geode介紹

              分布式緩存介紹

              內存領域對象+事件驅動 = 量身定制的高并發架構

              Martin Fowler推薦的領域模型in-memory架構:LMAX架構

              12306火車票訂票系統的伸縮擴展

              結合Java內存模型和領域模型的開源框架JdonFramework

              Avanza銀行非推倒重來式的讀/寫伸縮擴展

              Red Hat為Java EE 7提交新的緩存規范標準

              Spring 3.1 終于加入了Cache支持

              ddd之ehcache和no ddd 之memcached擴展性的比較

              使用Varnish加速Web性能

              Http緩存Last-Modified、ETag和Expires的Java終結解決之道

              關于緩存的思考

              重用Session提高https性能

              Cache-Control: immutable

              數據庫也可以像電腦一樣組裝:使用Kafka建立關系數據庫 – Robert Yokota

               

              更多緩存Cache專題

              Redis

              Redis安裝

              使用Spring Data + Redis實現緩存

              基于Spring+redis實現pub/sub

              apache camel和 redis

              Redis Cluster快速安裝指南

              介紹Redis數據結構set

              介紹Redis數據結構hash

              Redis專題

              相關專題

              性能專題

              對象生命周期專題討論

              內存泄漏

              集群(cluster)

              數據網格

               

               

              美女漫画大全