2010-06-20 3 views
6

타사 웹 서비스의 백엔드 사용을위한 Java 웹 앱이 있습니다. 웹 서비스를 호출하면 대기 시간이 발생하며 가능할 때마다이를 피하는 것이 중요합니다. 또한, 내 응용 프로그램은 하루에 특정 수의 웹 서비스 호출 만 허용되므로 절대적으로 필요하지 않으면 웹 서비스 호출을하지 않는 것이 가장 좋습니다.RAM과 디스크를 모두 사용하는 memcached와 같은 키/값 캐시

현재 나의 솔루션은 Memcached에 웹 서비스 결과를 캐시하는 것이며, 이는 잘 작동합니다. 기본적으로 우리는 RAM을 활용하여 웹 서비스 결과를 캐시합니다.

그러나 우리는 이것을 다음 단계로 가져 가고 싶습니다. 또한 웹 서비스 결과 캐싱을 위해 디스크 캐시로 사용하려는 디스크 공간도 있습니다. 나는 먼저 RAM 캐시 (Memcached 일 수 있지만 반드시있을 필요는 없음)를 확인하는 시스템을 원합니다. RAM 캐시 미스가 발생하면 디스크 캐시 검사로 넘어갑니다. 그리고 디스크 캐쉬 미스가 발생하면 웹 서비스 호출로 넘어갑니다. 새로운 웹 서비스 결과를 검색 할 때마다 RAM 캐시와 디스크 캐시를 모두 업데이트합니다.

하나의 가능성은 저장 용으로 디스크를 사용하는 시스템 조각으로 SQL 데이터베이스를 사용하는 것입니다. 그러나 이것은 이상적인 것 같지 않습니다. 데이터베이스는 베이비 시터를 많이 필요로하는 경향이 있습니다. 이들은 종종 바인딩없이 확장되는 파일 (db 자체 또는 트랜잭션 로그)을 포함하므로 이러한 증가하는 파일로 인해 파일 시스템의 공간이 부족해지면 어떻게되는지 관리해야합니다.

시스템의 디스크 기반 부분에 대해 내가 원하는 것은 사용할 디스크 공간의 양을 알려주고 그 이상을 사용하지 못하도록 보장합니다. 그리고 공간이 부족하면 가장 최근에 사용되지 않은 키 - 값 쌍을 버리기 시작합니다. 확실히 ACID가 필요하지 않으므로 트랜잭션 로그가 없어야합니다.

그래서 내가 찾고 있어요 중 하나 1) Memcached가가 캐시 미스 또는 2) Memcached가와를 대체 할 단일 시스템을 가지고있는 "장애"의 역할을 할 수있는 디스크 기반의 키 - 값 저장 시스템을 RAM 캐시와 디스크 캐시를 모두 제공하십시오.

기타 중요한 자질 : 1) Memcached와 마찬가지로, 베이비 시팅을 필요로하지 않는 캐싱 시스템이 필요합니다. 2) Memcached와 마찬가지로 캐시를 여러 서버에 분산시키고 각각의 개체를 정확하게 하나의 서버에 보관해야합니다. 3) Memcached와 마찬가지로 플러그를 꽂고 사용하기가 쉽습니다. 나는이 코드를 작동시키기 위해서 엄청난 양의 코드를 작성하고 싶지 않다.

이미 살펴본 시스템 : 1) 디스크 캐시가 RAM에있는 것을 미러링하기 때문에 Redis는 여기에 적합하지 않다고 생각합니다. RAM 캐시를 디스크 캐시의 작은 하위 집합으로 원합니다. 2) EhCache에는 "VM 재시작 사이의 데이터를 저장하는 영구 디스크 저장소"가 있지만 위에서 설명한 내용과 유사하지는 않습니다.

아파치 JCS (Java Caching System)가 적합 할 것 같아서 사용 해본 사람들로부터 의견을 듣고 싶습니다.

답변

5

RAM/DISK 기반 캐싱에 ehcache을 사용했는데 정상적으로 작동했습니다. 메모리에 유지할 개체 수와 디스크에 보관할 개체 수를 결정하는 정확한 구성은 코드 변경없이 코드 외부에서 수행 할 수 있습니다. 말할 게 많지 않습니다. 캐시이고 정상적으로 작동합니다.

원격 데이터베이스에서 가져 오기를 피하기 위해 wafermaps를 저장하는 데 사용했습니다. 필자는 디스크 캐시를 응용 프로그램 서버 근처에서 여러 달 동안 유지할 수 있도록 크기를 조정하여 특히 긴급한 재 작업을해야 할 때 상당한 시간을 절약했습니다.

+1

고마워. 이것은 제가 찾고있는 해결책이 될 수 있습니다. 이제 DiskStore를 구성하고 maxElementsOnDisk 매개 변수를 지정할 수 있습니다. –

0

MemcacheDB가 귀하가 찾고있는 해답 일 수 있습니다. Reddit은 "permacache"를 위해 그것을 사용합니다.

+0

Reddit 실제로 Cassandra에 대한 memcachedb 떨어졌다 : http://blog.reddit.com/2010/03/she-who-entangles-men.html –

0

Cassandra이 필요합니다. 메모리와 디스크 모두에 저장할 수있는 12 가지 이상의 NoSQL 솔루션이 있습니다. 그들 중 누구라도 카산드라와 같이 전투 테스트를 받았다면 거의 없습니다. 프로덕션에서 사용되는 페이스 북, reddit, digg 등에서 사용됩니다.

0

Redis를 사용하면 모든 memcache 작업을 지원하며 데이터를 디스크에 저장하므로 작업이 빨라집니다. 카산드라에서 읽기가 느려지므로 그렇게하지 않을 것입니다.

-1

a 옵션이 될 오징어 수 있을까요? 그것은 RAM과 디스크에 웹 결과를 cahces