2011-04-19 4 views
6

다른 호스트에서 실행되는 두 개의 tomcat 웹 앱간에 캐시를 공유하는 솔루션을 찾고 있습니다. 캐시는 데이터 동기화에 사용되므로 캐시는 두 개의 tomcat 인스턴스 사이에서 항상 최신 상태로 유지되어야합니다. (죄송 합니다만,이 요구 사항에 대한 올바른 용어가 "일관성"또는 ACID 속성과 같이 더 구체적인 경우 100 % 확신 할 수 없습니다.) 또 다른 요구 사항은 물론 읽기와 거의 동일한 수의 쓰기로 캐시에 액세스하는 것이 빠르다는 것입니다. 공유 파일 시스템에 액세스 할 수 있으므로 고려해야합니다.Tomcat 웹 앱 간의 공유 캐시

나는 ehcache와 비슷한 것을 보았지만 webapps 사이에서 공유 캐시를 얻으려면 테라코타 환경 위에 구현하거나 새로운 ehcache 캐시 서버를 사용해야합니다. 전 (테라코타)은 캐시 웹 서버가 원하는 빠른 성능을 제공하지 못하는 것처럼 보이지만 과장된 것처럼 보입니다.

제가 살펴본 또 다른 해결책은 Redis 또는 memcachedb와 같은 빠른 키 - 값 저장소 위에 간단한 것을 구축하는 것입니다. Redis는 메모리에 있지만 중앙 집중식 캐시로 쉽게 구성 할 수 있지만 memcachedb는 공유 파일 시스템을 가지고 있기 때문에 작동 할 수있는 디스크 기반 영구 캐시입니다.

이 문제를 가장 잘 해결하는 방법에 대한 제안을 찾고 있습니다. 프로덕션 환경에서 사용되기 때문에 솔루션은 상대적으로 성숙한 기술이어야합니다.

미리 감사드립니다.

+0

캐시를 "항상 최신 상태로 유지하는 데 필요한 정보"에 대해 자세히 설명 할 수 있습니다. 이를 보장하는 유일한 방법은 캐시 항목이 사용 중일 때 잠그는 것인데, 이는 실제로 캐시가 아님을 의미합니다. zookeeper를 동기화 요구 사항에 사용할 수 있고 memcache를 캐시로 사용할 수 있지만 필요에 따라 다릅니다. – sbridges

+0

캐시가 바람둥이 앞이나 뒤에 있습니까? 즉 출력 또는 입력을 캐시해야합니까? –

+0

기본적으로 달성하고자하는 것은 분산 Tomcat 응용 프로그램의 DB 수준에서 스레드 안전입니다. 하지만 데이터베이스 잠금이나 테이블 수준 잠금을 사용하고 싶지는 않습니다. 따라서 "레코드 수준"잠금 메커니즘을 구현하려고 시도했으며 여러 Tomcat 인스턴스에서 작동하려면 잠금 메커니즘이 모든 인스턴스에서 액세스 할 수 있어야합니다. 따라서 공유 "캐시"가 마음에 들었습니다. 또한 올바른 용어가 아니기 때문에 따옴표로 묶어야합니다. – cambo

답변

4

분산 캐시가 필요한 경우 테라코타 또는 ehcache 서버가 필요하지 않습니다. four replication mechanisms 중 하나가 포함 된 Ehcache를 사용하면됩니다.

그러나 필자가 작성한 내용을 토대로 캐시 이외의 다른 것을 찾고 있다고 생각합니다. Memcached/Ehcache는 응용 프로그램에 대한 캐싱 계층과 같은 것일 수 있습니다.

'보장', '최신' 'ACID'와 같은 단어를 사용하는 경우 Oracle Times Ten/MySQL Cluster/Redis와 같은 메모리 내장 DB를 디스크 기반 영구 저장 저장.

+0

이것은 사실 우리가 함께 간행 한 것인데, 영구 기억 장치가있는 빠른 키/값 저장소로 보완 할 수있는 메모리 내장 데이터베이스 테이블입니다. – cambo

3

신속하고 효율적인 캐싱을 위해 memcached (memcachedb 아님)을 사용할 수 있습니다. Redis 또는 memcachedb는 영구 캐싱을 원하지 않는 한 과도 할 수 있습니다. Memcached는 매우 쉽게 클러스터 될 수 있으며 spymemcached java 클라이언트를 사용하여 액세스 할 수 있습니다. Memcacached는 매우 성숙하며 수백만 개의 프로덕션 서버가 아니라면 수십만 개의 서버로 실행됩니다. 생산시 Nagios 및 Munin 시스템을 통해 모니터링 할 수 있습니다.