Kompresja Przechowywania w Chmurze

Strategie deduplikacji i kompresji w rozproszonych systemach przechowywania.

Fundament: Czym Jest Pamięć Masowa w Chmurze?

W naszym nowoczesnym cyfrowym życiu termin "chmura" stał się wszechobecny. Zapisujemy zdjęcia w chmurze, pracujemy nad dokumentami w chmurze i streamujemy filmy z chmury. Ale czym jest ta chmura? W przeciwieństwie do abstrakcyjnej nazwy, nie jest to magiczne, eteryczne miejsce. odnosi się do ogromnej, globalnej sieci potężnych serwerów komputerowych umieszczonych w masywnych, bezpiecznych budynkach zwanych centrami danych. Te centra danych to w istocie ogromne cyfrowe magazyny, wypełnione tysiącami dysków twardych i dysków SSD, połączonych ze sobą szybkimi sieciami.

Kiedy przesyłasz plik do usługi takiej jak Dysk Google, Dropbox czy OneDrive, nie wysyłasz go w niebo. Wysyłasz go przez internet do jednego z tych centrów danych, gdzie jest on przechowywany na fizycznych dyskach. Aspekt "chmury" odnosi się do faktu, że możesz uzyskać dostęp do tych danych z dowolnego miejsca na świecie, na dowolnym urządzeniu z dostępem do internetu, nie musząc wiedzieć ani martwić się o to, na którym konkretnym serwerze czy dysku twardym znajduje się Twój plik. Złożoność zarządzania tym ogromnym, rozproszonym systemem pamięci masowej jest w całości obsługiwana przez dostawcę chmury.

Ten model przynosi niewiarygodną wygodę, ale tworzy również monumentalne wyzwanie dla dostawców: zarządzanie skalą. Ilość generowanych i przechowywanych na świecie danych jest oszałamiająca, mierzona w zettabajtach, czyli bilionach gigabajtów. Przechowywanie tych danych jest niezwykle kosztowne, nie tylko pod względem zakupu fizycznych dysków, ale także kosztów budynków, energii do ich zasilania i systemów chłodzenia, aby zapobiec ich przegrzaniu. Ta ogromna presja finansowa i fizyczna jest główną motywacją do opracowywania niezwykle wydajnych strategii przechowywania, z kompresją i deduplikacją w ich sercu.

Podwójne Wyzwanie: Przestrzeń Dyskowa i Przepustowość Sieci

Dla dostawcy pamięci masowej w chmurze wydajność to nie tylko oszczędność fizycznego miejsca na dysku. Problem jest dwojaki i obejmuje zarówno statyczny koszt przechowywania, jak i dynamiczny koszt przesyłania danych przez sieć.

Koszt Przechowywania: Każdy Bajt Ma Swoją Cenę

To jest bardziej oczywiste wyzwanie. Każdy plik przesłany przez każdego użytkownika zużywa skończoną ilość fizycznego miejsca na dysku. Kiedy miliony użytkowników przechowują terabajty zdjęć, filmów i dokumentów, szybko się to sumuje. Każda technika, która może zmniejszyć fizyczny rozmiar tych danych, bezpośrednio przekłada się na znaczne oszczędności. Jeśli dostawca może przechowywać tę samą ilość danych użytkowników, używając o 30% mniej miejsca na dysku, oznacza to, że musi kupić o 30% mniej dysków twardych, budować mniejsze centra danych i zużywać mniej energii na zasilanie i chłodzenie.

Koszt Przepustowości: Cena Danych w Ruchu

Równie ważny jest koszt związany z transferem danych do i z centrum danych. Dostawcy muszą płacić za ogromne połączenia internetowe, które obsługują stały przepływ przesyłanych i pobieranych przez użytkowników danych. Jest to koszt przepustowości. Każdy przesłany bajt przyczynia się do tego kosztu. Zmniejszając rozmiar plików, kompresja i deduplikacja bezpośrednio zmniejszają ilość danych, które muszą być wysłane przez sieć.

Przynosi to korzyści zarówno dostawcy, jak i użytkownikowi. Dostawca oszczędza na rachunkach za przepustowość. Użytkownik korzysta z znacznie szybszego doświadczenia, ponieważ mniejsze pliki oznaczają szybsze przesyłanie i pobieranie, co jest szczególnie zauważalne na wolniejszych lub mobilnych połączeniach internetowych. Celem strategii kompresji w chmurze jest więc jednoczesne rozwiązanie obu tych wyzwań.

Strategia 1: Tradycyjna Kompresja na Dużą Skalę

Pierwszą linią obrony w walce o wydajność przechowywania jest tradycyjna, ogólnego przeznaczenia . Te same algorytmy używane w kompresji systemów plików i archiwach ZIP są również używane przez dostawców chmury. Kiedy przesyłasz plik, który nie jest jeszcze skompresowany (jak dokument tekstowy lub plik bazy danych), serwer w chmurze często przepuszcza go przez szybki algorytm kompresji przed zapisaniem.

Najczęściej używane algorytmy to:

  • Gzip (DEFLATE): Szeroko wspierany i solidny algorytm oferujący dobre współczynniki kompresji przy rozsądnej prędkości.
  • LZ4: Niezwykle szybki algorytm kompresji oferujący skromniejszy współczynnik kompresji, ale przy bardzo małym obciążeniu procesora, co czyni go idealnym dla aplikacji krytycznych pod względem wydajności.
  • Zstandard (zstd): Nowoczesny algorytm oferujący elastyczny kompromis między szybkością a współczynnikiem kompresji, często zapewniający kompresję na poziomie Gzip przy znacznie wyższych prędkościach.

Jednakże tradycyjna kompresja ma znaczące ograniczenie w kontekście przechowywania w chmurze. Jest "nieświadoma" szerszego kontekstu. Może znajdować i eliminować redundantne wzorce wewnątrz jednego pliku, ale nie ma możliwości dowiedzenia się, że tysiące różnych użytkowników przesłało dokładnie ten sam plik. Z jej perspektywy są to wszystko osobne, niezależne pliki, które muszą być skompresowane i przechowywane indywidualnie. Aby rozwiązać ten znacznie większy problem redundancji pomiędzy plikami i użytkownikami, systemy chmurowe stosują o wiele potężniejszą technikę: deduplikację.

Strategia 2: Deduplikacja, Silnik Wydajności Chmury

to tajny składnik stojący za ogromną wydajnością nowoczesnych platform chmurowych. Główna idea jest niewiarygodnie prosta: po co przechowywać ten sam fragment danych więcej niż raz? Jeśli stu różnych użytkowników prześle to samo zdjęcie Pałacu Kultury, system pamięci masowej z deduplikacją zapisze dane tego zdjęcia tylko raz. Dla pozostałych 99 użytkowników po prostu utworzy mały wskaźnik, który mówi: "Moje zdjęcie jest takie samo jak tamto." Ta technika może prowadzić do astronomicznych oszczędności miejsca.

Cyfrowy Odcisk Palca: Haszowanie

Aby zidentyfikować zduplikowane dane, system potrzebuje szybkiego i niezawodnego sposobu na sprawdzenie, czy dwa fragmenty danych są identyczne, bez faktycznego porównywania ich bajt po bajcie, co byłoby zbyt wolne. Robi to, tworząc "cyfrowy odcisk palca" dla każdego fragmentu danych, znany jako .

Używane są algorytmy takie jak SHA256SHA-256 (Secure Hash Algorithm 256-bitowy). Możesz podać dowolną ilość danych, mały plik tekstowy lub ogromny plik wideo, do algorytmu SHA256SHA-256, a on wygeneruje stałej długości, 256-bitowy (64-znakowy heksadecymalny) ciąg znaków, który jest unikalny dla tych konkretnych danych.

  • Jeśli zmieni się choćby jeden bit w oryginalnym pliku, wynikowy hasz będzie zupełnie inny.
  • Jest praktycznie niemożliwe, aby dwa różne pliki wygenerowały ten sam hasz (jest to znane jako odporność na kolizje).

Porównując te krótkie wartości haszujące, system przechowywania może natychmiast i z niemal całkowitą pewnością stwierdzić, czy dwa fragmenty danych są identyczne.

Deduplikacja na Poziomie Pliku vs. Bloku

Istnieją dwa główne sposoby zastosowania tej koncepcji haszowania:

1. Deduplikacja na Poziomie Pliku (Single-Instance Storage): To najprostsze podejście. Gdy użytkownik przesyła plik, system oblicza hasz całego pliku. Następnie sprawdza centralną bazę danych, czy plik o dokładnie tym samym haszu był już przechowywany. Jeśli tak, system nie zapisuje nowego pliku; tworzy tylko wskaźnik na koncie nowego użytkownika do już istniejących danych. Jeśli hasz jest nowy, plik jest przechowywany, a jego hasz jest dodawany do bazy danych. Jest to bardzo skuteczne do przechowywania identycznych plików, jak popularne instalatory oprogramowania czy znane zdjęcia. Jednak jego główną słabością jest to, że jeśli zmieni się nawet jeden bajt pliku (np. poprawisz jedno słowo w dużym dokumencie), hasz całego pliku się zmienia i cały nowy plik musi zostać przesłany i zapisany.

2. Deduplikacja na Poziomie Bloku: To bardziej wyrafinowane i potężne podejście, stosowane przez większość głównych dostawców chmury. Zamiast haszować cały plik, jest on najpierw dzielony na mniejsze części zwane porcjami lub blokami. Każdy z tych bloków jest następnie indywidualnie haszowany i przechowywany. Kiedy nowy plik jest przesyłany, również jest dzielony na bloki. System następnie sprawdza, które z tych bloków już widział, na podstawie ich haszów.

To jest niezwykle wydajne. Wyobraź sobie, że masz 500-stronicowy raport (raportv1.docxraport_v1.docx) i poprawiasz jedną literówkę na stronie 200, tworząc raportv2.docxraport_v2.docx. Z deduplikacją na poziomie pliku musiałbyś przechowywać oba pełne pliki. Z deduplikacją na poziomie bloku system rozpoznałby, że 99% bloków w obu wersjach jest identycznych. Przechowałby tylko jeden, nowy blok zawierający poprawioną literówkę i utworzyłby wskaźniki do wspólnych, niezmienionych bloków z pierwszej wersji. Ta technika sprawia, że funkcje takie jak "Delta Sync" w Dropbox są tak szybkie; musi on przesyłać tylko te części pliku, które faktycznie się zmieniły.

Pełny Proces: Synergia Kompresji i Deduplikacji

Najbardziej zaawansowane systemy przechowywania w chmurze łączą te strategie w wysoce wydajny proces. Kolejność operacji jest kluczowa:

  1. Plik jest przesyłany do systemu.
  2. Plik jest dzielony na mniejsze bloki.
  3. Dla każdego bloku obliczany jest unikalny hasz (cyfrowy odcisk palca).
  4. System sprawdza swój centralny magazyn haszy, aby zobaczyć, które z tych haszy już widział. To jest krok deduplikacji.
  5. Dla każdego bloku, który jest nowy (jego hasza nie ma w magazynie), system stosuje szybki algorytm kompresji bezstratnej, jak LZ4 lub zstd. To jest krok kompresji.
  6. Nowy, skompresowany blok jest następnie zapisywany w fizycznej pamięci masowej, a jego hasz jest dodawany do centralnego magazynu.
  7. Na koniec plik na koncie użytkownika jest reprezentowany przez mapę metadanych, która jest po prostu listą wskaźników do wszystkich wymaganych bloków (zarówno starych, jak i nowych).

Kluczowe jest, aby deduplikować przed kompresją. Algorytmy kompresji zmieniają reprezentację danych na poziomie bajtów. Dwa identyczne bloki po skompresowaniu dadzą identyczne dane skompresowane. Jednak dwa nieznacznie różne bloki dadzą dwa zupełnie różne wyniki kompresji, co uniemożliwi znalezienie jakiejkolwiek redundancji między nimi. Haszując najpierw surowe, nieskompresowane bloki, system może zidentyfikować duplikaty, zanim zostaną one zmienione przez kompresję.

Implementacja w Świecie Rzeczywistym: Bezpieczeństwo i Optymalizacja po Stronie Klienta

Po Stronie Klienta vs. Po Stronie Serwera

Deduplikacja może odbywać się w dwóch miejscach:

  • Po Stronie Serwera: Użytkownik przesyła cały plik, a serwer wykonuje całą pracę związaną z dzieleniem na bloki, haszowaniem i porównywaniem. Jest to prostsze do wdrożenia, ale marnuje przepustowość na przesyłanie danych, które i tak mogą zostać odrzucone.
  • Po Stronie Klienta: To bardziej wydajne podejście, stosowane przez usługi takie jak Dropbox. Aplikacja na komputerze użytkownika wykonuje dzielenie na bloki i haszowanie przed rozpoczęciem przesyłania. Klient następnie wysyła listę haszy do serwera i pyta: "Których z tych bloków potrzebujesz?" Serwer odpowiada haszami bloków, których jeszcze nie ma, a klient przesyła tylko te brakujące fragmenty. To radykalnie skraca czas przesyłania i zużycie przepustowości.

Kwestie Bezpieczeństwa i Prywatności

Chociaż niezwykle wydajna, deduplikacja wprowadza potencjalne problemy z prywatnością i bezpieczeństwem. Ponieważ system opiera się na identyfikacji identycznych bloków, teoretycznie można to wykorzystać. Na przykład, jeśli atakujący zna hasz określonego filmu chronionego prawem autorskim lub poufnego dokumentu, może spróbować przesłać mały plik, który wywoła ten sam hasz. Jeśli system potwierdzi, że już ma te dane (ponieważ inny użytkownik je przesłał), atakujący może uzyskać do nich dostęp lub przynajmniej potwierdzić ich obecność. Jest to tak zwany atak przez kanał boczny.

Aby to złagodzić, nowoczesne usługi chmurowe stosują kilka warstw ochrony:

  • Deduplikacja w Obrębie Konta Użytkownika: Niektóre systemy mogą deduplikować dane tylko w ramach jednego konta użytkownika, a nie globalnie dla wszystkich użytkowników, co eliminuje to ryzyko kosztem pewnej wydajności.
  • Szyfrowanie: Dane są prawie zawsze szyfrowane zarówno podczas przesyłania (przez internet), jak i w spoczynku (gdy są przechowywane na dyskach dostawcy). Powszechną strategią jest szyfrowanie po stronie klienta, gdzie dane użytkownika są szyfrowane przed wysłaniem ich do chmury. W tym scenariuszu dwóch użytkowników z tym samym oryginalnym plikiem wygeneruje zupełnie inne zaszyfrowane pliki, co zapobiega deduplikacji między użytkownikami, ale zachowuje bezpieczeństwo. Niektóre zaawansowane systemy używają , gdzie klucz szyfrujący jest pochodną hasza danych, co pozwala na bezpieczną deduplikację bez znajomości treści przez dostawcę.

Inteligentne połączenie zaawansowanej kompresji, solidnej deduplikacji i silnych środków bezpieczeństwa pozwala dostawcom usług w chmurze oferować usługi, które są szybkie, opłacalne i bezpieczne, stanowiąc trzon naszej nowoczesnej infrastruktury cyfrowej.

    Kompresja Przechowywania w Chmurze