Squid lub inne pamięci podręczne HTTP w SSD Cache Store?

9

Zastanawiam się nad utworzeniem pamięci podręcznej na kałamarnicę (lub ewentualnie lakierowanie) w systemie z dyskami SSD.

Oczywistą korzyścią jest to, że systemy te mają świetne prędkości odczytu i oczekuję, że moje współczynniki trafień będą dość wysokie.

Załóżmy, że mogę umieścić 7 dysków SSD w konfiguracji RAID. (są przypadki, które pozwolą mi spakować znacznie więcej)

Pytania implementacyjne:

  • Czy powinienem używać RAID0? (Spodziewam się, że dysk ostatecznie się nie powiedzie, więc wydaje się to niebezpieczne.)

  • Czy powinienem używać RAID10? (Zmniejsza to o połowę powierzchnię mojego dysku, co jest kosztowne).

  • Czy powinienem używać RAID5? (Wiadomo, że dyski SSD mają „złą” wydajność zapisu i limity zapisu, a wszystkie dodatkowe zapisy parzystości mogą to znacznie spowolnić).

  • Czy powinienem traktować każdy dysk jako własny magazyn danych squid? (jak dobrze kałamarnica radzi sobie z wieloma magazynami danych? i co się stanie, jeśli / kiedy jeden zawiedzie?)

  • Czy powinienem zignorować magazyny danych i po prostu włączyć dyski SSD do dużych partycji SWAP i pozwolić maszynie wirtualnej systemu Linux to zrobić? (wydaje się niechlujny)

Wszelkie porady od osób używających dysków SSD w środowiskach produkcyjnych byłyby bardzo mile widziane. (szczególnie jeśli używasz ich do pamięci podręcznych HTTP)

Joel K.
źródło
+1 za interesujące pytanie, nigdy nie zastanawiałem się nad przekształceniem dysków w dużą partycję wymiany
Bob
Tak, zdecydowanie interesujące ... chociaż jestem bardzo skłonny nie wpaść w modę SSD i po prostu dodać więcej pamięci RAM za te pieniądze.
Oskar Duveborn
Niestety potrzebna pamięć podręczna nie zmieści się w pamięci RAM. Mam już dla tych obiektów bufory kałamarnic z pamięcią RAM.
Joel K

Odpowiedzi:

8

Używamy lakieru na dyskach SSD przez ostatnie 9 miesięcy, działało to dla nas bardzo dobrze. Wcześniej używaliśmy tylko pamięci podręcznej z kałamarnicą z warstwą karpia. Działało, ale fragmentacja pamięci była prawdziwym problemem wymagającym częstych restartów. Squid 2.x będzie również używał tylko jednego rdzenia, co czyni go raczej nieefektywnym na obecnym sprzęcie.

W przypadku naszej witryny, która jest bardzo przyjazna dla pamięci podręcznej, widzimy około 10% użycia procesora na 8-rdzeniowej maszynie obsługującej ruch 100 Mb / s. W naszych testach zabrakło nam przepustowości, zanim osiągnęliśmy limit procesora dzięki 2 portom 1 Gb.

Mam kilka rad dotyczących uruchamiania lakieru z pamięcią podręczną ssd.

  • Losowe pisanie naprawdę ma znaczenie. Wypróbowaliśmy kilku dostawców dysków SSD, zanim zdecydowaliśmy się na Intel X-25M. Widzieliśmy kilka postów o wielkości zaledwie 1 MB / s dla losowych zapisów 4k, otrzymujemy 24 MB / s losowych zapisów 4k przy x-25m.

  • Rajd 0. Pamięć podręczna w 2.0 nie jest trwała, więc nie musisz się martwić o nadmiarowość. Powoduje to, że restartowanie boli, ale są one rzadkie. Możesz wykonywać takie czynności, jak ładowanie nowej konfiguracji i usuwanie obiektów bez ponownego uruchamiania.

  • tryb mmap. Pamięć podręczną lakieru można zmapować do pliku lub użyć przestrzeni wymiany. Korzystanie z zamiany nie działało dla nas dobrze, zwykle wykorzystuje większą przepustowość we / wy do obsługi tej samej ilości ruchu. W kodzie swapin linuksa znajduje się 4 sektorowa readahead, napisaliśmy łatkę, aby ją usunąć, ale nie wypróbowaliśmy jej w produkcji.

  • Harmonogram terminów. W wersji 2.6.28+ jest to świadome ssd i działa dobrze. Próbowaliśmy noop, ale ustaliliśmy, że termin był sprawiedliwszy, ponieważ przepustowość we / wy staje się ograniczona.

  • Wyłącz czytanie z wyprzedzeniem. Ponieważ nie ma opóźnienia obrotowego, nie ma sensu czytać dodatkowych danych tylko dlatego, że możesz ich potrzebować. przepustowość we / wy jest cenna w tych sprawach.

  • Uruchom 2.6.28+. mmap dużej ilości miejsca na Linuksie daje menedżerowi pamięci dobry trening, ale podzielone łatki Lru bardzo pomagają. użycie procesora kswapd znacznie spadło, gdy zaktualizowaliśmy.

Opublikowaliśmy nasz plik vcl, a także kilka narzędzi, których używamy z lakierem w tekście linku . Vcl zawiera także porządny hack implementujący bardzo szybki serwer geoiplookup oparty na bazie danych maxmind.

Jason Cook
źródło
1

Nie używam dysków SSD jako pamięci podręcznych HTTP, ale mogę poczynić następujące obserwacje:

Nie wszystkie dyski SSD są równe, więc musisz bardzo ostrożnie wybierać przyzwoite. FusionIO tworzy dyski SSD z obsługą PCIe, które są naprawdę wysokiej klasy (o stosunkowo małej pojemności), ale kosztowne. Dyski SSD SLC X25-E Intela działają naprawdę dobrze i są tańsze, ale wciąż mają małą pojemność. Wykonaj swoje badania! Zdecydowanie mogę polecić warianty X25-E SLC, ponieważ używam ich w systemach produkcyjnych.

Istnieją inne dyski SSDS, które mogą zapewnić doskonałą sekwencyjną szybkość odczytu / zapisu, ale ważna rzecz dla czegoś takiego jak pamięć podręczna to losowe operacje we / wy, a wiele dysków SSD daje w przybliżeniu taką samą losową wydajność jak wirujące dyski. Ze względu na efekty wzmocnienia zapisu na dyskach SSD, wirujące dyski często działają lepiej. Wiele dysków SSD ma słabej jakości kontrolery (np. Starsze kontrolery JMicron), które mogą cierpieć z powodu znacznie obniżonej wydajności w niektórych sytuacjach. Anandtech i inne strony robią dobre porównania z narzędziami takimi jak iometr, sprawdź tam.

I oczywiście dyski SSD są małe. Intel X25-E, który powiedziałbym, że jest najlepszym dyskiem SSD SATA, jaki widziałem, występuje tylko w wariantach 32 i 64 GB.

W przypadku poziomów RAID nadal obowiązują standardowe uwagi dotyczące wydajności RAID. Zapis do macierzy RAID 5 polega na czytaniu bloku danych, który zamierzasz zmodyfikować, czytaniu bloku parzystości, aktualizowaniu parzystości, pisaniu bloku danych i pisaniu parzystości, więc nadal będzie dawać gorszą wydajność niż inne macierze RAID poziomy, nawet z dyskami SSD. Jednak w przypadku dysków takich jak X25-E o tak wysokiej wydajności losowego we / wy, prawdopodobnie nie ma to większego znaczenia - ponieważ nadal będzie przewyższać losowe we / wy na wirujących dyskach dla macierzy o podobnej wielkości.

Z tego, co widziałem, przepustowość kontrolera RAID jest zbyt wcześnie nasycona, aby w pełni wykorzystać 7-dyskowy zestaw RAID, przynajmniej jeśli chodzi o wydajność sekwencyjną. Nie można uzyskać więcej niż około 800 MB / s z obecnych modeli kontrolerów SATA (3ware, areca itp.). Posiadanie większej liczby mniejszych macierzy na wielu kontrolerach (np. Kilka RAID1 zamiast jednego RAID10) poprawi to, chociaż ucierpi indywidualna wydajność każdej macierzy.

Jeśli chodzi o pamięć podręczną HTTP, myślę, że lepiej byłoby ci podać przyzwoitą liczbę obracających się dysków i mnóstwo pamięci RAM. Często używane obiekty pozostaną w pamięci podręcznej pamięci - albo w wewnętrznej pamięci podręcznej kałamarnicy, albo w pamięci podręcznej fs systemu operacyjnego. Po prostu nadanie maszynie więcej pamięci RAM może znacznie zmniejszyć obciążenie dysku z tego powodu. Jeśli korzystasz z dużej pamięci podręcznej kałamarnic, prawdopodobnie potrzebujesz dużej ilości miejsca na dysku, a wysokowydajne dyski SSD wciąż mają stosunkowo małą pojemność.

Daniel Lawson
źródło
Nawet X25-M są użyteczne
pirolistyczny
Odrobiłem pracę domową i wiem, jak unikać JMicrons. Rozważałem głównie X25-Ms (Intel MLC) i być może nowszą (nie JMicron) serię OCZ Vertex.
Joel K,
wow, wierzchołek ocz ma niższy maksymalny losowy zapis niż nawet x25-m !!!
Pirolistyczny
1

Nie znam się dobrze na dyskach SSD, ale mogę mówić o architekturze, z której korzystałem, co może pomóc rozwiązać niektóre z twoich problemów.

Rodzeństwo

W moim przypadku zbudowałem cztery serwery z 16 GB pamięci RAM każdy. Ustawiłem 9 GB jako pamięć podręczną w pamięci dla Squid. Skonfigurowałem je jako zestaw rodzeństwa, więc zapytanie do jednego serwera zapyta inne, zanim zacznie szukać danych. W sumie miałem 36 GB pamięci podręcznej. Nie dostałbym więcej niż czwórki rodzeństwa, ponieważ komunikacja między nimi zaczyna się zacinać.

VIP-y

Skonfigurowałem VIP dla czterech serwerów, z którymi klient może rozmawiać. Rozwiązało to, co się dzieje, gdy jeden serwer przestaje działać.

Dzieci

Skonfigurowałem moją aplikację internetową do wysyłania zapytań do lokalnego serwera Squid działającego na 127.0.0.1. Następnie skonfiguruj element nadrzędny tej instancji Squid jako VIP. Pozwala to na bardzo szybkie przełączenie awaryjne w przypadku awarii całego VIP. Jeśli rodzice nie odpowiedzą, dziecko bezpośrednio pyta o usługi. Jest to również przydatne, jeśli używasz jednego serwera Squid i nie masz VIP-a. Oczywiście, jeśli lokalna instancja Squid na twoim serwerze spadnie, wszystko się zatrzyma.

Squid

Tak naprawdę nie patrzyłem na 3.0, ale 2.x wciąż jest jednowątkowy. W pewnym momencie zabraknie buforów procesora lub TCP. Jeśli to możliwe, rozłożyłbym pamięć podręczną na 2-3 pola mniej. Możesz także chcieć planować podział farm Squid w przyszłości, jeśli zauważysz, że system się rozrasta.

W każdym razie powodzenia z kompilacją SSD. Chciałbym usłyszeć, jak to się potoczy, ponieważ prawdopodobnie wybiorę tę trasę w przyszłości.

kashani
źródło
0

Dlaczego nawet rozważasz rajd 10 lub 5. Chcesz tutaj wydajności. Nie obchodzi Cię, czy dyski po prostu spadną, ponieważ jest to tylko pamięć podręczna.

Po prostu użyj RAID 0 lub trzymaj je oddzielnie. Myślę, że oddzielne byłoby lepsze, ponieważ awaria dysku nie obciążyłaby całej pamięci podręcznej.

Pirolistyczny
źródło
Jak dobrze odzyskuje Squid, jeśli wypadnie pojedynczy magazyn danych? (oczywiście muszę to przetestować) RAID5 to kompromis, jeśli Squid nie jest wdzięczny za awarię magazynu danych.
Joel K
-1

Dokumentacja Squid zaleca nie używanie RAID, ale skonfigurowanie dodatkowych katalogów pamięci podręcznej na dodatkowych dyskach.

Gość
źródło
1
Podaj link do odpowiedniej sekcji dokumentacji Squid.
Andrew Schulman,