內存緩存(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)

數據網格

 

 

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片