분류

지금이 몇 시인지 주의하기

먼저, 새로운 소식입니다. 제가 방금 스파이멤캐시드 2.6 릴리스 후보. 현재 Membase vbucket 인식 클라이언트 사전 릴리스 도 해당 코드를 기반으로 합니다.

그래서 2.6의 새로운 기능? 성능, 트랜스코더, 타임아웃 처리 등 여러 가지가 개선되었지만 가장 큰 변화는 타임아웃 처리입니다.

스파이멤캐시드 136번 이슈에 대한 댓글과 게시물이 꽤 많이 올라왔습니다. 스파이 136의 버그 보고에 따르면, 다양한 사람들이 앱을 실행하면서 MemcachedClient get()에서 런타임 예외가 발생하고 있습니다. 이것은 소비자에게는 매우 간단한 메서드 호출이므로 매우 일반적이지만, 그 이면에는 스파이멤캐시드 사용 방식을 최적화하기 위한 복잡한 작업이 진행되고 있습니다. 조금 더 자세히 설명해 드리겠습니다.

기술적으로 말하자면, spymemcached의 어떤 작업도 동기식으로 수행되지 않습니다. 동기식으로 보이는 get() 메서드 호출을 할 때, 기본 시간 제한이 있는 카운트다운 래치를 사용하여 주어진 연결에 대해 동일한 비동기 쓰기 큐를 통해 작업을 실행함으로써 Java 동시성 API를 사용하여 작업이 시스템을 통과하고 서비스되고 매우 빠르게 응답하도록 함으로써 동기식으로 보이는 가져오기를 만들 수 있습니다. 현실적으로 이러한 작업은 대부분 몇 밀리초에서 마이크로초 내에 완료됩니다.

그렇긴 하지만 여전히 실행할 때 발생할 수 있는 몇 가지 상황이 있습니다.
a) 사용자 공간 애플리케이션으로
b) 사용량이 많은 시스템에서
c) 사용량이 많거나 불안정한 네트워크에서
d) 가비지 수집 또는 JIT 활동으로 인해 JVM에서 발생함

이러한 문제 중 상당수는 약간의 노력으로 어느 정도 제어할 수 있지만 완전히 제거할 수는 없습니다. 즉, 코드는 항상 가끔씩 타임아웃을 받을 준비가 되어 있어야 합니다. 마찬가지로 스파이멤캐시는 시간 초과 상태에서 가능한 한 빨리 복구하는 것을 목표로 해야 합니다.

그런데 스파이 136호를 조사하던 중 몇 가지 문제가 발생했습니다.

마이크 위더홀드는 가끔 TCP 재전송을 볼 때가 있다고 언급했습니다. 자세히 살펴보니 재전송 전 기본 시간이 1초라는 사실을 알게 되었습니다. 래치의 기본 타임아웃이 1초이기 때문에 TCP 재전송이 발생하면 타임아웃이 발생한다는 뜻이었습니다. 요즘 클라우드 및 가상화 배포의 경우, 그중 일부는 과잉 가입된 네트워크에 있는 것으로 알려져 있기 때문에 이 문제가 가끔 발생할 수 있습니다. 간단한 해결 방법은 기본 시간 초과를 늘리는 것입니다. 제가 가볍게 한 일은 아니지만 올바른 조치라고 생각합니다.

다음과 같은 부하 테스트 중 일부 Membase 이 버튼을 누르세요. 에서 멤캐시 테스트 (실제 클라이언트가 아닌 장난감 스트레스 테스터) 사용 중인 시스템에 따라 초당 수만에서 수십만 건의 작업을 쉽게 처리할 수 있는 것으로 알고 있습니다.

많은 버그 보고서가 복구 실패를 지적하고 있었기 때문에 복구에 방해가 되는 요소를 찾기 시작했습니다. 그 결과 동기식 시간 초과를 구현하는 메커니즘이 해당 항목이 지정된 MemcachedNode 객체에 쓰여지는 것을 막기 위해 아무 조치도 취하지 않는다는 사실을 알게 되었습니다.

다시 말해, 노드를 처리하는 스레드가 주어진 작업 시간에 충분히 주의를 기울이지 않았습니다.

한 가지 상황에서 하나의 연산만 생각해보면, 매우 바쁘거나 일시적인 중단이 발생하여 네트워크에 데이터를 전송하는 버퍼가 가득 차면 다른 스레드가 해당 MemcachedNode에 더 많은 연산을 쌓아두는 것을 막을 수 있는 방법이 없습니다. 이러한 작업은 호출 스레드에서 시간 초과되지만 네트워크를 통해 계속 전송됩니다. 이렇게 하면 사용되지 않을 백로그가 처리될 때까지 일시적인 중단의 효과가 연장됩니다. 서버가 매우 포화 상태인 경우에는 복구되지 않을 수도 있습니다.

2.6 릴리스 후보의 코드 변경으로 이제 시간이 초과된 작업을 전송하는 것조차 방지할 수 있게 되었습니다. 이미 좋은 피드백을 받았고 Membase 테스트를 위해 정리하는 데 도움이 되었지만, spymemcached, memcached, Membase처럼 널리 배포된 프로젝트의 경우 실제 피드백을 받는 것이 좋습니다. 기존 spymemcached를 사용 중이시라면 한 번 사용해 보시고 알려주세요.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 제니퍼 가르시아

의 선임 웹 관리자입니다. 웹 사이트 관리자로서 디자인, 구현, 콘텐츠 및 성능을 포함한 웹 사이트 자산에 대한 전반적인 책임을 맡고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.