Aplikacje i wymagania

Ukończone

Aplikacje mogą obsługiwać dane na wiele sposobów. Niektóre aplikacje odgrywają rolę systemów przechowywania i pobierania danych. Mogą archiwizować dane z różnych powodów. Oprogramowanie do tworzenia kopii zapasowych archiwizuje dane użytkowników w formie migawek. Dzięki temu użytkownik może przywracać prawidłowy stan swojego komputera i plików w przypadku awarii sprzętu lub przypadkowego usunięcia. Duże witryny takie jak archive.org przeszukują popularne witryny i zachowują migawki umożliwiające użytkownikom wyświetlanie ich poprzednich wersji. Sprzedawca detaliczny może chcieć przechowywać informacje dotyczące każdej pojedynczej transakcji na potrzeby księgowości i rozliczeń podatkowych.

Inne aplikacje pobierają dane, aby umożliwić podejmowanie decyzji. Przykładem takich aplikacji są systemy analizy biznesowej. System analizy biznesowej może przetwarzać miliony transakcji i tworzyć na ich podstawie trendy sprzedaży. Te informacje mogą pomagać w podejmowaniu przez sprzedawców detalicznych decyzji marketingowych oraz dotyczących inwentarza.

Aplikacje mogą również wyodrębnić wiedzę na potrzeby analiz. Przykładowo firma Google1 odkryła, że trendy wyszukiwania niektórych słów kluczowych są wysoce skorelowane z wizytami u lekarzy z powodu objawów grypopodobnych.

Dane mogą również umożliwiać świadczenie usług. Przykładem jest niemal każdy typ dynamicznej usługi sieci Web, która odpowiada na żądania użytkowników. Określone wystąpienia obejmują oprogramowanie do mapowania i nawigacji. Zbierając informacje o sieciach drogowych i adresach, system (na przykład Google Maps) może odpowiedzieć na zapytania dotyczące dojazdu.

Wymagania aplikacji

Aplikacje mają różne wymagania względem systemów magazynowania. Netflix musi na przykład obsługiwać wideo o wysokiej przepustowości milionom użytkowników w krajach/regionach, w których działa. Z drugiej strony wyszukiwanie Bing musi analizować zapytanie i w bardzo krótkim czasie pobierać dokładne wyniki dotyczące tego zapytania. W tej sekcji krótko omówimy różne wymagania narzucane przez aplikacje na systemy magazynowania:

  • Pojemność: systemy magazynowania muszą być w stanie obsłużyć wymagania dotyczące pojemności aplikacji. System magazynowania powinien obsługiwać cały wolumin danych wymaganych przez aplikację i musi być też w pewien sposób skalowalny, aby zaspokoić krótkoterminowe i przyszłe wymagania aplikacji.

  • Wydajność: Systemy magazynowania powinny mieć możliwość obsługi oczekiwań aplikacji dotyczących wydajności. Można to ogólnie podzielić na następujące wymagania:

    • Opóźnienie: system powinien odpowiadać na żądania w określonym oczekiwanym przedziale czasu. W systemach w skali sieciowej to wymaganie jest bardzo ważne, ponieważ odnosi się bezpośrednio do wrażeń użytkownika.
    • Przepustowość: system powinien mieć możliwość przenoszenia danych z określoną szybkością. W przypadku aplikacji opierających się na ciągłych przesyłach danych (takich jak materiały wideo) ta metryka jest kluczowa.
  • Wzorce dostępu: konkretne wzorce, w których aplikacja uzyskuje dostęp do danych, mogą służyć do projektowania i implementowania wydajnych systemów magazynowania. Szczególnie ważne dla projektantów systemów magazynowania są następujące wzorce:

    • Stopień szczegółowości dostępu: odnosi się do najmniejszej ilości danych pobranych w typowej operacji. Może to być zakres od kilku bajtów do wielu megabajtów, w zależności od typu aplikacji.
    • Częstotliwość dostępu: określa częstotliwość uzyskiwania dostępu do danych z systemu. Jeśli istnieją pewne elementy, do których uzyskuje się stały dostęp, zapewniają możliwość optymalizacji z wykorzystaniem takich technik jak buforowanie.
    • Lokalność dostępu: odnosi się do lokalizacji przestrzennej i czasowej. Przykładem lokalności jest to, jak odległe elementy danych są pobierane do wykorzystania w aplikacji. Lokalność może być uwzględniana zarówno na poziomie mikro (jak bardzo oddalone od siebie są kroki w indeksie tablicy podczas mnożenia macierzy), jak i makro (które centrum danych na całym świecie powinno odpowiedzieć na żądanie danego użytkownika).
  • Trwałość: odnosi się to do oczekiwań aplikacji dotyczących sposobu utrwalania danych w systemie.

  • Odporność na uszkodzenia: Odporność na uszkodzenia to ogólny termin, który określa kilka atrybutów systemu. Można je opisać pod względem następujących wymagań:

    • Niezawodność: Jeśli określony element danych jest zgłaszany jako zapisany przez system, czy zawsze można go odzyskać z systemu?
    • Dostępność: Czy istnieje określony okres, w którym system nie odpowiada na żądania? Jak często się to zdarza? Czy ma to wpływ na moją aplikację i co można zrobić, aby zminimalizować wpływ tego przestoju?
    • Dokładność: Jak dokładne są wyniki zwracane przez system? To pytanie może być trywialne w przypadku prostego systemu, który składa się tylko z jednego magazynu danych. Natomiast jeśli system jest dystrybuowany z wieloma kopiami tych samych danych, może to być bardzo istotny problem. Niektóre aplikacje mogą obsługiwać nieodświeżone dane, ale inne za każdym razem wymagają dokładnej odpowiedzi.
  • Zabezpieczenia: Jak bezpieczne są dane, gdy są przechowywane i dostępne przez aplikację? Czy są chronione przed przypadkowym lub złośliwym dostępem i/lub modyfikacją oraz usuwaniem? Jakiego rodzaju ograniczenia dostępu można nałożyć na użytkowników i aplikacje uzyskujące dostęp do tego systemu?

  • Pochodzenie: proces, za pomocą którego można śledzić i rejestrować pochodzenie danych, a także jego przenoszenie między systemami magazynowania. Czy w przypadku aplikacji funkcja jest w stanie śledzić wszystkie wymagane informacje? Jest to wymóg w przypadku niektórych aplikacji obsługujących dane wrażliwe i/lub poufne.

Wymagania te określają sposób projektowania aplikacji. Aplikacje wymagające dużej pojemności lub skalowalności w niedalekiej lub odległej przyszłości muszą być odpowiednio zaprojektowane. Jak widać w tym module, systemy magazynowania, które obsługują duże ilości danych, są zwykle zbyt wolne lub kosztowne do zastosowania wyłącznie w ramach systemu monolitycznego. Są zazwyczaj rozproszone na wielu komputerach.

Rygorystyczne wymagania dotyczące wydajności są zwykle przekładane na wybory podejmowane podczas projektowania obejmujące buforowanie lub replikację. Takie systemy są zaprojektowane z wykorzystaniem wzorców dostępu w celu określenia optymalnych strategii zwiększania wydajności. W przypadku aplikacji, które obsługują klientów przez Internet, wiele centrów danych może być wykorzystywanych do zapewniania większej wydajności i lepszych wrażeń użytkownika poprzez przekierowywanie użytkowników do najbliższego dostępnego serwera, który ma wymagane dane.

Aby można było korzystać z pewnych technik replikacji lub buforowania, aplikacja musi zdecydować, jaki poziom dokładności lub aktualności będzie jej potrzebny do pobrania danych z systemu. Niektóre aplikacje mogą otrzymywać nieodświeżone dane, ale inne wymagają najdokładniejszych i najnowszych danych. To z kolei wpływa na poziom spójności, jaką musi zapewnić aplikacji system magazynowania.


Odwołania

  1. Ginsberg, Jeremy and Mohebbi, Matthew H i Patel, Rajan S i Brammer, Lynnette i Smolinski, Mark S i Brilliant, Larry (2009 r.). Wykrywanie epidemii grypy przy użyciu danych zapytania wyszukiwarki Nature