Kiedy musimy optymalizować (zwiększać lub zmniejszać) osiągi macierzy to do dyspozycji mamy dwa narzędzia: cache lub „tiering”. Buforowanie to proces, który przenosi najczęściej używane dane do bufora kontrolera pamięci masowej. Obecnie jako bufory stosuje się dyski SSD, taka funkcjonalność nosi nazwę SSD cache. Dlatego użytkownik żądający dostępu do danych, które znajdują się już w buforze nie musi czekać, aż zostaną one odczytane z dysków macierzy; Po prostu dane są przesyłane bezpośrednio z pamięci cache. Jak sobie wyobrażasz odbywa się to bardzo, bardzo szybko.
Tiering natomiast odnosi się do przepływu danych z jednej grupy dysków do innej grupy; z wolniejszych na szybsze dyski (lepsza wydajności, dla ważnych danych biznesowych) lub z szybszych na wolniejsze dyski (ograniczenie wydajności, dla mniej ważnych danych użytkowników). Przykładem mogą być twoje ważne dane przechowywane na dyskach SAS oraz dane pracowników, które nie wymagają dużej ilości IOPS.
Oba rozwiązania mają plusy i minusy. Cache jest nie konfigurowalny przez użytkownika, jako podręczna pamięć operacyjna jest zarządzany przez kontroler pamięci masowej. Jest on bardzo szybki ponieważ pracuje tak jakby bezpośrednio na szynie – dzięki temu dane nie muszą być przesyłane przez podsystem dysków (SAS, SATA), co za tym idzie nie musi konkurować z innymi operacjami I/O na poziomie dysków. Jeszcze jakiś czas temu, było to drogie rozwiązanie, ale teraz gdy ceny dysków SSD spadły rozwiązanie SSD cache staje się naprawdę atrakcyjne.
Główną zaletą „tieringu” jest to, że ma możliwość konfiguracji przez użytkownika. Jednak nie wszystko jest proste: w złożonych środowiskach, optymalizacja „tieringu” może być dosłownie zbyt skomplikowana. Ponadto ręczny „tiering” jest nie realny bo niby skąd będziesz wiedział jakie potrzeby ma twoja pamięć masowa. Co do automatycznego „tieringu”: skąd jutro będziesz wiedział, która aplikacja biznesowa będzie miała największe zapotrzebowanie? Ponownie, w złożonych środowiskach, na to stosunkowo proste pytanie będzie bardzo trudno odpowiedzieć. Plusem tiering jest to, że oferuje większą elastyczność w zakresie, decydowania gdzie mają być przechowywane dane.
Cache to cache, niezależnie od środowiska; dane są w pamięci cache lub nie. Z drugiej strony, „tiering” potrafi dynamiczne przenosić dane między różnymi dyskami SAS lub SATA, w zależności od potrzeb biznesowych.
Jeżeli jednak wykorzystujesz „tiering” w celu uzyskania najlepszej wydajności to wtedy musisz sobie poradzić z ogromnym problemem: tiering zwiększa obciążenie całego systemu pamięci masowej! Tiering generuje opóźnienia, ponieważ żeby przenieść dane z jednej grupy RAID na drugą dosłownie tworzy IOPS, co zwiększa wydajności! Oznacza to, że w celu uzyskania większej wydajności, generujemy większe czasy opóźnienia.
Dla porównania buforowanie jednocześnie redukuje opóźnienie i zwiększa wydajność. Dzieje się tak, ponieważ dane nie są tak naprawdę przenoszone: tylko przy pierwszym zapytaniu dane są kopiowane z dysków do cache i pozostają tam na jakiś czas. Jeżeli w tym czasie nastąpi ponowne zapytanie to dane zostaną przesłane już bezpośrednio z cache. Wtedy dzieje się to bardzo szybko!
Poniższy wykres przedstawia osiągi przy odczycie dużej bazy SQL, najciekawsze na tym wykresie jest to, że wraz ze wzrostem wydajności (czerwona linia) spada opóźnienie (niebieska linia)!
Jeżeli szukasz zwiększenie wydajności poprzez „tiering”, to musisz zdawać sobie sprawę z dwóch rzeczy. Jeżeli twoje dane zostały już przeniesione przez „tiering” to wydajność wzrośnie, podczas gdy opóźnienie pozostanie na tym samym poziomie. Natomiast jeżeli dane będą dopiero przenoszone to spadnie wydajność, a opóźnienie wzrośnie; tylko po zakończeniu transferu danych odczujesz zwiększenie wydajności.
Jeżeli chcesz uzyskać dobrą wydajności w systemie pamięci masowej, to buforowanie jest po prostu lepsze niż „tiering”. Dlatego idealnym rozwiązaniem będą systemy firmy Qsan, producenta profesjonalnych macierzy NAS i SAN.
3 Comments