문제

현재 RAM 제한이 있는 애플리케이션을 확장하는 데 도움이 되도록 Terracotta를 평가하고 있습니다.협업 필터이며 사용자당 약 2KB의 데이터를 저장합니다.Amazon의 EC2를 사용하고 싶습니다. 즉, RAM이 14GB로 제한되어 있어 서버당 유효 사용자 상한선은 약 700만 명에 이릅니다.이 이상으로 확장할 수 있어야 합니다.

지금까지 읽은 내용을 토대로 Terracotta는 각 서버에서 사용 가능한 RAM보다 더 큰 클러스터 힙을 가질 수 있다는 것을 알았습니다.각 서버가 14GB만 지원하는 경우 30GB 이상의 효과적인 클러스터 힙을 갖는 것이 가능합니까?

사용자별 데이터(대부분 부동 소수점 배열)는 매우 자주 변경되며 잠재적으로 분당 수십만 번 변경됩니다.이러한 변경 사항 중 하나하나가 발생하는 순간 클러스터의 다른 노드와 동기화될 필요는 없습니다.일부 개체 필드만 주기적으로 동기화할 수 있나요?

도움이 되었습니까?

해결책

이에 대한 대답은 '예'라고 말하고 싶습니다.Terracotta를 사용하면 단일 JVM 크기보다 큰 클러스터 힙으로 작업할 수 있지만 가장 일반적인 사용 사례는 아닙니다.

여전히 a) 작업 세트 크기와 b) 데이터 트래픽 양을 염두에 두어야 합니다.a)의 경우 특정 시간에 작업을 수행하기 위해 메모리에 있어야 하는 일부 데이터 세트가 있으며 해당 작업 세트 크기 > 힙 크기인 경우 성능이 분명히 저하됩니다.b)의 경우 클러스터된 힙에 추가/업데이트된 각 데이터 조각을 서버로 전송해야 합니다.테라코타는 포조 그래프에서 세밀한 필드를 변경할 때 가장 좋습니다.대규모 어레이로 작업하면 Terracotta 기능을 최대한 활용할 수 없습니다(사람들이 때때로 그런 식으로 사용하지 않는다는 의미는 아닙니다).

많은 쓰레기를 생성하는 경우 Terracotta 메모리 관리자와 분산형 쓰레기 수집기가 이를 따라잡을 수 있어야 합니다.데이터 볼륨이 사용 가능한 대역폭을 초과하는지 여부는 시도해 보지 않고는 말하기 어렵습니다.

여러 서버를 실행하고 데이터가 서버별로 분할되어 있거나 어느 정도 참조 지역성이 있는 경우 애플리케이션에 엄청난 이점이 있습니다.이 경우 힙에 있는 한 서버의 파티션에 대한 데이터만 필요하며 나머지는 메모리에 오류가 있을 필요가 없습니다.물론 다른 서버가 다운되는 경우 장애 조치/가용성을 위해 필요한 경우 오류가 발생합니다.이것이 의미하는 바는 분할된 데이터의 경우 모든 노드에 브로드캐스트하는 것이 아니라 서버에 트랜잭션만 보내는 것입니다.

숫자의 관점에서 볼 때 30GB의 데이터를 인덱싱하는 것이 가능하므로 이는 하드 제한에 가깝지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top