2016년 9월 23일 금요일

Couchbase ( Compaction 시 응답 지연 현상 분석 )

Couchbase Compaction시에 put 처리가 지연 되는 현상과 예상한 것 보다 Throughput 이 나오지 않는 현상을 테스트를 재현하였고, 이에 대한 원인 분석을 진행함. 

1.     현상
A.     Couchbase compaction ( 데이터 압축과 삭제 작업) 시 로그 적제 지연 현상
B.      Throughput 이 예상한 것 보다 낮게 나오는 현상

2.     문제
A.     APP 에서 Couchbase 연결 옵션 중 Persist_to 옵션을 사용함으로 Compact 시에 발생되는 File Locking 으로 인해 Client Request 에 대한 Sync 를 하지 못해 대기 하는 현상

B.      Persist_to Replica_to 옵션을 사용하므로 인해 Client 1 Tier 에서 성공 Return 을 받지 못하고 File I/O Replica 전체에 Success 처리를하고 나서 응답을 받아야 하므로, Throughput 이 낮게 나오는 현상

3.     용어 설명
A.     SET Durability 파라미터 지정 
                         i.         해당 파라미터는 성능을 위해 Insert Operation 시 메모리만 저장하고 리턴을 받을 것이냐, 안정성을 중요시하여 디스크에 Sync 를 확인하고  Return 받을 것이냐를
소스 연결 옵션에서 지정하는 파라미터 입니다. NoSQL 특성 상(In-memory Cache 메커니즘을 가지고 있는) 안정성을 중시하여 Disk Sync 하는 로직으로 사용하는 경우를 권장하지 않습니다.
메모리 Cache 를 거의 활용하지 못하기 때문입니다.

종류
설명
예시
Persist_to : [0~4]

기본적인 Insert Operation 은 데이터가 메모리 영역에 쓰고 나면 바로 Return 됩니다. 이는 빠른 성능을 위함입니다
이파라미터를 사용하여 0~4 숫자를 지정하게 되면 해당 노드 수만큼 디스크에 쓰고 나서 콜백함수로 Return 을 하기 때문에 데이터의 영구성을 보장할 수 있습니다. 0~4까지 지정이 가능합니다. ( 성능을 위해서는 0을 권장합니다. NONE)
bucket.insert(usert_id, doc, {persist_to :1, replicate_to : 1 } , function (err,result)
{
     console.log(" TEST)"
}
Replicate_to : [0~3]

Insert 를 통해 저장된 데이터가 얼마나 많은 복사본에 저장되고 나서 Return 될지에 대해 지정합니다. 복사본은 본인 노드를 제외하고 
최대 세개까지 이므로 0~3까지 지정할 수 있습니다.  (성능을 위해서는 0을 권장합니다.NONE)

                        ii.         실제 경험상 위 프로퍼티 들을 쓰지 않아도, 서버 Crash 가 나는 경우 Commit 된 데이터가 사라지는 경우는 약 1초 이내 발생하여 Disk 에 영구저장하지 못한 데이터 정도 입니다.  
1.      (위 프로퍼티들을 쓰지 않아도, 데이터는 영구 저장되나 순간적 Crash 상황 시 약간의 데이터 손실이 있을 수 있음. 그것을 방지하는 세션 프로퍼티임)

4.     재현 및 확인 사항
A.     Benchmark Tool 로 자주 사용하고 있는 3.0 버전 및 4.1.0 버전을 Persist_to 옵션과 Recplicate_to 옵션을 적용하여 재현 해본 결과 현재 서비스에서 나타나고 있는 Compaction
응답지연 현상이 동일하게 발생하였습니다.   


5.     권장 사항
A.     couchbase  성능과 확장성을 위해 사용하게 되므로, 위 프로퍼티들을 모두 NONE 또는 0으로 하여 사용하시길 권장 드리며,  만약 반드시 100% 데이터 보장을 하셔야 한다면 1 이상은 권장하지 않습니다.  
또한 이런 경우라면MSSQL 또는 Mysql 같은 RDB 를 사용하시는것이 더 효율적이며, 안정적일 수 있습니다.                                                                                                                                

B.     APP  소스나 툴에서 위 프로퍼티들을 Disable 하여 사용하시길 권장 드립니다.
C.     재현 Benchmark Tool 에서도 위 프로퍼티를 Disable 할 경우 Compaction 시에 응답 지연되는 현상은 발생하지 않았습니다.


댓글 없음:

댓글 쓰기