6. WARMING-UP : CACHE 개념잡기
롱테일(LONG TAIL) 법칙
(출처 http://www.longtail.com)
의
20%의 요구가 시스템의 80%의 리소스를 점유한다는 법칙
의
데이터는 향상시킬 있다.
자주 사용되는 데이터는 Cache 사용으로 성능을 대폭 향상시킬 수 있다
7. WARMING-UP : CACHE 개념잡기
CACHE?
데이터를
평소 자주 사용되는 데이터를 저장해두는 임시 저장소
생성에 많은 비용이 필요한 정보를 저장해두는 임시 저장소
정보를
CPU L1, L2 Cache
Disk Cache
DNS Cache
Query Cache
8. WARMING-UP : CACHE 개념잡기
웹서비스 관점의 CACHE
웹 페이지 화면
Browser Cache
Apache Cache
DB 조회 결과
Ibatis Oscache
공유 메모리
Terracotta BigMemory
Static 자원
Ehcache
비싼 비용의 연산 결과
9. WARMING-UP : CACHE 개념잡기
LOCAL CACHE vs GLOBAL CACHE
Local Cache
로컬 장비 내에서만 사용되는 캐시
로컬 자원을 활용 (메모리, 디스크)
빠른 결과
다른 서버와 데이터 공유가 어려움
Global Cache
다수의 서버가 공유하는 캐시
데이터 분산 저장 (확장성)
로컬 캐시보다 느리다. (네트워크 트래픽)
데이터 공유가 상대적으로 쉬움
12. WARMING-UP : Ehcache 소개
EHCACHE
오픈소스 기반의 빠른 캐시 엔진
JSR107 JCache 표준 지원
경량의 간단한 Local Cache
메모리,
메모리 디스크)
다양한 확장 지원 (메모리 디스크
복제)
분산 캐시 지원 (동기 / 비동기 복제
동기
13. WARMING-UP : Ehcache 소개
ENTERPRISE DATA CACHE
(출처 http://www.ehcache.org)
가 를 있다.
기업에서 사용하는 시스템의 70%가 직간접적으로 Ehcache를 사용하고 있다
14. WARMING-UP : Ehcache 소개
JSR107 JCACHE 완벽지원
JCP (Java Community Process)
자바 표준을 정의하는 표준화 과정
JSR (Java Specification Requests)
자바 Spec을 기술하는 공식 문서
JSR107 JCACHE – Java Temporary Caching API
자바 Cache Spec
지원한다.
Ehcache는 JSR107 표준을 완벽하게 지원한다
는
15. WARMING-UP : Ehcache 소개
EHCACHE BUNDLING
(출처 http://www.ehcache.org)
직접 사용하는 형태가 아니라 번들 형태로 사용되는 경우
크다.
Hibernate에 의한 활용 비중이 가장 크다
에
16. WARMING-UP : Ehcache 소개
TERRACOTTA 서버
오픈소스 기반의 분산 객체 저장소
JVM 클러스터링 프레임워크
NAM (Natwork Attached Memory)
방지)
BigMemory (FullGC 방지
복제)
WAS 세션 클러스터링 (HttpSession 복제
Session Grid, Data Grid
17. WARMING-UP : Ehcache 소개
EHCACHE ENTERPRISE 서버
Ehcache 분산 캐시 기능 강화
Replication Cache
RMI Replicated Caching
JGroups Replicated Caching
JMS Replicated Caching
Distributed Cache
Terracotta Server Array
CacheManager Sharing
18. WARMING-UP : Ehcache 소개
LICENCE
Ehcache 배포판
Commercial Version
OpenSource Version
를 로
Ehcache를 Local Cache로
사용 할 경우 기능상의 차이
없음.
점은 없음
OpenSource 버전의 경우
Apache 2.0 License
19. WARMING-UP : Ehcache 소개
EHCACHE VERSION 별 비중
(출처 http://www.ehcache.org)
다양한 버전이 아직 많이 사용되고 있다 있다.
버전이다.
현재 최신 버전은 2012년 11월에 배포된 2.6.2 버전이다
년 월에
20. WARMING-UP : Ehcache 소개
RELEASE NOTE
2012. 11 : Ehcache 2.6.2 Released
2012. 04 : Ehcache 2.5.2 Released
2011. 11 : Ehcache 2.5 Released
2011. 05 : Terracotta Joins Software AG
2011. 04 : Ehcache 2.4.2 Released
2010. 11 : BigMemory for Ehcache GA
2009. 08 : Terracotta acquires Ehcache
28. Ehcache 활용하기 : 다양한 Architecture
STICKY SESSION
서버가 2대라 좋긴 한데
대라
하나의 서버에 장애가 발생하면
장애 서버의 Session 정보가
버리네?
전부 날라가 버리네
서버간에 Session 정보를
없을까?
공유할 수 없을까
29. Ehcache 활용하기 : 다양한 Architecture
SESSION CLUSTERING
Local
Session
Cache
서버(www1.test.com)
Session Clustering
(Replication)
Local
Session
Cache
L4
www.test.com 서버 (www2.test.com)
31. Ehcache 활용하기 : 다양한 Architecture
SESSION CLUSTERING
가 잘되네.
Business가 너무 잘되네
증가하는 사용자를 감당하기
힘들다. 늘리자.
힘들다 장비를 두 배로 늘리자
어라????
어라
장비를 두 배로 늘렸는데
성능은 더 떨어진 거 같아
같아.
문제지?
도대체 뭐가 문제지
32. Ehcache 활용하기 : 다양한 Architecture
WEB SESSION
Local
Session
Cache
서버(www1.test.com) Terracotta
Web Session
Server
Local
Session
Cache
L4
www.test.com 서버 (www2.test.com)
33. Ehcache 활용하기 : 다양한 Architecture
WEB SESSION
증가하네.
사용자가 계속 증가하네
늘리자.
장비를 더 늘리자
가만....
가만
이 걸까?
Session이 꼭 필요한 걸까
34. Ehcache 활용하기 : 다양한 Architecture
AUTHENTICATION COOKIE
Local
Cache
Cookie
서버(www1.test.com)
Cookie
Local
Cookie Cache
L4
www.test.com 서버 (www2.test.com)
35. Ehcache 활용하기 : 다양한 Architecture
AUTHENTICATION COOKIE
을
Session을 사용하지 않으니까
서버의 확장성은 좋은데
정보를 사용자 Cookie에
에
불안하네.
저장하니 불안하네
없을까?
다른 방법은 없을까
사용자 Unique한 정보는
한
어디에 저장해야 할까할까?
36. Ehcache 활용하기 : 다양한 Architecture
SSO + CACHE REPLICATION
Local
Cache
서버(www1.test.com)
Cache Replication
Local
Cache
L4
서버 (www2.test.com)
www.test.com
Single Sign On
Authentication
37. Ehcache 활용하기 : 다양한 Architecture
SSO + CACHE REPLICATION
를
Cookie를
사용하지 않아서 좋긴 한데
사용자 Unique한 정보를
한
실시간으로 복제하려니
엄청나네..
서버간의 트래픽이 엄청나네
를 도입해볼까?
Global Cache를 도입해볼까
38. Ehcache 활용하기 : 다양한 Architecture
GLOBAL CACHE
Local
Cache
서버(www1.test.com) Global
Cache
Local
Cache
L4
www.test.com 서버 (www2.test.com)
Single Sign On
Authentication
39. Ehcache 활용하기 : 다양한 Architecture
GLOBAL CACHE
사용자 인증은
Session대신에 SSO를 이용하고
대신에 를
사용자 Unique한 정보는
한
Global Cache에 저장하고
에
Static한 정보들은
한
Local Cache를 활용하니
를
좋아요.
너무 너무 좋아요 ^^
42. Ehcache 가이드 : 기본사용법
개요
라이브러리
ehcache-core-2.5.2.jar
환경설정 (ehcache.xml)
Cache 객체명, Data Size, 유효기간, 동기화 정책
CacheManager 생성
모든 Cache 객체를 관리한다.
Cache Operation
Cache 객체 로드
add(), get(), remove()
캐시 한다.”
“캐시 대상이 되는 모든 객체는 Serializable 되어야 한다
43. Ehcache 가이드 : 기본사용법
MAVEN 설정
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.5.2</version>
</dependency>
Local Cache 용도로만 사용 할 경우
등록하면 된다.
설정시 ehcache-core.jar 라이브러리만 등록하면 된다
45. Ehcache 가이드 : 기본사용법
환경설정 : 캐시 정책
maxElementsInMemory = “20000” // 저장될 객체의 최대수
eternal = “false” // 시간 설정 무시 옵션
timeToIdleSeconds = “600” // 설정된 시간 동안 Idle 상태시 갱신 (10분)
분
시간)
timeToLiveSeconds = “3600” // 설정된 시간 동안 유지 후 갱신 (1시간
시간
overflowToDisk = “false” // 메모리 부족시 디스크 저장 옵션
diskPersistent = “false” // 디스크 저장 사용 옵션
memoryStoreEvictionPolicy = “LRU” // 데이터 제거 알고리즘 옵션
statistics = “true” // JMX 통계정보 갱신 옵션
46. Ehcache 가이드 : 기본사용법
CacheManager 생성
모든 Cache 객체는 CacheManager에 의해서 관리
에
생성시에
CacheManager 생성시에 Singleton Mode와 Instance Mode
와
2가지 Mode를 지원
가지 를
// Singleton Mode
CacheManager.newInstance();
String[] cacheNames = manager.getCacheNames();
// Instance Mode
CacheManager manager1 =
CacheManager.newInstance("src/config/ehcache1.xml");
CacheManager manager2 =
CacheManager.newInstance("src/config/ehcache2.xml");
String[] cacheNamesForManager1 = manager1.getCacheNames();
String[] cacheNamesForManager2 = manager2.getCacheNames();
47. Ehcache 가이드 : 기본사용법
CACHE OPERATION
한다.
모든 Cache 객체는 Serializable 되어야 한다
만약 Serializable 되지 않은 객체가 디스크에 저장되면 정상적
으로 저장되지 않는다 않는다.
// Add, Get
CacheManager singletonManager = CacheManager.create();
singletonManager.addCache("testCache");
Cache test = singletonManager.getCache("testCache");
// Remove
CacheManager singletonManager = CacheManager.create();
singletonManager.removeCache("sampleCache1");
48. Ehcache 가이드 : 기본사용법
CACHE 관리정보 조회
있다.
사용중인 Cache 객체의 리소스 사용량을 구할 수 있다
제공한다.
다양한 통계 정보도 제공한다
Cache cache = manager.getCache("sampleCache1");
// 리소스 사용량
int elementsInMemory = cache.getSize();
long elementsInMemory = cache.getMemoryStoreSize();
long elementsInMemory = cache.getDiskStoreSize();
// 통계 정보
int hits = cache.getHitCount();
int hits = cache.getMemoryStoreHitCount();
int hits = cache.getDiskStoreCount();
int hits = cache.getMissCountNotFound();
int hits = cache.getMissCountExpired();
49. Ehcache 가이드 : SPRING 3.0
SPRING 3.0
Spring Framework 기반의 캐시 추상화 제공 (CacheManager)
Ehcache-Spring Integration을 이용한 Annotation 제공
을
(Google Project)
http://code.google.com/p/ehcache-spring-annotations/
이제 그만!
“이제 그만
을 사용합시다.”
고민하지 말고 이제부터는 Spring 3.1을 사용합시다
50. Ehcache 가이드 : SPRING 3.1
SPRING 3.1
기본적인 캐시 구현체 제공
JDK ConcurrentMap-based Cache
Ehcache-based Cache
Spring Framework 차원의 Annotation 제공
51. Ehcache 가이드 : SPRING 3.1
CONCURRENTMAP-BASED CACHE
에
JDK에 기본 포함된 ConcurrentMap을 이용하여 캐시
을
java.util.concurrent.ConcurrentMap
설정이 비교적 간단
기능이 단순
동기화가 필요없는 간단한 Cache 모델에 적합
52. Ehcache 가이드 : SPRING 3.1
EHCACHE-BASED CACHE
를
Ehache를 이용하여 캐시
StandAlone 캐시서버
Hibernate L2 Cache
나
JMX나 패킷을 이용한 데이터 동기화
Terracotta Server Array를 이용한 Distributed Cache 제공
를
RMI를 이용한 Replication 제공
를
53. Ehcache 가이드 : SPRING 3.1
CACHE ANNOTATION
@Cacheable
@CacheEvict
캐시 설정을 위한 SpEL 제공
Custom Annotation 사용가능
54. Ehcache 가이드 : SPRING 3.1
CACHE ANNOTATION
@Cacheable(value="sampleCache", key="#boardId")
public List<Board> findBoardList(String boardId) {
return boardRepository.selectBoardList(boardId);
}
@CacheEvict(value="sampleCache", key="#boardId")
public void editBoard(Board board) {
boardRepository.updateBoard(board);
}
56. Ehcache 가이드 : Cache 동기화
캐시 동기화 방식
의
Ehcache의 경우 데이터 복제를 위한 3가지 방식을 지원
가지
RMI 방식
자바에서 기본적으로 제공하는 RMI를 사용
검증된 안전한 기술
JGroups 방식
UDP 기반의 라이브러리
JBoss Session Clustering
JMS 방식
JMS 메시지를 이용하여 데이터 동기화
59. Ehcache 가이드 : Cache 동기화
환경설정 : NODE 식별 정책 (RMI 방식)
CacheManagerPeerProvider
Node 식별을 위해 필요한 설정
RMICacheManagerPeerProviderFactory 제공
CacheManagerPeerListener
데이터 수신을 위해 필요한 설정
RMICacheManagerPeerListenerFactory 제공
CacheEventLisenver
각 Cache 별로 동기화 방식 설정
60. Ehcache 가이드 : Cache 동기화
환경설정 : NODE 식별 정책 (RMI 방식)
있다.
Node 식별을 위해 UDP 방식이나 TCP 방식을 선택할 수 있다
UDP 방식
peerDiscovery = automatic
Node 추가시 설정파일의 변경이 필요없다.
네트워크에서 멀티캐스트를 허용해야 한다.
TCP 방식
peerDiscovery = manual
Node 추가시 설정파일의 변경이 필요하다.