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