SSD 캐시 저장소가있는 오징어 또는 기타 HTTP 캐시?


9

SSD 드라이브가있는 시스템에서 오징어 캐시를 설정하려고합니다.

명백한 이점은 이러한 시스템의 읽기 속도가 뛰어나고 적중률이 상당히 높을 것으로 예상합니다.

7 개의 SSD를 RAID 구성에 넣을 수 있다고 가정 해 봅시다. (내가 훨씬 더 많이 포장 할 수있는 경우가 있습니다)

구현 질문 :

  • RAID0을 사용해야합니까? (드라이브가 결국 실패 할 것으로 예상되므로 위험합니다.)

  • RAID10을 사용해야합니까? (이로 인해 디스크 사용 공간이 절반으로 줄어 듭니다.)

  • RAID5를 사용해야합니까? (SSD는 쓰기 성능과 쓰기 제한이 "나쁜"것으로 알려져 있으며 모든 추가 패리티 쓰기로 인해 속도가 상당히 느려질 수 있습니다.)

  • 각 디스크를 자체 오징어 데이터 스토어로 취급해야합니까? (오징어는 여러 데이터 저장소를 얼마나 잘 처리합니까? 실패하면 어떻게됩니까?)

  • 데이터 저장소를 무시하고 SSD를 큰 SWAP 파티션에 넣고 리눅스 VM이 작동하게해야합니까? (조잡 해 보인다)

프로덕션 환경에서 SSD를 사용하는 사람들의 조언은 크게 감사하겠습니다. (HTTP 캐시에 사용하는 경우 esp)


흥미로운 질문으로 +1, 나는 큰 스왑 파티션으로 드라이브를 만드는 것을 고려하지 않았습니다
Bob

그래도 확실히 흥미 롭습니다 ...하지만 SSD 밴드 왜건에 빠지지 않고 대신 그 돈을 위해 RAM을 더 추가하는 경향이 있습니다.
Oskar Duveborn

안타깝게도 필요한 캐시 공간은 RAM에 맞지 않습니다. 해당 객체에 대해 RAM 기반 오징어 캐시가 이미 있습니다.
Joel K

답변:


8

우리는 지난 9 개월 동안 ssd 드라이브에 바니쉬를 사용해 왔으며 우리에게 매우 효과적이었습니다. 우리는 이전에 잉어 층이있는 오징어 메모리 전용 캐시를 사용했습니다. 작동했지만 메모리 조각화는 빈번한 재시작이 필요한 실제 문제였습니다. Squid 2.x는 하나의 코어 만 사용하므로 현재 하드웨어에서는 비효율적입니다.

캐시에 매우 친숙한 사이트의 경우 100Mbit / s의 트래픽을 처리하는 8 개의 코어 시스템에서 약 10 %의 CPU 사용량을 볼 수 있습니다. 테스트에서 2 개의 1Gb 포트로 CPU 한계에 도달하기 전에 대역폭이 부족합니다.

ssd 캐시로 니스를 실행하는 것에 대한 조언이 있습니다.

  • 임의 쓰기 성능이 실제로 중요합니다. 인텔 x-25m에 정착하기 전에 ssd 드라이브에 대한 여러 공급 업체를 시도했습니다. 우리는 4k 랜덤 쓰기에 대해 .1MB / s 정도의 작은 게시물을 보았습니다 .x-25m으로 24MB / s 4k 랜덤 쓰기를 얻습니다.

  • 레이드 0. 2.0의 캐시는 영구적이지 않으므로 중복에 대해 걱정할 필요가 없습니다. 이렇게하면 재시작이 다 치지 만 드물다. 다시 시작하지 않고 새 구성을로드하고 객체를 제거하는 등의 작업을 수행 할 수 있습니다.

  • mmap 모드. 바니시 캐시는 파일로 mmap'd되거나 스왑 공간을 사용할 수 있습니다. 스왑을 사용하는 것은 우리에게 잘 작동하지 않았으며 동일한 양의 트래픽을 처리하기 위해 더 많은 I / O 대역폭을 사용하는 경향이 있습니다. 리눅스 스왑 인 코드에는 4 개의 섹터가 있습니다. 우리는 이것을 제거하기위한 패치를 작성했지만 프로덕션 환경에서는 시도하지 않았습니다.

  • 마감일 스케줄러. 2.6.28 이상에서는 ssd를 인식하고 잘 수행됩니다. 우리는 noop을 시도했지만 i / o 대역폭이 제한됨에 따라 마감일이 더 공정하다는 것을 알았습니다.

  • 미리 읽기를 비활성화하십시오. 회전 지연이 없기 때문에 필요할 수 있기 때문에 추가 데이터를 읽을 필요가 없습니다. 이러한 점에서 i / o 대역폭은 소중합니다.

  • 2.6.28+를 실행하십시오. 리눅스에서 많은 공간을 차지한다면 메모리 관리자는 좋은 운동을 할 수 있지만, lru 패치는 많은 도움이됩니다. 업데이트했을 때 kswapd CPU 사용량이 많이 떨어졌습니다.

우리는 vcl 파일과 링크 텍스트에 varnish와 함께 사용하는 여러 도구를 게시했습니다 . vcl에는 maxmind 데이터베이스를 기반으로 매우 빠른 geoiplookup 서버를 구현하는 깔끔한 해킹도 포함되어 있습니다.


1

SSD를 HTTP 캐시로 사용하지 않지만 다음과 같은 관찰을 할 수 있습니다.

모든 SSD가 동일한 것은 아니므로 적절한 SSD를 선택하는 데 매우 신중해야합니다. FusionIO는 실제로 고성능 (상대적으로 저용량)이지만 비용이 많이 드는 PCIe 지원 SSD를 만듭니다. 인텔의 X25-E SLC SSD는 성능이 뛰어나지 만 더 저렴하지만 여전히 저용량입니다. 당신의 연구를하십시오! 프로덕션 시스템에서 X25-E SLC 변형을 사용하므로 확실히 추천 할 수 있습니다.

거기에는 다른 sequetial read / write 속도를 제공하는 다른 SSD가 있지만 캐시와 같은 중요한 것은 임의 IO이며 많은 SSD는 회전 디스크와 거의 동일한 임의의 성능을 제공합니다. SSD의 쓰기 증폭 효과로 인해 회전 디스크의 성능이 향상되는 경우가 많습니다. 많은 SSD에는 품질이 좋지 않은 컨트롤러 (예 : 이전 JMicron 컨트롤러)가있어 일부 상황에서 성능이 크게 저하 될 수 있습니다. Anandtech 및 기타 사이트는 iometer와 같은 도구와 잘 비교됩니다.

물론 SSD는 작습니다. 내가 본 최고의 SATA SSD 인 Intel X25-E는 32GB와 64GB 변형으로 만 제공됩니다.

RAID 레벨의 경우 표준 RAID 성능 참고 사항이 계속 적용됩니다. RAID 5에 쓰는 작업은 기본적으로 수정하려는 데이터 블록 읽기, 패리티 블록 읽기, 패리티 업데이트, 데이터 블록 쓰기 및 패리티 쓰기를 포함하므로 다른 RAID보다 여전히 성능이 저하됩니다. SSD로도 레벨을 유지합니다. 그러나 X25-E와 같은 임의의 IO 성능이 높은 드라이브의 경우 비슷한 크기의 어레이를위한 회전 디스크에서 여전히 임의의 IO보다 성능이 뛰어 나기 때문에 아마도 그다지 중요하지 않습니다.

내가 본 것으로부터, 적어도 순차적 성능에 관한 한, RAID 컨트롤러 대역폭은 7 디스크 RAID 세트를 최대한 활용하기에는 너무 빨리 포화 상태입니다. 현재 SATA 컨트롤러 모델 (3ware, areca 등)에서 약 800MB / s를 초과 할 수 없습니다. 여러 컨트롤러 (예 : 단일 RAID10이 아닌 여러 RAID1)에서 더 작은 어레이를 사용하면 각 어레이의 개별 성능이 저하되지만이를 개선 할 수 있습니다.

HTTP 캐시와 관련하여 괜찮은 수준의 회전 디스크와 많은 램을 사용하는 것이 좋습니다. 자주 액세스하는 객체는 오징어의 내부 캐시 또는 OS의 fs 캐시에 메모리 캐시에 남아 있습니다. 머신에 더 많은 램을 제공하면 이로 인해 디스크로드를 크게 줄일 수 있습니다. 큰 오징어 캐시를 실행하는 경우 많은 디스크 공간이 필요할 것입니다. 고성능 SSD는 여전히 상대적으로 용량이 적습니다.


X25-M조차도 사용할 수 있습니다
Pyrolistical

숙제를했고 JMicrons를 피하는 것을 알고 있습니다. 나는 주로 X25-Ms (Intel MLC)와 아마도 새로운 (JMicron이 아닌) OCZ Vertex 시리즈를 고려하고있었습니다.
Joel K

와우, ocz 버텍스는 x25-m보다 최대 랜덤 쓰기가 낮습니다 !!!
Pyrolistical

1

SSD 드라이브에 익숙하지는 않지만 문제의 일부를 해결하는 데 도움이 될 수있는 일종의 아키텍처에 대해 이야기 할 수 있습니다.

형제 자매

필자의 경우에는 각각 16GB의 RAM으로 4 대의 서버를 구축했습니다. Squid가 사용할 메모리 캐시로 9GB를 설정했습니다. 한 서버에 대한 쿼리가 데이터를 찾기 전에 다른 서버에 쿼리하도록 형제 집합으로 구성했습니다. 모두 36GB의 메모리 캐시가 있습니다. 그들 사이의 의사 소통이 멈춰지기 시작하면서 나는 네 명의 형제 자매를 극복하지 못했습니다.

VIP

클라이언트가 대화하기 위해 4 대의 서버에 VIP를 구성했습니다. 이것은 하나의 서버가 다운 될 때 발생하는 문제를 해결했습니다.

어린이

127.0.0.1에서 실행되는 로컬 오징어 서버를 쿼리하도록 웹 응용 프로그램을 설정했습니다. 그런 다음이 Squid 인스턴스의 부모가 VIP가되도록 구성했습니다. 이를 통해 전체 VIP가 중단되는 경우 매우 빠른 장애 조치가 가능합니다. 부모가 응답하지 않으면 자녀는 서비스에 직접 문의합니다. 단일 Squid 서버를 사용하고 VIP가없는 경우에도 편리합니다. 물론 웹 서버의 로컬 Squid 인스턴스가 다운되면 모든 것이 중단됩니다.

오징어 자체

나는 실제로 3.0을 보지 않았지만 2.x는 여전히 단일 스레드입니다. 어느 시점에서 CPU 또는 TCP 버퍼가 부족합니다. 가능한 경우 2-3 상자에 캐시를 뿌렸습니다. 또한 시스템이 커지면 향후 오징어 팜을 분할 할 계획을 세우고 싶을 수도 있습니다.

어쨌든 SSD 빌드로 행운을 빕니다. 나는 미래에 그 길을 갈 때 어떻게 될지 듣고 싶다.


0

왜 레이드 10 또는 5를 고려하고 있습니까? 캐시 만 있기 때문에 드라이브가 다운되는지 걱정하지 않아도됩니다.

raid 0을 사용하거나 별도로 유지하십시오. 드라이브 고장으로 인해 전체 캐시가 다운되지 않기 때문에 별도의 것이 더 좋을 것이라고 생각합니다.


단일 데이터 저장소가 빠지면 ​​Squid는 얼마나 잘 복구됩니까? (분명히 테스트해야합니다) RAID5는 Squid가 데이터 저장소 실패에 대해 우아하지 않은 경우 타협합니다.
Joel K

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.