Facebook 캐시인 Memcached 에서 데이터를 가져올 수 없을 때는 백엔드 서비스에 과도한 부하가 발생하고, 이로 인해 추가적인 연쇄 실패(cascading failures)가 발생할 수 있다.

 

 

이러한 실패는 두 가지 규모에서 해결해야 한다:

  • 소규모 실패:
    • 몇몇 호스트가 네트워크 또는 서버 장애로 인해 접근할 수 없는 경우를 말한다.
  • 광범위한 중단:
    • 클러스터 내의 상당한 비율의 서버에 영향을 미치는 광범위한 중단을 말한다. 이는 대규모 네트워크 실패, 전력 문제, 또는 다른 재해로 인해 발생할 수 있다.

 

트래픽 전환으로 광범위한 중단 실패 대응:

  • 전체 클러스터가 오프라인 상태가 되어야 하는 경우, 사용자 웹 요청을 다른 클러스터로 전환하여 해당 클러스터 내의 Memcache로부터 모든 부하를 제거한다. 이는 시스템의 다른 부분에 부하를 분산시키고, 사용자에게 지속적인 서비스를 제공하는 동시에 복구 작업을 수행할 수 있는 시간을 확보할 수 있다.

 

 

Gutter 시스템으로 소규모 중단에 대응:

  • 소규모 중단이라도 장애 시간 동안에는 앞서 언급한 연쇄 실패가 발생할 수 있으므로, 실패로부터 백엔드 서비스를 추가로 보호하기 위한 방안이 필요하다.
  • Gutter 기능:
    • Gutter 시스템은 Memcache 서버가 작동하지 않을 경우를 대비한 임시 캐시 풀로 생각하면 된다. 이는 클러스터 내에서 실패가 발생했을 때 빠르게 대응하여 서비스의 중단을 최소화하는 역할을 수행한다.
  • Gutter의 비율:
    • Gutter는 클러스터 내 Memcached 서버의 약 1%를 차지한다. 이는 Gutter가 전체 클러스터 용량에 큰 영향을 주지 않으면서도 실패에 대한 효과적인 대비책을 제공할 수 있음을 의미한다.

 

 

Gutter 시스템 매커니즘:

  • Gutter 풀로의 요청 재발행:
    • 클라이언트가 get 요청에 대한 응답을 받지 못하면, 해당 서버가 실패했다고 가정하고 요청을 특별한 Gutter 풀로 다시 요청을 발행한다. 이 풀은 실패한 서버의 부하를 받아들이기 위해 설정된 작은 세트의 기계(또는 서버)를 나타낸다.
  • Gutter 내 데이터 삽입:
    • 두 번째 요청이 Gutter 풀에서도 미스될 경우, 클라이언트는 데이터베이스를 조회하여 적절한 키-값 쌍을 얻는다. 이렇게 조회된 키-값 쌍은 Gutter 에 삽입된다. 즉 Gutter가 임시 저장소로 작동하며, 요청이 실패한 경우의 백업으로 사용됨을 의미한다.

 

 

Gutter 시스템 매커니즘은 재해싱(Resharding) 매커니즘과 다르다:

  • 재해싱(rehashing) 접근 방식의 문제점:
    • 특정 키가 서버 요청의 상당 부분(예: 20%)을 차지할 수 있는데. 이러한 "핫 키(hot key)" 는 서버 과부하를 유발할 수 있다. 핫 키를 받게 된 서버가 과부하되면, 이는 다른 서버에 추가적인 부하를 초래하여 시스템 전체의 연쇄 실패로 이어질 수 있다.
  • 재해싱(rehashing) 하는 방식은 Consistent Hashing 을 사용하는 방법인가?
    • 재해싱(rehashing)하는 방식은 일관된 해싱(Consistent Hashing)과 관련이 있다. 일관된 해싱은 분산 시스템에서 노드(서버)가 추가되거나 제거될 때 키의 재분배를 최소화하기 위해 설계된 알고리즘입니다. 이 방식을 사용하면, 노드가 변경될 때 모든 키를 재해싱할 필요 없이, 영향을 받는 키만 새로운 노드로 이동하게 된다.
    • 일관된 해싱을 사용할 때, 한 노드가 실패하면 해당 노드에 매핑된 키들은 자동으로 해시 링 상에서 다음 노드로 이동한다. 이는 자연스럽게 부하를 재분배하지만, 이전에 언급된 것처럼 "핫 키"가 있는 경우, 다음 노드가 과부하될 위험이 생긴다. 특히, 매우 높은 접근 빈도를 가진 키가 재배치될 때, 그 키를 받게 되는 서버에 예상치 못한 부하가 발생할 수 있다.
  • Gutter 시스템을 사용한 접근 방식의 이점:
    • Gutter 시스템은 실패한 서버의 부하를 유휴 서버로 전환함으로써, 남아 있는 서버들에 대한 부하를 균등하게 분산한다. 이는 핫 키로 인한 과부하 위험을 줄일 수 있다. 이렇게 부하를 유휴 서버로 전환함으로써, 특정 서버에 집중되는 과부하를 방지하고 시스템 전체의 안정성을 유지할 수 있다.

 

 

Gutter 시스템 효과:

  • Gutter를 통해 실패한 요청의 상당 부분을 캐시 적중으로 전환함으로써 백엔드 저장소에 대한 부하를 줄일 수 있다.
  • 실제 사용에서 이 시스템은 클라이언트가 볼 수 있는 실패율을 99% 줄이며, 매일 10%–25%의 실패 요청을 적중으로 전환한다.
  • Memcached 서버가 완전히 실패할 경우, Gutter 풀에서의 적중률은 4분 이내에 일반적으로 35%를 초과하며, 종종 50%에 가까워진다. 이는 Gutter 시스템이 실패 상황에 빠르게 적응하고 백엔드 저장소로의 부하 증가를 효과적으로 방지할 수 있음을 나타낸다. 

+ Recent posts