2010-05-23 2 views
4

특정 키가 풀의 모든 memcached 서버에 배포되는지 확인하는 방법에 대해 조금 생각했습니다.풀의 모든 서버에 쓰기 위해 memcached 강제 실행

나의 현재, 검증되지 않은 솔루션은 memcached와의 다른 인스턴스를 만들기 위해이 같은 것입니다 : 특정 키 신뢰성에 대한 모든 서버에 저장 될 필요가이 경우에 할 수있는 상식은 무엇

$cluster[] = array('host' => '192.168.1.1', 'port' => '11211', 'weight' => 50); 

$this->tempMemcached = new Memcached; 
$this->tempMemcached->addServers($cluster); 

foreach ($this->cluster() as $cluster) {  

    $this->tempMemcached->setByKey($cluster, $key, $value, $this->compress, $expireTime); 

} 

$this->tempMemcache->close(); 

?

+2

데이터를 읽을 때도 동일한 절차를 따라야합니다. –

+0

@ 선 - 그걸 알아 :) @ 모두 : 현상금은 ON입니다! – Industrial

답변

6

복잡하지 않습니다. FAQ에서보세요 : 만 사용되는 해시 알고리즘에 따라, 특정 노드에서 항목을 둘 것입니다, 당신의 품목의 단일 복사본을 저장해야합니다.

이제 노드에 모두의 항목을 사용할 수있게하려면이 순간을 수행하는 것과 똑같이 반복 할 수 있습니다.

나는이 항목이 캐시에서 발견되지 않을 때 코드가 사건을 어떻게 처리합니까 바랍니다.

+1

안녕하세요 민다스, 답변 해 주셔서 감사합니다! – Industrial

+2

@Industrial : 이것은 당신이 얻는 최고의 것입니다. 다른 사람들이 말했듯이 이것은 memcached가 의도 한 것이 아니므로 제작자가 일종의 복제 메커니즘을 구현하는 것이 타당하지 않을 수 있습니다. 반복 만이 유일한 방법입니다. – ryeguy

+0

나는 응용 프로그램 A가 memcache에 많은 요청을하여 해싱/샤딩 접근법을 사용하는 유스 케이스에 접어 들었다. 그러나 다른 memcache 클라이언트를 사용하여 응용 프로그램 B를 통해 캐시에 저장되는 키는 응용 프로그램 A에서 액세스하는 경우가 거의 없습니다. 키가 응용 프로그램 A에 대해 동일한 노드에 매핑되도록하려면 어떻게해야합니까? 비? 생각할 수있는 유일한 대답은 각 노드에 동일한 키를 쓰는 것입니다. – quickinsights

4

Memcached의 요점을 놓치고 있다고 생각합니다. 신뢰할 수있는 데이터 저장을위한 것이 아닙니다. 캐시 된 데이터에 매우 빠르게 액세스 할 수 있습니다. 중복성을 원하면 MongoDB와 같은 NOSQL 데이터베이스를 사용해보십시오 ...

게다가 성능과 중복성에있어 여러 연결을 만드는 것이 좋지 않습니다 (연결이 많을수록 문제가 발생할 확률이 높고 각 요청에 대해 더 많이 수행해야 함).

단순화, 나는 당신이 그것을 위해 설계 된 방법을 memcached를 사용하지 않을 생각 ...

+0

안녕하세요! 나는 그것을 알고 있지만 모든 서버에 저장해야하는 키는 거의 없기 때문에 연결 수가 "합리적"일 수 있다고 생각합니다. 나는 이것을 할 수있는 더 좋은 방법이 있다고 확신하지만! – Industrial

1

우리는 memcache를 서버에서 아주 자주 당한다 키의 부하 '확산'을 가졌다. 우리는 임의의 숫자 0-N을 단순히 덧붙이면됩니다. 여기서 N은 설정 한 인스턴스 수의 배수입니다. 당신이 그리워하는 경우, 당신은 소스 (데이터베이스, 뭐든간에)로 간다. memcache가 키에 해시 된 이후로 여러 번 말하면 알지 못하는 사이에 부수적 인 충돌을 얻을 수 있습니다.

더의 선행 비용 (N 당신의 복수에 비례) 소스에서 읽지 만, 모든 인스턴스에서 하나의 키의 부하를 확산 행복 그 상자를 유지 수행 될 수 있습니다.

하지만 네,로드 균형 조정을위한 중복이 아닙니다.

관련 문제