타사 웹 서비스의 백엔드 사용을위한 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)가 적합 할 것 같아서 사용 해본 사람들로부터 의견을 듣고 싶습니다.
고마워. 이것은 제가 찾고있는 해결책이 될 수 있습니다. 이제 DiskStore를 구성하고 maxElementsOnDisk 매개 변수를 지정할 수 있습니다. –