Inżynieria oprogramowania

Architektura warstwowa

  • 2008-02-21 22:48
  • 0 komentarzy
  • 10906 odsłon
  • Oceń ten tekst jako pierwszy
Spis treści

     1 Wprowadzenie
          1.1 Warstwy systemów
          1.2 Cechy
     2 Architektura warstwowa aplikacji
     3 Architektura warstwowa systemów informatycznych
          3.1 Architektura jednowarstwowa
          3.2 Architektura dwuwarstwowa
          3.3 Architektura wielowarstwowa


Wprowadzenie


Wraz ze wzrostem złożoności systemów informatycznych - tak pod względem komplikacji oprogramowania, sprzętu, a także ilości współpracujących podsystemów - pojawiło się zapotrzebowanie na separację komponentów, odpowiedzialnych za poszczególne zadania. Pozwoliło to nie tylko na uproszczenie procedur konfiguracji i zarządzania, czyli szeroko pojętej administracji. W znacznym stopniu zoptymalizowało etap syntezy - kompozycji całości systemu z oddzielnie projektowanych i dedykowanych do specjalizowanych zadań komponentów.

Warstwy komunikują się wzajemnie za pomocą określonego protokołu - zbioru zasad i narzędzi komunikacji. W przypadku architektury warstwowej aplikacji mogą to być interfejsy (w rozumieniu inżynierii programowania), deklaracje klas abstrakcyjnych lub bezpośrednio odwołania do pól i metod klas. W przypadku architektury warstwowej systemów informatycznych są to najczęściej gniazda sieciowe, pamięć współdzielona lub inne mechanizmy IPC.

Warstwy systemów


W ramach tworzonych systemów najczęściej wyodrębniane są następujące warstwy:
  • warstwa logiki biznesowej,
  • warstwa prezentacji,
  • warstwa dostępu do danych.

Dodatkowymi warstwami mogą być, w zależności od systemu:
  • warstwa autentyfikacji i autoryzacji,
  • warstwa danych (warstwa zarządzania danymi),
  • warstwa multipleksacji/demultipleksacji połączeń,
  • inne warstwy, zależnie od przyjętego modelu.

Cechy


Zalety modelu warstwowego:
  • dekompozycja systemu na niezależne komponenty, możliwe do oddzielnej analizy,
  • łatwość podmiany komponentu z dowolnej warstwy na inny, wykorzystujący ten sam protokół,
  • możliwość scalenia kolejnych warstw w jedną, z zachowaniem protokołu do następnej i poprzedniej warstwy,
  • możliwość rozdzielenia jednej warstwy w wiele, z zachowaniem protokołu do następnej i poprzedniej warstwy,
  • rozdzielenie systemów do zadań dedykowanych,
  • rozdzielenie mocy obliczeniowej między warstwy,
  • możliwość równoważenia obciążeń,
  • zapewnienie rozwiązań redundantnych (nadmiarowych, zapasowych).

Wady modelu warstwowego:
  • trudny do implementacji w istniejących już systemach nie projektowanych z uwzględnieniem modelu warstwowego,
  • potrzeba obudowania funkcjonalności w dodatkowy interfejs,
  • utrudnienia związane z zapewnieniem zgodności wstecznej podczas rozbudowy interfejsu.

Architektura warstwowa aplikacji


Choć możliwe jest programowanie aplikacji z uwzględnieniem pełnej architektury warstwowej, modele niewarstwowe są znacznie bardziej popularne.

Gdy całość aplikacji jest wykonywana w ramach jednego systemu operacyjnego lub zbioru zasobów, komponenty mogą komunikować się na zasadzie każda z każdą, z pominięciem warstw (komunikacja tylko z warstwą nadrzędną lub podrzędną). Na takiej zasadzie działają modele MVC, HMVC, PAC. W przeciwnym wypadku modele projektowania takich aplikacji są zbliżone do modeli całościowych systemów informatycznych.

W ramach architektury aplikacji modele warstwowe są często tworzone w oparciu o wzorce projektowe.

Architektura warstwowa systemów informatycznych


Budowa systemów informatycznych to podstawowe pole rozwoju architektur warstwowych. Do podstawowych modeli są zaliczane:
  • architektura jednowarstwowa (1-tier),
  • architektura dwuwarstwowa (2-tier),
  • architektura wielowarstwowa (multi-tier, n-tier).

Bardzo popularnym modelem jest architektura trójwarstwowa, zaliczana do modeli wielowarstwowych.

Architektura jednowarstwowa


Model jednowarstwowy stanowi samodzielny system lub pojedyncza aplikacja, nie wymagające żadnej zewnętrznej komunikacji do wykonywania zadań.

Szczególnym przypadkiem architektury jednowarstwowej są niesamodzielne maszyny terminalowe, pozbawione mocy obliczeniowej, połączone do serwera. W takim przypadku system serwera razem z terminalami jest najczęściej definiowany jako jedna warstwa.

Architektura dwuwarstwowa


Model ten jest realizowany w postaci komunikacji klient/serwer lub master/slave. Dwa oddzielne programy, mogące znajdować się na jednej maszynie lub być rozproszone geograficznie, albo systemy komputerowe komunikują się w celu wykonania określonego zadania. Urządzenie lub program nadrzędny jest dostarczycielem usługi, natomiast jeden lub więcej programów lub urządzeń podrzędnych korzysta z owej usługi.


         SERWER
     /     |     \
    /      |      \
KLIENT1 KLIENT2 KLIENT3


Najczęściej warstwa podrzędna (klient) wysyła zgodnie z ustalonym protokołem zapytania i polecenia, w celu uzyskania od warstwy nadrzędnej odpowiedzi, o strukturze zgodnej z protokołem.

Przykładami systemów o architekturze dwuwarstwowej są:
  • program napisany w języku ogólnego przeznaczenia (np.: Delphi, C#) komunikujący się bezpośrednio z serwerem SQL (np.: PostgreSQL, Oracle),
  • kontrolka COM/ActiveX z podłączonymi klientami usługi,
  • przeglądarka internetowa współpracująca z serwerem HTTP, oferującym statyczne strony.

Architektura wielowarstwowa


Model ten składa się z więcej niż dwóch warstw. Każda komunikująca się para warstw działa w oparciu o architekturę dwuwarstwową. Protokoły komunikacyjne poszczególnych par mogą (choć nie muszą) się różnić.


        SERWER0A
     /      |      \
    /       |       \
KLIENT1A KLIENT2A KLIENT3A
SERWER1A SERWER2A SERWER3A
    |       |       |
    |       |       |
KLIENT1B KLIENT2B KLIENT3B
SERWER1B SERWER2B SERWER3B
    |       |       |
    |       |       |
KLIENT1C KLIENT2C KLIENT3C


Komponent w określonej warstwie jest klientem warstwy wyższej, jednocześnie stanowiąc serwer dla jednego lub więcej klientów z niższych warstw. Awaria zwielokrotnionego komponentu ze środkowej warstwy pozwala na przełączenie jego klientów do innego serwera, zapewniając ciągłość oferowanych usług.

Przykładami systemów o architekturze wielowarstwowej są:
  • przeglądarka internetowa współpracująca z serwerem aplikacji (HTTP ze wsparciem PHP, ASP, JSP, XSQL lub innych narzędzi), korzystającym z bazy SQL - klasyczny model trójwarstwowy,
  • hierarchiczny system synchronizacji czasu - NTP (network time protocol).