Architektura hierarchiczna

Architektura hierarchiczna postrzega cały system jako strukturę hierarchiczną, w której system oprogramowania jest rozłożony na logiczne moduły lub podsystemy na różnych poziomach w hierarchii. To podejście jest zwykle stosowane przy projektowaniu oprogramowania systemowego, takiego jak protokoły sieciowe i systemy operacyjne.

W projektowaniu hierarchii oprogramowania systemowego podsystem niskiego poziomu zapewnia usługi sąsiednim podsystemom wyższego poziomu, które wywołują metody na niższym poziomie. Niższa warstwa zapewnia bardziej specyficzne funkcje, takie jak usługi we / wy, transakcje, planowanie, usługi bezpieczeństwa itp. Warstwa środkowa zapewnia funkcje bardziej zależne od domeny, takie jak logika biznesowa i podstawowe usługi przetwarzania. Górna warstwa zapewnia bardziej abstrakcyjną funkcjonalność w postaci interfejsu użytkownika, takiego jak GUI, narzędzia programowania powłoki itp.

Jest również używany do organizacji bibliotek klas, takich jak biblioteka klas .NET w hierarchii przestrzeni nazw. Wszystkie typy projektów mogą implementować tę hierarchiczną architekturę i często łączą się z innymi stylami architektury.

Hierarchiczne style architektoniczne są podzielone na -

  • Main-subroutine
  • Master-slave
  • Maszyna wirtualna

Podprogram główny

Celem tego stylu jest ponowne wykorzystanie modułów i swobodne opracowywanie poszczególnych modułów lub podprogramów. W tym stylu system oprogramowania jest podzielony na podprogramy za pomocą udoskonalenia odgórnego zgodnie z pożądaną funkcjonalnością systemu.

Te udoskonalenia prowadzą pionowo, aż zdekomponowane moduły są na tyle proste, że ponoszą ich wyłączną niezależną odpowiedzialność. Funkcjonalność może być ponownie wykorzystywana i współdzielona przez wielu abonentów w wyższych warstwach.

Istnieją dwa sposoby przekazywania danych jako parametrów do podprogramów, a mianowicie -

  • Pass by Value - Podprogramy wykorzystują tylko poprzednie dane, ale nie mogą ich modyfikować.

  • Pass by Reference - Podprogramy wykorzystują, jak również zmieniają wartość danych, do których odwołuje się parametr.

Zalety

  • Łatwy do dekompozycji system w oparciu o udoskonalenie hierarchii.

  • Może być używany w podsystemie projektowania obiektowego.

Niedogodności

  • Podatny, ponieważ zawiera dane udostępniane globalnie.

  • Ścisłe połączenie może powodować bardziej tętniące efekty zmian.

Master-Slave

Podejście to stosuje zasadę „dziel i zwyciężaj” oraz wspiera obliczenia błędów i dokładność obliczeń. Jest to modyfikacja architektury głównego podprogramu, która zapewnia niezawodność systemu i odporność na uszkodzenia.

W tej architekturze slave zapewniają zduplikowane usługi dla mastera, a master wybiera konkretny wynik spośród slaveów za pomocą określonej strategii wyboru. Slave'y mogą wykonywać to samo zadanie funkcjonalne za pomocą różnych algorytmów i metod lub zupełnie innych funkcji. Obejmuje obliczenia równoległe, w których wszystkie urządzenia podrzędne mogą być wykonywane równolegle.

Implementacja wzorca Master-Slave obejmuje pięć kroków -

  • Określ, w jaki sposób obliczenia zadania można podzielić na zestaw równych podzadań i określ usługi podrzędne, które są potrzebne do przetworzenia pod-zadania.

  • Określ, jak można obliczyć ostateczny wynik całej usługi za pomocą wyników uzyskanych z przetwarzania poszczególnych podzadań.

  • Zdefiniuj interfejs dla usługi podrzędnej określonej w kroku 1. Zostanie on zaimplementowany przez slave i użyty przez mastera do delegowania przetwarzania poszczególnych podzadań.

  • Zaimplementuj komponenty podrzędne zgodnie ze specyfikacjami opracowanymi w poprzednim kroku.

  • Zaimplementuj wzorzec zgodnie ze specyfikacjami opracowanymi w krokach od 1 do 3.

Aplikacje

  • Nadaje się do zastosowań, w których niezawodność oprogramowania ma krytyczne znaczenie.

  • Szerokie zastosowanie w obszarach obliczeń równoległych i rozproszonych.

Zalety

  • Szybsze obliczenia i łatwa skalowalność.

  • Zapewnia solidność, ponieważ slave mogą być duplikowane.

  • Slave można zaimplementować inaczej, aby zminimalizować błędy semantyczne.

Niedogodności

  • Koszty komunikacji.

  • Nie wszystkie problemy można podzielić.

  • Problem trudny do wdrożenia i przenoszenia.

Architektura maszyny wirtualnej

Architektura maszyny wirtualnej udaje funkcje, które nie są natywne dla sprzętu i / lub oprogramowania, na którym jest zaimplementowana. Maszyna wirtualna jest zbudowana na istniejącym systemie i zapewnia wirtualną abstrakcję, zestaw atrybutów i operacji.

W architekturze maszyny wirtualnej urządzenie nadrzędne wykorzystuje „tę samą„ usługę podrzędną ”co urządzenie podrzędne i wykonuje takie funkcje, jak podział pracy, wywoływanie urządzeń podrzędnych i łączenie wyników. Pozwala programistom symulować i testować platformy, które nie zostały jeszcze zbudowane, a także symulować tryby „katastrofy”, które byłyby zbyt złożone, kosztowne lub niebezpieczne, aby przetestować je w prawdziwym systemie.

W większości przypadków maszyna wirtualna oddziela język programowania lub środowisko aplikacji od platformy wykonawczej. Głównym celem jest zapewnienieportability. Interpretacja określonego modułu za pośrednictwem maszyny wirtualnej może być postrzegana jako -

  • Silnik interpretacyjny wybiera instrukcję z interpretowanego modułu.

  • Na podstawie instrukcji silnik aktualizuje stan wewnętrzny maszyny wirtualnej i powyższy proces jest powtarzany.

Poniższy rysunek przedstawia architekturę standardowej infrastruktury maszyn wirtualnych na pojedynczym komputerze fizycznym.

Plik hypervisor, zwany także virtual machine monitor, działa w systemie operacyjnym hosta i przydziela dopasowane zasoby do każdego systemu gościa. Kiedy gość wykonuje wywołanie systemowe, hiperwizor przechwytuje je i tłumaczy na odpowiednie wywołanie systemowe obsługiwane przez system operacyjny hosta. Hiperwizor kontroluje dostęp każdej maszyny wirtualnej do procesora, pamięci, pamięci trwałej, urządzeń we / wy i sieci.

Aplikacje

Architektura maszyny wirtualnej jest odpowiednia w następujących domenach -

  • Nadaje się do rozwiązywania problemu poprzez symulację lub tłumaczenie, jeśli nie ma bezpośredniego rozwiązania.

  • Przykładowe aplikacje obejmują interpretery mikroprogramowania, przetwarzania XML, wykonywania skryptów w języku poleceń, wykonywania systemu opartego na regułach, języka programowania typu Smalltalk i interpretera Java.

  • Typowymi przykładami maszyn wirtualnych są interpretery, systemy oparte na regułach, powłoki składniowe i procesory języka poleceń.

Zalety

  • Mobilność i niezależność od platformy maszyny.

  • Prostota tworzenia oprogramowania.

  • Zapewnia elastyczność dzięki możliwości przerywania i wysyłania zapytań do programu.

  • Symulacja dla modelu pracy po katastrofie.

  • Wprowadź modyfikacje w czasie wykonywania.

Niedogodności

  • Powolne wykonywanie pracy przez tłumacza ze względu na charakter tłumacza.

  • Występuje koszt wydajności z powodu dodatkowych obliczeń związanych z wykonaniem.

Styl warstwowy

W tym podejściu system jest rozkładany na kilka wyższych i niższych warstw w hierarchii, a każda warstwa ponosi wyłączną odpowiedzialność w systemie.

  • Każda warstwa składa się z grupy powiązanych klas, które są zawarte w pakiecie, we wdrożonym komponencie lub jako grupa podprogramów w formacie biblioteki metod lub pliku nagłówka.

  • Każda warstwa dostarcza usługi warstwie powyżej i służy jako klient warstwie poniżej, tj. Żądanie do warstwy i +1 wywołuje usługi świadczone przez warstwę i za pośrednictwem interfejsu warstwy i. Odpowiedź może wrócić do warstwy i +1, jeśli zadanie zostanie zakończone; w przeciwnym razie warstwa i ciągle wywołuje usługi z warstwy i -1 poniżej.

Aplikacje

Styl warstwowy jest odpowiedni w następujących obszarach -

  • Aplikacje, które obejmują różne klasy usług, które można zorganizować hierarchicznie.

  • Dowolna aplikacja, którą można rozłożyć na części specyficzne dla aplikacji i platformy.

  • Aplikacje z wyraźnym podziałem na usługi podstawowe, usługi krytyczne i usługi interfejsu użytkownika itp.

Zalety

  • Projektowanie w oparciu o przyrostowe poziomy abstrakcji.

  • Zapewnia niezależność ulepszeń, ponieważ zmiany funkcji jednej warstwy wpływają na co najwyżej dwie inne warstwy.

  • Rozdzielenie standardowego interfejsu i jego implementacja.

  • Wdrożony przy użyciu technologii opartej na komponentach, dzięki czemu system jest znacznie łatwiejszy i umożliwia podłączenie nowych komponentów.

  • Każda warstwa może być abstrakcyjną maszyną wdrożoną niezależnie, która obsługuje przenośność.

  • Łatwy w dekompozycji system w oparciu o definicję zadań w sposób odgórny

  • Różne implementacje (z identycznymi interfejsami) tej samej warstwy mogą być używane zamiennie

Niedogodności

  • Wiele aplikacji lub systemów nie ma łatwej struktury warstwowej.

  • Niższa wydajność w czasie wykonywania, ponieważ żądanie klienta lub odpowiedź do klienta musi przejść przez potencjalnie kilka warstw.

  • Istnieją również problemy z wydajnością związane z narzutem na organizowanie danych i buforowanie przez każdą warstwę.

  • Otwarcie komunikacji międzywarstwowej może spowodować zakleszczenie, a „mostkowanie” może spowodować szczelne połączenie.

  • Wyjątki i obsługa błędów są problemem w architekturze warstwowej, ponieważ błędy w jednej warstwie muszą rozprzestrzeniać się w górę na wszystkie warstwy wywołujące