

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 효율적인 로드 밸런싱을 위해 ElastiCache 클라이언트 구성(Memcached)
<a name="BestPractices.LoadBalancing"></a>

**참고**  
이 섹션의 내용은 노드 기반 다중 노드 Memcached 클러스터에 적용됩니다.

여러 ElastiCache Memcached 노드를 효과적으로 사용하려면 캐시 키를 노드에 분산시킬 수 있어야 합니다. *n* 노드 사용 클러스터를 로드 밸런스하는 간단한 방법은 객체 키의 해시를 계산하고 *n*: `hash(key) mod n`으로 결과를 모드하는 것입니다. 결과 값(0\$1*n*–1)은 객체가 배치되는 노드의 수입니다.

노드 수(*n*)가 일정하면 이 방법이 간편하고 효과적입니다. 하지만 클러스터에서 노드를 추가하거나 제거할 때마다 이동할 키의 수는 *(n - 1) / n*입니다. 여기서 *n*은 새로운 노드 수입니다. 따라서 이 방법을 사용하면 많은 키가 이동하며 특히 노드 수가 커질수록 다량의 초기 캐시가 누락됩니다. 1개에서 2개로 노드를 조정하면 이동할 키는 (2-1)/2(50%)가 되는 것이 모범 사례입니다. 9개에서 10개로 노드를 조정하면 이동할 키는 (10-1)/10(90%)가 됩니다. 트래픽의 스파이크로 인해 확장하는 경우 캐시가 대량으로 누락되는 상황을 방지할 필요가 없습니다. 캐시가 대량으로 누락되면 데이터베이스에 대한 히트가 발생하지만 이미 트래픽의 스파이크로 인해 오버로드되어 있습니다.

이 문제의 해결 방법은 일관적 해싱입니다. 일관적 해싱에는 클러스터에서 노드가 추가되거나 제거될 때마다 이동할 키의 수가 대략 *1/n*(여기서 *n*은 새로운 노드 수)인 알고리즘이 사용됩니다. 1개에서 2개로 노드를 조정하면 이동할 키는 1/2(50%)이 되는 것이 최악의 경우입니다. 9개에서 10개로 노드를 조정하면 이동할 키는 1/10(10%)가 됩니다.

사용자는 다중 노드 클러스터에 사용되는 해시 알고리즘을 제어합니다. 일관적 해싱을 사용하도록 클라이언트를 구성하는 것이 좋습니다. 일관적 해싱을 구현하는 데 자주 사용되는 언어로 여러 Memcached 클라이언트 라이브러리가 제공됩니다. 사용할 라이브러리의 설명서에서 일관적 해싱 지원 여부와 그 구현 방법을 참조하세요.

Java, PHP 또는 .NET으로 작업하는 경우 Amazon ElastiCache 클라이언트 라이브러리 중 하나를 사용하는 것이 좋습니다.

## Java를 사용한 일관적 해싱
<a name="BestPractices.LoadBalancing.Java"></a>

ElastiCache Memcached Java 클라이언트는 일관적 해싱 기능이 내장된 오픈 소스 spymemcached Java 클라이언트를 기반으로 합니다. 일관적 해싱을 구현하는 KetamaConnectionFactory 클래스가 라이브러리에 포함되어 있습니다. 기본적으로 spymemcached에서는 일관적 해싱이 해제됩니다.

자세한 내용은 [KetamaConnectionFactory](https://github.com/RTBHOUSE/spymemcached/blob/master/src/main/java/net/spy/memcached/KetamaConnectionFactory.java)에서 KetamaConnectionFactory 설명서를 참조하세요.

## Memcached와 함께 PHP를 사용한 일관된 해싱
<a name="BestPractices.LoadBalancing.PHP"></a>

ElastiCache Memcached PHP 클라이언트는 기본 제공 Memcached PHP 라이브러리 주변의 래퍼입니다. 기본적으로 Memcached PHP 라이브러리에서는 일관적 해싱이 해제됩니다.

다음 코드를 사용하여 일관적 해싱을 설정하세요.

```
$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
```

또한 php.ini 파일에서 `memcached.sess_consistent_hash`를 설정할 수도 있습니다.

 자세한 내용은 [http://php.net/manual/en/memcached.configuration.php](http://php.net/manual/en/memcached.configuration.php)에서 Memcached PHP의 런타임 구성 설명서를 참조하세요. 특히 `memcached.sess_consistent_hash` 파라미터에 유의하시기 바랍니다.

## Memcached와 함께 .NET을 사용한 일관된 해싱
<a name="BestPractices.LoadBalancing.dotNET"></a>

ElastiCache Memcached .NET 클라이언트는 Enyim Memcached 주변의 래퍼입니다. 기본적으로 Enyim Memcached 클라이언트에서는 일관적 해싱이 설정됩니다.

 자세한 내용은 [https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration\$1user-content-memcachedlocator](https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator)에 있는 `memcached/locator` 설명서를 참조하세요.