2012-05-14 3 views
10

에 대한 키 - 값 스토어 낮은 대기 시간 :우리는 다음과 같은 특성을 가진 SSD-백업 키 - 값 솔루션에서 작업하는 SSD

  • 처리량 : 10,000 TPS; 50/50 박자/득점;
  • 지연 시간 : 1ms 평균, 99.9th 백분위 수 10ms
  • 데이터 볼륨 : ~ 10 억 값, 각각 ~ 150 바이트; 64 비트 키; 랜덤 액세스는 데이터의 20 %는 RAM에 맞는

우리는 다른 리눅스 IO 스케줄러, EXT3/XFS 파일 시스템, 상품의 SSD에 KyotoCabinet, LevelDB 및 RethinkDB을 시도 ; Rebench을 사용하여 여러 가지 테스트를 수행했습니다. 읽기 전용 처리량/대기 시간

  • 쓰기/업데이트 전용 전역 보통이지만, 많은 대기 시간이 아웃 라이어가
  • 혼합 읽기/쓰기 작업이 매우 좋다 : 모든 경우에 발견 처리량 치명적인 진동 발생/지연 심지어 블록 장치에 직접 액세스하는 경우에 (우회 파일 시스템)

사진 아래 KyotoCabinet 대한 이러한 동작을 도시한다 (횡축은 시간, 세 기간 읽기 전용, 혼합, 업데이트 전용).

질문 : SSD를 사용하여 설명 된 SLA에 대한 대기 시간을 줄이고 어떤 키 - 값 저장소를 권장 할 수 있습니까?

enter image description here

+2

이것은 좋은 질문이지만 토론 스레드이므로 (SO의 범위를 벗어남) SO 주제가 아닙니다. 직접 프로그래밍 관련이 아니기 때문에 어디에서 적절한 것인지 잘 모르겠습니다. –

+0

이 점을 이해하지만 핵심 질문은 매우 간단합니다. 상품 SSD에서 읽기/쓰기 대기 시간이 1ms 미만인 키 - 값 저장소가 있습니까? – user1128016

+2

내가 말했듯이 좋은 질문이지만 프로그래밍과 직접적인 관련이 없습니다. [sf] 또는 아마도 [dba.se]에서 더 나은 견인력을 얻으실 수 있습니다 –

답변

0

이는 무모한 생각 종류-이다 그러나 그것은 작동 할 수 있습니다. SSD가 128GB라고 가정 해 봅시다.

  1. 벤치 마크 128기가바이트 메모리 제한을 스왑으로
  2. 설치 프로그램이 컴퓨터에 memcached를 것을 사용하도록 시스템을 구성 SSD
  3. 에 1백28기가바이트 스왑 파티션을 생성하고 설정

윌 커널은 충분한 정보를 빠르게 페이징 할 수 있어야합니까? 알 길이 없습니다. 이는 커널보다 하드웨어에 더 달려 있습니다.

Poul-Henning Kamp는 Varnish를 만들기보다는 커널이 Varnish에 대한 것 (가상 대 실제 메모리)을 추적하도록하여 Varnish에서 이와 비슷한 작업을 수행합니다. https://www.varnish-cache.org/trac/wiki/ArchitectNotes

3

매우 다양한 쓰기 대기 시간은 SSD (특히 소비자 모델)의 일반적인 특성입니다. 이 이유에 대한 좋은 설명이 AnandTech review에 있습니다.

요약하면 마모 균등화 오버 헤드가 증가함에 따라 SSD 쓰기 성능이 초과 근무 시간으로 악화됩니다. 드라이브의 빈 페이지 수가 감소하면 NAND 컨트롤러는 페이지 조각 모음을 시작해야하므로 대기 시간이 길어집니다. 또한 NAND는 다양한 NAND 블록에서 데이터의 무작위 배분을 추적하기 위해지도를 차단하는 LBA를 구축해야합니다. 이지도가 커지면지도 (삽입, 삭제) 작업이 느려집니다.

SW 접근 방식으로 낮은 수준의 HW 문제를 해결할 수 없으며 엔터프라이즈 수준 SSD로 이동하거나 대기 시간 요구 사항을 완화해야합니다.

1

Aerospike은 읽기/쓰기 및 높은 TPS (수백만에 도달)에 대해 대기 시간이 < 1ms 인 SSD에서 완전히 실행할 수있는 최신 키/값 (행) 저장소입니다.

SSD의 랜덤 읽기 액세스는 뛰어나지 만 쓰기의 분산을 줄이기위한 열쇠는 순차 IO (일반 하드 디스크와 유사 함)를 사용하는 것입니다. 또한 SSD에서 많은 쓰기 작업으로 발생할 수있는웨어 레벨링 및 페이드를 크게 줄입니다.

키 - 값 시스템을 구축하려는 경우, 로그 작성 방식 (예 : Aerospike)을 사용하여 글을 대량으로 작성하고 추가/큰 덩어리로 작성하십시오. 인 메모리 인덱스는 백그라운드 프로세스가 오래된 데이터/삭제 된 데이터를 디스크에서 정리하고 파일을 조각 모음하는 동안 값에 대한 올바른 데이터 위치를 유지 관리 할 수 ​​있습니다.

관련 문제