22.3. Infinispan
22.3.1. Infinispan 정보 링크 복사링크가 클립보드에 복사되었습니다!
Infinispan은 캐시된 데이터를 관리하기 위한 Jakarta Persistence 2.2호환 캐시 인터페이스를 제공하는 Java 데이터 그리드 플랫폼입니다.
Infinispan 기능 및 구성 옵션에 대한 자세한 내용은 Infinispan 설명서 를 참조하십시오.
infinispan
하위 시스템은 JBoss EAP에 대한 캐싱 지원을 제공합니다. 이를 통해 이름이 지정된 캐시 컨테이너 및 캐시에 대한 런타임 지표를 구성하고 볼 수 있습니다.
관리형 도메인의 ha 또는 full-ha 프로필 또는 독립 실행형 서버의 standalone-ha.xml
또는 standalone-full-ha.xml
구성 파일과 같은 고가용성 기능을 제공하는 구성을 사용하는 경우 infinispan
하위 시스템은 캐싱, 상태 복제 및 상태 배포 지원을 제공합니다. 고가용성이 아닌 구성에서 infinispan
하위 시스템은 로컬 캐싱 지원을 제공합니다.
Infinispan은 JBoss EAP 8.0의 공개 모듈입니다. 애플리케이션에 infinispan
하위 시스템을 사용하여 새 cache-containers 또는 캐시를 생성하고 사용할 수 있습니다. 또한 Infinispan API의 사용은 애플리케이션에서 지원합니다.
22.3.2. 컨테이너 캐시 링크 복사링크가 클립보드에 복사되었습니다!
캐시 컨테이너는 하위 시스템에서 사용하는 캐시의 리포지토리입니다. 각 캐시 컨테이너는 사용할 기본 캐시를 정의합니다.
JBoss EAP 8.0은 다음과 같은 기본 Infinispan 캐시 컨테이너를 정의합니다.
-
Singleton 캐싱을 위한
서버
-
웹
세션 클러스터링을 위한 웹 -
상태 저장 세션 빈 클러스터링을 위한 binary
-
엔티티 캐싱을 위한
Hibernate
예: 기본 Infinispan 구성
각 캐시 컨테이너에 정의된 기본 캐시를 확인합니다. 예를 들어 웹
캐시 컨테이너는 dist
distributed cache를 기본값으로 정의합니다. 따라서 웹 세션을 클러스터링할 때 dist
캐시가 사용됩니다.
기본 캐시 변경 및 추가 캐시 추가에 대한 정보는 캐시 컨테이너 구성을 참조하십시오.
22.3.2.1. 캐시 컨테이너 구성 링크 복사링크가 클립보드에 복사되었습니다!
캐시 컨테이너 및 캐시 속성은 관리 콘솔 또는 관리 CLI를 사용하여 구성할 수 있습니다.
구성의 다른 구성 요소가 참조할 수 있으므로 캐시 또는 캐시 컨테이너 이름을 변경하지 않아야 합니다.
22.3.2.1.1. 관리 콘솔을 사용하여 캐시 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리 콘솔의 Configuration 탭에서 Infinispan 하위 시스템으로 이동하면 캐시 및 캐시 컨테이너를 구성할 수 있습니다. 관리형 도메인에서 구성할 적절한 프로필을 선택해야 합니다.
캐시 컨테이너를 추가합니다.
캐시 컨테이너 제목 옆에 있는 Add (+) 버튼을 클릭하고 캐시 컨테이너 추가 를 선택한 다음 새 캐시 컨테이너 설정을 입력합니다.
캐시 컨테이너 설정을 업데이트합니다.
적절한 캐시 컨테이너를 선택하고 View 를 클릭합니다. 필요에 따라 캐시 컨테이너 설정을 구성합니다.
캐시 컨테이너 전송 설정을 업데이트합니다.
적절한 캐시 컨테이너를 선택하고 View 를 클릭합니다. 전송 탭을 선택하고 필요에 따라 캐시 컨테이너 전송 설정을 구성합니다.
캐시 구성.
적절한 캐시 컨테이너를 선택하고 View 를 클릭합니다. 적절한 캐시 탭에서(예: 복제된 캐시)에서 캐시 를 추가, 업데이트 및 제거할 수 있습니다.
22.3.2.1.2. 관리 CLI를 사용하여 캐시 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리 CLI를 사용하여 캐시 및 캐시 컨테이너를 구성할 수 있습니다. 관리형 도메인에서 이러한 명령 앞에 /profile=PROFILE_NAME
을 사용하여 업데이트할 프로필을 지정해야 합니다.
캐시 컨테이너를 추가합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER:add
/subsystem=infinispan/cache-container=CACHE_CONTAINER:add
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 복제된 캐시를 추가합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE:add(mode=MODE)
/subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE:add(mode=MODE)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 캐시 컨테이너의 기본 캐시를 설정합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=default-cache,value=CACHE)
/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=default-cache,value=CACHE)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 복제된 캐시에 대한 일괄 처리를 구성합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE/component=transaction:write-attribute(name=mode,value=BATCH)
/subsystem=infinispan/cache-container=CACHE_CONTAINER/replicated-cache=CACHE/component=transaction:write-attribute(name=mode,value=BATCH)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 다음과 같은 서버 구성이 생성됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.2.1.3. 기본 자카르타 Enterprise Cryostat 캐시 컨테이너 변경 링크 복사링크가 클립보드에 복사되었습니다!
아래 설명된 대로 Cryostat 3
하위 시스템에서 캐시 컨테이너를 사용할 수 있습니다.
-
Jakarta Enterprise Cryostats 세션 빈의 비활성화를 지원하려면
infinispan
하위 시스템에 정의된 Cryostat 캐시 컨테이너를 사용하여 세션을 저장할 수 있습니다. - 서버에서 클러스터형 배포에 연결하는 원격 Jakarta Enterprise Cryostat 클라이언트의 경우 상호 작용하는 노드가 실패하는 경우 클러스터 토폴로지 정보를 이러한 클라이언트에 제공해야 클러스터의 다른 노드로 장애 조치될 수 있습니다.
22.3.2.1.4. Infinispan 하위 시스템에서 리소스를 Jakarta EE 애플리케이션에 삽입 링크 복사링크가 클립보드에 복사되었습니다!
@Resource
주석을 사용하여 Infinispan 하위 시스템에서 애플리케이션에 캐시와 같은 Infinispan 리소스를 삽입할 수 있습니다. 다음 예제에서는 @Resource
주석을 사용하여 Jakarta EE 애플리케이션에 캐시를 삽입하는 방법을 보여줍니다.
@Resource(lookup = "java:jboss/infinispan/cache/foo/bar") private org.infinispan.Cache<Integer, Object> cache;
@Resource(lookup = "java:jboss/infinispan/cache/foo/bar")
private org.infinispan.Cache<Integer, Object> cache;
위의 예에서 foo
는 캐시 컨테이너의 이름이며 bar
는 삽입할 캐시의 이름입니다.
EAP는 삽입된 리소스의 라이프사이클을 관리합니다. 즉, 애플리케이션은 캐시 또는 캐시 관리자와 같은 해당 리소스를 관리할 필요가 없습니다.
리소스를 수동으로 생성할 때 애플리케이션은 EAP가 아닌 해당 리소스를 관리합니다.
다음 예제에서는 Infinispan 하위 시스템의 다양한 리소스를 애플리케이션에 삽입하는 방법을 보여줍니다.
기본 캐시 삽입 예
Infinispan 하위 시스템의 캐시 컨테이너의 기본 캐시를 애플리케이션에 삽입하려면 다음 명령을 사용합니다.
@Resource(lookup = "java:jboss/infinispan/cache/foo/default")
@Resource(lookup = "java:jboss/infinispan/cache/foo/default")
임베디드 캐시 관리자 삽입 예
애플리케이션이 새 캐시 구성 및 캐시를 생성할 수 있도록 포함된 캐시 관리자를 삽입하려면 다음 명령을 사용합니다.
@Resource(lookup = "java:jboss/infinispan/container/foo") private org.infinispan.manager.EmbeddedCacheManager manager;
@Resource(lookup = "java:jboss/infinispan/container/foo")
private org.infinispan.manager.EmbeddedCacheManager manager;
캐시 구성 삽입 예
Infinispan 하위 시스템 내에 정의된 모든 캐시 구성은 애플리케이션이 해당 캐시 구성에 명시적으로 종속되지 않는 한 항상 설치하거나 사용할 수 있는 것은 아닙니다. Infinispan 하위 시스템에서 캐시 구성을 애플리케이션에 삽입하려면 @Resource
주석을 사용합니다.
다음 예제에서는
@Resource
주석을 사용하여foo
컨테이너의 캐시 구성을 삽입합니다.@Resource(lookup = "java:jboss/infinispan/configuration/foo/bar") private org.infinispan.config.Configuration config;
@Resource(lookup = "java:jboss/infinispan/configuration/foo/bar") private org.infinispan.config.Configuration config;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제에서는
@Resource
주석을 사용하여foo
컨테이너의 기본 캐시 구성을 삽입합니다.@Resource(lookup = "java:jboss/infinispan/configuration/foo/default") private org.infinispan.config.Configuration config;
@Resource(lookup = "java:jboss/infinispan/configuration/foo/default") private org.infinispan.config.Configuration config;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.2.1.5. Hibernate 캐시 컨테이너의 제거 기능 링크 복사링크가 클립보드에 복사되었습니다!
hibernate
캐시 컨테이너의 제거 기능은 메모리에서 캐시 항목을 제거합니다. 이 기능은 하위 시스템의 메모리 부하를 줄이는 데 도움이 됩니다.
size
속성은 캐시 항목 제거가 시작되기 전에 저장할 최대 캐시 항목 수를 설정합니다.
예: 제거 기능
<cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan"> <transport lock-timeout="60000"/> <local-cache name="local-query"> <object-memory size="1000"/> <expiration max-idle="100000"/>
<cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan">
<transport lock-timeout="60000"/>
<local-cache name="local-query">
<object-memory size="1000"/>
<expiration max-idle="100000"/>
제거는 메모리 내에서만 발생합니다. 캐시 저장소에는 영구적으로 정보가 손실되지 않도록 제거된 캐시 항목이 있습니다. 제거 기능에 대한 자세한 내용은 Infinispan 사용자 가이드의 Eviction 및 Data Container 섹션을 참조하십시오.
22.3.2.1.6. Hibernate 캐시 컨테이너의 만료 기능 링크 복사링크가 클립보드에 복사되었습니다!
hibernate
캐시 컨테이너의 만료 기능은 클러스터형 작업이므로 클러스터형 캐시를 사용하면 모든 클러스터 멤버에서 만료된 캐시 항목이 제거됩니다. 자세한 내용은 Infinispan 사용자 가이드의 만료 섹션을 참조하십시오.
22.3.3. 클러스터링 모드 링크 복사링크가 클립보드에 복사되었습니다!
클러스터링은 Infinispan을 사용하여 JBoss EAP에서 두 가지 방법으로 구성할 수 있습니다. 애플리케이션에 가장 적합한 방법은 요구 사항에 따라 다릅니다. 각 모드에서는 가용성, 일관성, 안정성 및 확장성 간에 절충이 있습니다. 클러스터링 모드를 선택하기 전에 네트워크에서 가장 중요한 기능을 식별하고 이러한 요구 사항을 균형 있게 조정해야 합니다.
캐시 모드
- 복제
- 복제 모드에서는 클러스터에서 새 인스턴스를 자동으로 감지하고 추가합니다. 이러한 인스턴스에 대한 변경 사항은 클러스터의 모든 노드에 복제됩니다. 일반적으로 복제 모드는 네트워크를 통해 복제해야 하는 정보의 양 때문에 소규모 클러스터에서 가장 잘 작동합니다. Infinispan은 UDP 멀티 캐스트를 사용하도록 구성할 수 있으므로 네트워크 트래픽 혼잡을 어느 정도 완화합니다.
- 콘텐츠 배포
배포 모드를 사용하면 Infinispan이 클러스터를 선형으로 확장할 수 있습니다. 배포 모드는 일관된 해시 알고리즘을 사용하여 클러스터에서 새 노드를 배치해야 하는 위치를 결정합니다. 보관해야 하는 사본 또는 소유자 수를 구성할 수 있습니다. 보존된 복사본 수, 데이터의 지속성 및 성능 간의 절충이 있습니다. 유지되는 복사본이 많을수록 성능에 더 많은 영향을 미치지만 서버 장애 시 데이터가 손실될 가능성이 적습니다. 또한 해시 알고리즘은 메타데이터 멀티 캐스트 또는 저장 없이 항목을 찾아 네트워크 트래픽을 줄이기 위해 작동합니다.
클러스터 크기가 6-8 노드를 초과하면 배포 모드를 캐싱 전략으로 사용해야 합니다. 배포 모드에서는 모든 노드와 달리 데이터가 클러스터 내의 노드 하위 집합에만 배포됩니다.
22.3.3.1. 캐시 모드 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리 CLI를 사용하여 기본 캐시를 변경할 수 있습니다.
이 섹션에서는 기본적으로 배포 모드로 설정된 웹 세션 캐시 구성과 관련된 지침을 보여줍니다. 단계 및 관리 CLI 명령은 다른 캐시 컨테이너에 적용되도록 쉽게 조정할 수 있습니다.
복제 캐시 모드로 변경
웹 세션 캐시에 대한 기본 JBoss EAP 8.0 구성에는 복제 캐시 가
포함되지 않습니다. 이 캐시를 먼저 추가해야 합니다.
아래 관리 CLI 명령은 독립 실행형 서버에 대한 것입니다. 관리형 도메인에서 실행하는 경우 /subsystem=infinispan
명령 앞에 /profile=PROFILE_NAME
을 추가하여 업데이트할 프로필을 지정해야 합니다.
repl
복제 캐시를 추가하고 기본 캐시로 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버를 다시 로드합니다.
reload
reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
배포 캐시 모드로 변경
웹 세션 캐시에 대한 기본 JBoss EAP 8.0 구성에는 이미 dist
배포 캐시가 포함되어 있습니다.
아래 관리 CLI 명령은 독립 실행형 서버에 대한 것입니다. 관리형 도메인에서 실행하는 경우 /subsystem=infinispan
명령 앞에 /profile=PROFILE_NAME
을 추가하여 업데이트할 프로필을 지정해야 합니다.
기본 캐시를
dist
배포 캐시로 변경합니다./subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
/subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포 캐시의 소유자 수를 설정합니다. 다음 명령은
5
명의 소유자를 설정합니다. 기본값은2
입니다./subsystem=infinispan/cache-container=web/distributed-cache=dist:write-attribute(name=owners,value=5)
/subsystem=infinispan/cache-container=web/distributed-cache=dist:write-attribute(name=owners,value=5)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버를 다시 로드합니다.
reload
reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.3.2. 캐시 전략 성능 링크 복사링크가 클립보드에 복사되었습니다!
SYNC
캐싱 전략을 사용하는 경우 복제 비용이 복제가 완료될 때까지 요청이 완료되지 않기 때문에 응답 시간에 쉽게 측정하고 직접 확인할 수 있습니다.
ASYNC
캐싱 전략으로 SYNC
캐싱 전략보다 응답 시간이 짧아야 하지만 올바른 조건에서만 마찬가지입니다. ASYNC
캐싱 전략은 측정하기가 더 어렵지만 요청 사이의 기간이 캐시 작업을 완료하기에 충분한 기간인 경우 SYNC
전략보다 성능이 향상될 수 있습니다. 이는 복제 비용이 응답 시간에 즉시 표시되지 않기 때문입니다.
동일한 세션에 대한 요청이 너무 빨리 수행되면 이전 요청의 복제 비용이 이전 요청에서 복제가 완료될 때까지 대기해야 하므로 이후 요청 앞쪽으로 이동합니다. 응답이 수신된 직후에 후속 요청이 전송되는 빠른 실행 요청의 경우 ASYNC
캐싱 전략이 SYNC
캐싱 전략보다 성능이 저하됩니다. 결과적으로 SYNC 캐싱 전략이 실제로 A
캐싱 전략보다 더 나은 동일한 세션에 대한 요청 사이에 임계값이 있습니다. 실제 사용에서 동일한 세션에 대한 요청은 일반적으로 빠른 연속으로 수신되지 않습니다. 대신 요청 사이에 일반적으로 몇 초 이상의 시간 간격이 있습니다. 이 경우 SYNC
ASYNC
캐싱 전략은 합리적인 기본값이며 가장 빠른 응답 시간을 제공합니다.
22.3.4. 상태 전송 링크 복사링크가 클립보드에 복사되었습니다!
상태 전송은 기본 데이터 그리드와 클러스터형 캐시 기능입니다. 상태를 전송하지 않으면 클러스터에 노드를 추가하거나 클러스터에서 제거해도 데이터가 손실됩니다.
상태 전송은 캐시 멤버십 변경에 대한 응답으로 캐시의 내부 상태를 조정합니다. 이 변경 사항은 노드가 클러스터에 참여하거나 떠나거나 두 개 이상의 클러스터 파티션이 병합될 때 또는 이러한 이벤트의 조합 후에 자동으로 발생합니다. 새로 시작된 캐시의 초기 상태 전송은 아래에 설명된 캐시 모드를 기반으로 새 캐시의 최대 상태를 받아야 하므로 비용이 가장 많이 듭니다.
timeout
속성을 사용하여 새로 시작된 캐시가 해당 상태를 수신 대기하는 시간을 제어할 수 있습니다. timeout
특성이 양수인 경우 캐시는 서비스 요청에 사용할 수 있을 때까지 모든 초기 상태를 수신할 때까지 기다립니다. 지정된 시간 내에 상태 전송이 완료되지 않으면 기본값은 240000
밀리초이며 캐시는 오류를 발생시키고 시작을 취소합니다. 시간 초과
가 0
으로 설정된 경우 캐시를 즉시 사용할 수 있으며 백그라운드 작업 중에 초기 상태를 수신합니다. 초기 상태 전송이 완료될 때까지 캐시가 아직 수신되지 않은 캐시 항목에 대한 모든 요청을 원격 노드에서 가져와야 합니다.
다음 명령을 사용하여 timeout
속성을 0
으로 설정할 수 있습니다.
/subsystem=infinispan/cache-container=server/CACHE_TYPE=CACHE/component=state-transfer:write-attribute(name=timeout,value=0)
/subsystem=infinispan/cache-container=server/CACHE_TYPE=CACHE/component=state-transfer:write-attribute(name=timeout,value=0)
상태 전송 동작은 캐시 모드에 따라 결정됩니다.
- 복제 모드에서는 캐시에 참여하는 새 노드가 기존 노드에서 전체 캐시 상태를 수신합니다. 노드가 클러스터를 떠나면 상태 전송이 없습니다.
-
배포 모드에서는 새 노드는 기존 노드에서 상태의 일부만 수신하고 기존 노드는 일관된 해시를 통해 결정된 대로 캐시의
소유자
복사본을 유지하기 위해 일부 상태를 제거합니다. 노드가 클러스터를 벗어나면 배포 캐시가 해당 노드에 저장된 키의 추가 사본을 만들어야 각 키의 소유자가 계속 존재할 수 있습니다. - 무효화 모드에서는 초기 상태 전송이 복제 모드와 유사하지만 노드가 동일한 상태가 보장되지 않는 유일한 차이점입니다. 노드가 클러스터를 떠나면 상태 전송이 없습니다.
상태 전송은 기본적으로 메모리 내 및 영구 상태를 모두 전송하지만 구성에서 둘 다 비활성화할 수 있습니다. 상태 전송이 비활성화되면 ClusterLoader
를 구성해야 합니다. 그렇지 않으면 노드가 데이터를 캐시에 로드하지 않고 키의 소유자 또는 백업 소유자가 됩니다. 또한 배포 모드에서 상태 전송을 비활성화하면 키가 캐시에 소유자
복사본보다 적은 경우가 있습니다.
22.3.5. Infinispan 스레드 풀 구성 링크 복사링크가 클립보드에 복사되었습니다!
infinispan
하위 시스템에는 async-operations
,expiration
,listener
,persistence
,remote-command
,state-transfer
, 전송
스레드 풀이 포함되어 있습니다. 이러한 풀은 모든 Infinispan 캐시 컨테이너에 대해 구성할 수 있습니다.
다음 표에는 infinispan
하위 시스템의 각 스레드 풀에 구성할 수 있는 특성과 각각에 대한 기본값이 나열되어 있습니다.
스레드 풀 이름 | keepalive-time | max-threads | min-threads | queue-length |
---|---|---|---|---|
async-operations | 60000L | 25 | 25 | 1000 |
만료 | 60000L | 1 | 해당 없음 | 해당 없음 |
listener | 60000L | 1 | 1 | 100000 |
지속성 | 60000L | 4 | 1 | 0 |
remote-command | 60000L | 200 | 1 | 0 |
state-transfer | 60000L | 60 | 1 | 0 |
전송 | 60000L | 25 | 25 | 100000 |
관리 CLI를 사용하여 Infinispan 스레드 풀을 구성하려면 다음 구문을 사용합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER_NAME/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
/subsystem=infinispan/cache-container=CACHE_CONTAINER_NAME/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
다음은 서버
캐시 컨테이너의 지속성
스레드 풀에서 max-threads
값을 10
으로 설정하는 관리 CLI 명령의 예입니다.
/subsystem=infinispan/cache-container=server/thread-pool=persistence:write-attribute(name="max-threads", value="10")
/subsystem=infinispan/cache-container=server/thread-pool=persistence:write-attribute(name="max-threads", value="10")
22.3.6. Infinispan 통계 링크 복사링크가 클립보드에 복사되었습니다!
모니터링을 위해 Infinispan 캐시 및 캐시 컨테이너에 대한 런타임 통계를 활성화할 수 있습니다. 성능상의 이유로 통계 수집은 기본적으로 활성화되어 있지 않습니다.
각 캐시 컨테이너, 캐시 또는 둘 다에 대해 통계 컬렉션을 활성화할 수 있습니다. 각 캐시에 대한 statistics 옵션은 캐시 컨테이너의 옵션을 덮어씁니다. 캐시 컨테이너에 대한 통계 컬렉션을 활성화하거나 비활성화하면 명시적으로 지정하지 않는 한 해당 컨테이너의 모든 캐시가 설정을 상속합니다.
22.3.6.1. Infinispan 통계 활성화 링크 복사링크가 클립보드에 복사되었습니다!
Infinispan 통계를 활성화하면 infinispan
하위 시스템의 성능에 부정적인 영향을 미칠 수 있습니다. 통계는 필요한 경우에만 활성화해야 합니다.
관리 콘솔 또는 관리 CLI를 사용하여 Infinispan 통계 컬렉션을 활성화하거나 비활성화할 수 있습니다. 관리 콘솔에서 Configuration 탭에서 Infinispan 하위 시스템으로 이동하여 적절한 캐시 또는 캐시 컨테이너를 선택하고 통계 Enabled 특성을 편집합니다. 관리 CLI를 사용하여 통계를 활성화하려면 아래 명령을 사용합니다.
캐시 컨테이너에 대한 통계 컬렉션을 활성화합니다. 서버 다시 로드가 필요합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=statistics-enabled,value=true)
/subsystem=infinispan/cache-container=CACHE_CONTAINER:write-attribute(name=statistics-enabled,value=true)
캐시에 대한 통계 컬렉션을 활성화합니다. 서버 다시 로드가 필요합니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:write-attribute(name=statistics-enabled,value=true)
/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:write-attribute(name=statistics-enabled,value=true)
다음 명령을 사용하면 캐시 컨테이너의 statistics-enabled
속성 설정을 상속하도록 캐시의 statistics-enabled
특성을 정의할 수 있습니다.
/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:undefine-attribute(name=statistics-enabled)
/subsystem=infinispan/cache-container=CACHE_CONTAINER/CACHE_TYPE=CACHE:undefine-attribute(name=statistics-enabled)
22.3.7. Infinispan 파티션 처리 링크 복사링크가 클립보드에 복사되었습니다!
Infinispan 클러스터 는 데이터가 저장되는 여러 노드로 빌드됩니다. 여러 노드가 실패하는 경우 데이터 손실을 방지하기 위해 Infinispan은 여러 노드에 동일한 데이터를 복사합니다. 이 수준의 데이터 중복성은 owners
속성을 사용하여 구성됩니다. 구성된 노드 수보다 동시에 충돌하는 한 Infinispan에는 사용 가능한 데이터 사본이 있습니다.
그러나 클러스터에 너무 많은 노드가 사라질 때 발생할 수 있는 심각한 상황이 있습니다.
- 스플릿 브레인
이렇게 하면 클러스터가 독립적으로 작동하는 두 개 이상의 파티션 또는 하위 클러스터로 분할됩니다. 이러한 상황에서 여러 클라이언트가 서로 다른 파티션에서 읽고 쓰는 경우 동일한 캐시 항목의 다른 버전을 볼 수 있으므로 많은 애플리케이션에서 문제가 발생합니다.
참고중복 네트워크 또는 IP 본딩 과 같이 분할 뇌가 발생할 가능성을 완화하는 방법이 있습니다. 그러나 이러한 문제는 문제가 발생하는 시간만 줄일 수 있습니다.
- 여러 노드가 순서대로 충돌
- 여러 노드, 특히 소유자 수를 빠른 순서로 충돌하고 Infinispan이 충돌 사이에 상태를 적절하게 재조정할 시간이 없는 경우 결과는 부분적인 데이터 손실입니다.
목표는 분할된 뇌 또는 여러 노드가 빠른 순서로 충돌하여 사용자에게 잘못된 데이터가 반환되는 상황을 방지하는 것입니다.
22.3.7.1. 스플릿 브레인 링크 복사링크가 클립보드에 복사되었습니다!
분할 뇌 상황에서 각 네트워크 파티션은 고유한 Cryostat 보기를 설치하고 다른 파티션에서 노드를 제거합니다. 파티션이 서로를 인식하지 못하기 때문에 클러스터가 두 개 이상의 파티션으로 분할되었는지 여부를 직접 확인할 수 없습니다. 대신 명시적 휴가 메시지를 보내지 않고 하나 이상의 노드가 Cryostat 클러스터에서 사라질 때 클러스터가 분할되었다고 가정합니다.
파티션 처리가 비활성화되면 이러한 각 파티션이 독립적인 클러스터로 계속 작동합니다. 각 파티션은 데이터의 일부만 볼 수 있으며 각 파티션은 캐시에서 충돌하는 업데이트를 작성할 수 있습니다.
파티션 처리가 활성화된 상태에서 분할을 감지하면 각 파티션이 즉시 리밸런싱을 시작하지 않지만 먼저 성능이 저하된 모드로 전환해야 하는지 여부를 확인합니다.
- 하나 이상의 세그먼트가 모든 소유자를 손실한 경우, 마지막으로 리밸런스가 종료된 이후 지정된 소유자 수가 남아 있는 경우 파티션은 성능이 저하된 모드로 전환됩니다.
- 파티션에 최신 안정된 토폴로지 에서도 대부분의 노드(floor(numNodes/2) + 1)가 포함되어 있지 않은 경우 파티션도 성능 저하 모드로 전환됩니다.
- 그렇지 않으면 파티션이 정상적으로 작동하고 리밸런스를 시작합니다.
stable 토폴로지 는 리밸런스 작업이 종료될 때마다 업데이트되고 코디네이터는 다른 리밸런스가 필요하지 않다고 결정합니다. 이러한 규칙은 하나의 파티션이 사용 가능한 모드로 남아 있고 다른 파티션은 성능이 저하된 모드로 유지됩니다.
파티션이 성능 저하 모드인 경우 다음과 같이 설정된 키에 대한 액세스 권한만 허용합니다.
- 이 파티션 내의 노드의 모든 복사본이 있는 항목에 대한 요청(읽기 및 쓰기)이 적용됩니다.
-
오류가 발생한 노드에서 부분적으로 또는 완전히 소유한 항목에 대한 요청은
AvailabilityException
과 함께 거부됩니다.
이렇게 하면 파티션에서 동일한 키(캐시가 일관됨)에 대해 다른 값을 쓸 수 없으며 하나의 파티션에서 다른 파티션에서 업데이트된 키를 읽을 수 없습니다(비효한 데이터 없음).
두 개의 파티션이 격리된 상태로 시작될 수 있으며 병합하지 않는 한 일관성 없는 데이터를 읽고 쓸 수 있습니다. 나중에 사용자 정의 가용성 전략(예: 특정 노드가 클러스터의 일부인지 확인)을 허용하거나 이러한 상황을 처리할 수 있는 외부 시스템에 액세스할 수 있는지 확인할 수 있습니다.
22.3.7.2. 파티션 처리 구성 링크 복사링크가 클립보드에 복사되었습니다!
파티션 처리는 기본적으로 비활성화되어 있습니다. 파티션 처리를 활성화할 때 다음과 같은 두 가지 구성 가능한 속성이 있습니다.
속성 | 값 |
---|---|
| "DENY_READ_WRITES", "ALLOW_READS", "ALLOW_READ_WRITES" |
| "NONE", "PREFERRED_ALWAYS", "PREFERRED_NON_NULL", "REMOVE_ALL" |
네트워크 파티션이 감지될 때 캐시의 읽기 및 쓰기 동작을 결정하도록 when-split
을 구성합니다.
두 개의 네트워크 파티션을 병합할 때 충돌 해결 정책 전략을 결정하도록 merge-policy
를 구성합니다.
CLI 명령 예:
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=partition-handling:write-attribute(name=when-split, value=DENY_READ_WRITES)
/subsystem=infinispan/cache-container=web/distributed-cache=dist/component=partition-handling:write-attribute(name=when-split, value=DENY_READ_WRITES)
22.3.7.3. 원격 캐시 컨테이너 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리형 도메인의 모든 서버 그룹에 대해 원격 캐시를 구성해야 합니다. statistics-enabled
특성을 사용하여 지정된 remote-cache-container
및 관련 런타임 캐시에 대한 메트릭 컬렉션을 활성화할 수 있습니다.
22.3.7.3.1. 원격 캐시 컨테이너 생성 링크 복사링크가 클립보드에 복사되었습니다!
관리형 도메인의 각 서버 그룹에는 고유한 원격 캐시가 필요합니다. 캐시는 동일한 데이터 그리드에 속할 수 있습니다. 따라서 사용자는 서버 그룹에 대한 소켓 바인딩을 정의하고 소켓 바인딩을 원격 캐시 컨테이너와 연결하여 모든 서버 그룹에 대한 원격 캐시를 구성해야 합니다.
프로세스
socket-binding
을 정의하여 클러스터의 각 원격 Red Hat Data Grid 인스턴스에 필요에 따라 명령을 반복합니다./socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=SOCKET_BINDING:add(host=HOSTNAME,port=PORT)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=SOCKET_BINDING:add(host=HOSTNAME,port=PORT)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새로 생성된 소켓 바인딩을 참조하는
remote-cache-container
를 정의합니다.batch /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER:add(default-remote-cluster=data-grid-cluster) /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/remote-cluster=data-grid-cluster:add(socket-bindings=[SOCKET_BINDING,SOCKET_BINDING_2,...]) run-batch
batch /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER:add(default-remote-cluster=data-grid-cluster) /subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/remote-cluster=data-grid-cluster:add(socket-bindings=[SOCKET_BINDING,SOCKET_BINDING_2,...]) run-batch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.7.3.2. 원격 캐시 컨테이너에 대한 통계 활성화 링크 복사링크가 클립보드에 복사되었습니다!
statistics-enabled
특성을 사용하면 지정된 remote-cache-container
및 관련 런타임 캐시에 대한 메트릭 컬렉션을 사용할 수 있습니다.
-
"foo"라는
remote-cache-container
의 경우 다음 작업을 사용하여 통계를 활성화합니다.
/subsystem=infinispan/remote-cache-container=foo:write-attribute(name=statistics-enabled, value=true)
/subsystem=infinispan/remote-cache-container=foo:write-attribute(name=statistics-enabled, value=true)
-
remote-cache-container
"foo"의 경우 런타임 시 다음 메트릭이 표시됩니다.
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=connections) /subsystem=infinispan/remote-cache-container=foo:read-attribute(name=active-connections) /subsystem=infinispan/remote-cache-container=foo:read-attribute(name=idle-connections)
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=connections)
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=active-connections)
/subsystem=infinispan/remote-cache-container=foo:read-attribute(name=idle-connections)
-
이러한 메트릭에 대한 설명을 보려면
remote-cache-container
에 대한 read-resource-description 작업을 실행합니다.
/subsystem=infinispan/remote-cache-container=foo:read-resource-description
/subsystem=infinispan/remote-cache-container=foo:read-resource-description
- 다음 메트릭은 선택한 배포에서 사용하는 원격 캐시에 고유합니다.
- 이러한 메트릭에 대한 설명은 원격 캐시에 대한 read-resource-description 작업을 실행합니다.
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:read-resource-description
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:read-resource-description
- 이러한 메트릭 중 일부는 계산된 값(예: average-*)이지만 다른 메트릭은 적중 및 누락과 같은 매우 높은 값입니다. 승격된 메트릭은 다음 작업을 통해 재설정할 수 있습니다.
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:reset-statistics()
/subsystem=infinispan/remote-cache-container=foo/remote-cache=bar.war:reset-statistics()
22.3.8. Red Hat Data Grid로 HTTP 세션 외부화 링크 복사링크가 클립보드에 복사되었습니다!
이 기능을 사용하려면 Red Hat Data Grid 서브스크립션이 필요합니다.
Red Hat Data Grid는 HTTP 세션과 같은 JBoss EAP의 애플리케이션 관련 데이터에 대한 외부 캐시 컨테이너로 사용할 수 있습니다. 이를 통해 애플리케이션과 독립적으로 데이터 계층을 확장할 수 있으며 다양한 도메인에 있을 수 있는 다양한 JBoss EAP 클러스터를 활성화하여 동일한 Red Hat Data Grid 클러스터의 데이터에 액세스할 수 있습니다. 또한 다른 애플리케이션은 Red Hat Data Grid에서 제공하는 캐시와 상호 작용할 수 있습니다.
다음 예제에서는 HTTP 세션을 외부화하는 방법을 보여줍니다. JBoss EAP의 독립 실행형 인스턴스 및 관리형 도메인에 모두 적용됩니다.
-
remote-cache-container
를 생성합니다. 자세한 내용은 원격 캐시 컨테이너 구성을 참조하십시오. HotRod 저장소를 구성합니다. HotRod 저장소는 JBoss EAP 서버에서 생성한 각 캐시에 대해 하나의 전용 원격 캐시를 사용합니다. 일반적으로 아래 CLI 스크립트에 표시된 것처럼 하나의 무효화 캐시는 JBoss EAP 서버에서 사용됩니다.
참고Red Hat Data Grid 서버에서 원격 캐시를 수동으로 구성해야 합니다. 이러한 캐시에 권장되는 구성은 비관적 잠금이 있는 트랜잭션 배포 모드 캐시입니다. 캐시 이름은
test.war
와 같은 배포 파일 이름에 해당해야 합니다.원격 캐시 컨테이너가 구성되면 기존 저장소를 대체하도록
핫 로드
저장소를 구성할 수 있습니다. 다음 CLI 스크립트는 무효화 캐시와 함께 세션을 오프로드하는 일반적인 사용 사례를 보여줍니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 스크립트는 새 무효화 캐시를 구성합니다. 그런 다음 세션 데이터는 성능을 위해 캐시에서 유지 관리되고 복원력을 위해 저장소에 기록됩니다.
HotRod 클라이언트는
@Resource
주석을 사용하여 자카르타 EE 애플리케이션에 직접 삽입할 수 있습니다. 아래 예제에서@Resource
주석은hotrod-client.properties
파일에서 클래스 경로에서 구성 속성을 조회합니다.@Resource(lookup = "java:jboss/infinispan/remote-container/web-sessions") private org.infinispan.client.hotrod.RemoteCacheContainer client;
@Resource(lookup = "java:jboss/infinispan/remote-container/web-sessions") private org.infinispan.client.hotrod.RemoteCacheContainer client;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예:
hotrod-client.properties
파일Copy to Clipboard Copied! Toggle word wrap Toggle overflow
원격 캐시 컨테이너 보안
SSL을 사용하여 원격 Red Hat Data Grid 인스턴스와의 통신을 보호할 수 있습니다. 이는 JBoss EAP 인스턴스에 remote-cache-container
를 구성하고 활성 보안 영역을 사용하도록 Red Hat Data Grid 인스턴스에서 hotrod 커넥터를 조정하여 수행됩니다.
JBoss EAP에서
client-ssl-context
를 만듭니다. 다른 elytron 구성 요소 생성을 포함하여client-ssl-context
를 생성하는 방법에 대한 자세한 내용은 JBoss EAP 서버 보안 구성 방법에서 client-ssl-context 사용을 참조하십시오./subsystem=elytron/client-ssl-context=CLIENT_SSL_CONTEXT:add(key-manager=KEY_MANAGER,trust-manager=TRUST_MANAGER)
/subsystem=elytron/client-ssl-context=CLIENT_SSL_CONTEXT:add(key-manager=KEY_MANAGER,trust-manager=TRUST_MANAGER)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클라이언트 SSL 컨텍스트를 사용하도록 원격 캐시 컨테이너를 구성합니다.
/subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/component=security:write-attribute(name=ssl-context,value=CLIENT_SSL_CONTEXT)
/subsystem=infinispan/remote-cache-container=CACHE_CONTAINER/component=security:write-attribute(name=ssl-context,value=CLIENT_SSL_CONTEXT)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 각 인스턴스에 대해 필요에 따라 반복하여 원격 Red Hat Data Grid 인스턴스를 보호합니다.
-
client-ssl-context
에 사용된 키 저장소를 원격 Red Hat Data Grid 인스턴스에 복사합니다. 이 키 저장소를 사용하도록
ApplicationRealm
을 구성합니다./core-service=management/security-realm=ApplicationRealm/server-identity=ssl:add(keystore-path="KEYSTORE_NAME",keystore-relative-to="jboss.server.config.dir",keystore-password="KEYSTORE_PASSWORD")
/core-service=management/security-realm=ApplicationRealm/server-identity=ssl:add(keystore-path="KEYSTORE_NAME",keystore-relative-to="jboss.server.config.dir",keystore-password="KEYSTORE_PASSWORD")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 보안 영역을 가리키도록 핫 로드 커넥터를 조정합니다.
/subsystem=datagrid-infinispan-endpoint/hotrod-connector=hotrod-connector/encryption=ENCRYPTION:add(require-ssl-client-auth=false,security-realm="ApplicationRealm")
/subsystem=datagrid-infinispan-endpoint/hotrod-connector=hotrod-connector/encryption=ENCRYPTION:add(require-ssl-client-auth=false,security-realm="ApplicationRealm")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 원격 Red Hat Data Grid 인스턴스를 다시 로드합니다.
reload
reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
22.3.9. 원격 저장소를 사용하여 Red Hat Data Grid에 HTTP 세션 외부화 링크 복사링크가 클립보드에 복사되었습니다!
이 기능을 사용하려면 Red Hat Data Grid 서브스크립션이 필요합니다.
여기에서는 세션을 외부화하는 이전 방법을 나타냅니다. JBoss EAP 7.2는 elytron
하위 시스템과 통합된 HotRod 프로토콜을 기반으로 사용자 정의 최적화된 캐시 저장소를 도입했습니다. Red Hat Data Grid로 HTTP 세션을 외부화하는 데 설명된 대로 새로운 핫로드
저장소를 사용하는 것이 좋습니다.
배포 가능한 각 애플리케이션에 대해 완전히 새 캐시를 생성해야 합니다. 기존 캐시 컨테이너에서 생성할 수 있습니다(예: web
).
HTTP 세션을 외부화하려면 다음을 수행합니다.
socket-binding-group
에 네트워킹 정보를 추가하여 원격 Red Hat Data Grid 서버의 위치를 정의합니다.예: 원격 소켓 바인딩 추가
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server1:add(host=RHDGHostName1, port=11222) /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server2:add(host=RHDGHostName2, port=11222)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server1:add(host=RHDGHostName1, port=11222) /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-rhdg-server2:add(host=RHDGHostName2, port=11222)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 결과 XML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고각 Red Hat Data Grid 서버에 대해 원격 소켓 바인딩을 구성해야 합니다.
원격 캐시 컨테이너가 JBoss EAP의
infinispan
하위 시스템에 정의되어 있는지 확인합니다.remote-store
요소의cache
속성 아래 예제에서는 원격 Red Hat Data Grid 서버에서 캐시 이름을 정의합니다.관리형 도메인에서 실행 중인 경우 이러한 명령 앞에
/profile=PROFILE_NAME
.예: 원격 캐시 컨테이너 추가
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 결과 XML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow