Jarosław Kuchta Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego
Zagadnienia Architektura wielowarstwowa a architektura wielopienna Typy architektury systemu internetowego Rozbudowana architektura wielowarstwowa Przykładowa struktura klas z podziałem na warstwy Zawartość projektu architektury systemu Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 2
Architektura wielowarstwowa a architektura wielopienna Warstwa prezentacji Warstwa logiki prezentacyjnej Warstwa logiki aplikacyjnej klient Warstwa prezentacji serwer aplikacji Warstwa logiki prezentacyjnej serwer danych Warstwa dostępu do danych Warstwa dostępu do danych Warstwa logiki prezentacyjnej Warstwa logiki aplikacyjnej Warstwa bazy danych Warstwa bazy danych architektura wielowarstwowa architektura wielopienna Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 3
Kryteria wyboru architektury (wybór warstw) Wydzielona warstwa Prezentacji Logiki prezentacji po stronie klienta Logiki prezentacji po stronie serwera Logiki aplikacji Logiki dostępu do danych Warstwa danych Kiedy trzeba stosować? W każdej aplikacji interaktywnej obsługującej użytkowników W aplikacji interaktywnej, gdy trzeba zapewnić walidację danych lub obsługę zdarzeń bez komunikacji z serwerem Gdy trzeba zapewnić walidację przychodzących danych lub zaawansowane filtrowanie żądań Gdy trzeba przetwarzać dane lub zmieniać stan aplikacji. Gdy dane są złożone. Gdy stosuje się przetwarzanie obiektowe. Gdy trzeba podzielić dane na kilka serwerów, gdy trzeba zapewnić zróżnicowany dostęp do danych w zależności od stanu aplikacji, gdy trzeba przyspieszyć dostęp do złożonych danych przez ich buforowanie W każdej aplikacji wykorzystującej bazy danych Kiedy można nie stosować? W aplikacji usługowej, gdy klientami są inne serwery Gdy wystarczy podstawowa walidacja lub interakcja zapewniana przez framework Gdy wystarczy walidacja lub filtrowanie zapewniane przez framework W aplikacji wyłącznie rejestrującej dane, albo gdy wystarczy proste przetwarzanie danych przez kwerendy SQL Gdy dane są proste i wystarczy wydajność serwera SQL. Gdy serwer SQL zapewnia wystarczającą ochronę dostępu do danych. Gdy aplikacja korzysta tylko z usług innych serwerów Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 4
Typy architektury systemu internetowego Architektura bazująca na serwerze Architektura bazująca na kliencie Architektura klientserwer z "cienkim" klientem z "grubym" klientem Warstwa prezentacji Warstwa logiki prezentacyjnej Warstwa logiki aplikacyjnej Warstwa dostępu do danych Warstwa bazy danych Klient Serwer Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 5
Architektura bazująca na serwerze Serwer mainframe przechowywanie danych, cała logika Klient terminal tylko interfejs użytkownika Komunikacja Remote Desktop Protocol Prosta w projektowaniu Duże prawdopodobieństwo przeciążenia serwera Bardzo kosztowna modernizacja RDP Serwer Terminal Warstwa prezentacji Logika prezentacyjna Logika aplikacyjna Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 6
Architektura bazująca na kliencie Serwer tylko przechowuje dane wspólne dla wielu klientów ew. umożliwia pobieranie aplikacji Łatwe projektowanie Możliwe przeciążenie serwera Przy dostarczaniu aplikacji z serwera problem z zapewnieniem bezpieczeństwa klientów (wiarygodność serwera) Klient Warstwa prezentacji Logika prezentacyjna Logika aplikacyjna Serwer Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 7
Architektura klient-serwer Logika aplikacyjna może być dzielona między klienta i serwer Łatwo skalowalna Możliwość stosowania różnych typów klientów i serwerów 1000 x niższy koszt niż architektury bazującej na serwerze przy tym samym poziomie wydajności Ograniczona złożoność aplikacji Odmiany: cienki klient gruby klient Klient Warstwa prezentacji Logika prezentacyjna Serwer Logika aplikacyjna Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 8
Odmiany architektury klient-serwer Cienki klient Cała logika po stronie serwera Klient tylko korzysta z przeglądarki Logika aplikacji zazwyczaj prosta (aplikacje oparte na bazie danych) Zagrożenie przeciążenia serwera Gruby klient Logika aplikacyjna na kliencie Aplikacja pobierana z serwera Aplikacja wykonywana w: środowisku przeglądarki (ograniczenia środowiska) środowisku systemu operacyjnego Zaawansowana logika aplikacji (modelowanie, grafika, gry) Zagrożenie bezpieczeństwa klienta (trojany) Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 9
Architektura dwu-, trój- i wielopienna Architektura dwupienna (two-tiered) cała logika aplikacyjna u klienta lub na serwerze, serwer zawiera bazę danych Architektura trójpienna (three-tiered) logika aplikacyjna na serwerze aplikacji, baza danych na osobnym serwerze Architektura wielopienna (n-tiered) wiele serwerów aplikacji i/lub wiele serwerów bazy danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 10
Architektura dwupienna (two-tiered) Tylko jedna warstwa serwerowa (z bazą danych) Stosunkowo łatwe rozwiązanie Duże prawdopodobieństwo przeciążenia serwera Klient Warstwa prezentacji Serwer Logika aplikacyjna Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 11
Architektura trójpienna (three-tiered) Logika dostępu do danych wydzielona do osobnego serwera Możliwość skalowania (wiele serwerów aplikacji) Klient Warstwa prezentacji Serwer(y) aplikacji Logika aplikacyjna Serwer danych Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 12
Architektura wielopienna (multitiered) Osobny serwer WWW obsługuje żądania HTTP na RPC Logika aplikacyjna wydzielona do osobnego serwera Dane przechowywane na osobnym serwerze Możliwość skalowania (wiele serwerów WWW i aplikacji) Zwiększone bezpieczeństwo (dodatkowe zapory) Klient Warstwa prezentacji HTTP RPC Serwer(y) WWW Serwer(y) aplikacji Logika prezentacji Logika aplikacyjna Serwer danych Logika dostępu do danych Baza danych Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 13
Architektury alternatywne (1) Przetwarzanie w chmurze Warstwa bazy danych hostowana na serwerach zewnętrznych (potrzebna warstwa dostępu do danych po stronie serwera aplikacji). Możliwość hostowania aplikacji na serwerze firmy zewnętrznej. Ew. wykorzystanie usług webowych firm zewnętrznych w warstwie aplikacji. Zalety zmniejszenie kosztów i problemów z konserwacją sprzętu Wada powierzenie czasami poufnych danych firmie zewnętrznej Architektura typu peer-to-peer Komunikacja między równoważnymi węzłami sieci. Każdy klient jest jednocześnie serwerem dla innych klientów. Rola serwera ograniczona do dostarczania aplikacji i kojarzenia klientów ze sobą. Stosowana: przy ograniczeniach prawnych przesyłania danych (torrenty) przy ogromnych danych, które nie są przetwarzane, a tylko przesyłane i wymagałyby potężnego centrum danych w aplikacjach mobilnych (sieci społecznościowe, płatności P2P) Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 14
Architektury alternatywne (2) Architektura typu grid Rozbudowana i mocno zrównoleglona warstwa aplikacji Wiele serwerów aplikacji i/lub usług komunikujących się ze sobą Stosowana: gdy przetwarzanie danych wymaga dużej mocy obliczeniowej gdy przetwarzanie wymaga rozproszenia geograficznego gdy wymagana jest wysoka niezawodność i/lub dostępność serwerów Przetwarzanie w modelu volunteer computing Odwrócenie ról klient-serwer Klient, który się zgłasza do serwera, dostaje zadanie obliczeniowe, przetwarza dane i odsyła do serwera. Stosowane do rozproszenia dużych obliczeń na wiele (miliony?) komputerów. Wykorzystuje w tle dostępną moc obliczeniową klientów. Problemy z bezpieczeństwem klientów. Problemy z niezawodnością obliczeń. Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 15
Rozbudowana architektura wielowarstwowa Warstwa prezentacji Warstwa logiki prezentacyjnej Warstwa logiki aplikacyjnej Warstwa usług Warstwa zarządzania danymi Warstwa przechowywania danych (Pseudo)warstwa podstawowa Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 16
(Pseudo)warstwa podstawowa (Foundation) Pakiet Foundation obejmuje klasy wykorzystywane bezpośrednio we wszystkich innych warstwach: definicje podstawowych typów danych (np. typy wyliczeniowe), definicje podstawowych struktury danych (np. listy, drzewa, stosy), użyteczne typy abstrakcyjne (data, czas, waluta) operacje dodatkowe, które nie są dostarczane przez biblioteki Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 17
Warstwa przechowywania danych (Data Layer) Warstwa przechowywania danych (Data Layer) zawiera komponenty odpowiedzialne za przechowywanie (zapisywanie i odczytywanie) danych: bazy danych (tabele, kwerendy) repozytoria plików Wymaga określenia: które klasy są trwałe (dane przechowywane pomiędzy uruchomieniami serwera) jaki sposób przechowywania będzie stosowany (baza danych, pliki) jaki typ bazy danych będzie stosowany (relacyjna, obiektowa) schematu bazy danych (struktura tabel i relacji) Typowa implementacja: serwer SQL Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 18
Warstwa zarządzania danymi (Data Management Layer) Warstwa zarządzania danymi (Data Management Layer) zawiera klasy odpowiedzialne za dostęp do przechowywanych danych. Umożliwia: ochronę danych przed nieupoważnionym dostępem współdzielenie danych między wieloma użytkownikami walidację wprowadzanych danych synchronizację baz danych (w przypadku rozproszonej b.d.) Typowa implementacja Java, C# Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 19
Warstwa usług (Service Layer) Warstwa usług (Services Layer) jest typowa dla systemów rozproszonych, w których wiele różnych aplikacji może wykonywać wiele wspólnych operacji biznesowych. Zawiera klasy (funkcje) grupujące operacje biznesowe na danych Udostępnia jednolity interfejs dla aplikacji klienckich Typowa implementacja Java, C# Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 20
Warstwa logiki aplikacji (Application Logic Layer) Warstwa logiki aplikacji (Application Logic Layer) zwana również warstwą biznesową (Business Layer) zawiera klasy realizujące operacje wymagane w konkretnej aplikacji wynikające z analizy wymagań Może występować po stronie klienta (gruby klient) Gdy występuje po stronie serwera, to często jest zintegrowana w warstwą usług Typowa implementacja: Java, ASP.NET Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 21
Warstwa logiki prezentacji (Presentation Logic Layer) Warstwa logiki prezentacji (Presentation Logic Layer) zawiera funkcje obsługi interfejsu użytkownika. Może występować po stronie klienta i po stronie serwera. Po stronie klienta: Umożliwia obsługę zdarzeń w formularzach zmianę stanu pewnych kontrolek po zmianie stanu innych kontrolek (np. wypełnienie zbioru pól adres dostawy na podstawie pól adres zamieszkania przy kliknięciu przycisku dostawa na adres zamieszkania ). Zapewnia walidację wprowadzanych danych i powstrzymuje klienta przed wysłaniem niewypełnionych formularzy. Typowa implementacja JavaScript Po stronie serwera: Tłumaczy żądania z HTTP na wywołania procedur w warstwie logiki aplikacji. Generuje odpowiedzi HTTP (strony HTML) na podstawie wyników z warstwy aplikacji. Typowa implementacja PHP, Java, ASP.NET Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 22
Warstwa prezentacji (Presentation Layer) Warstwa prezentacji (Presentation Layer) zawiera komponenty interfejsu użytkownika (okna, strony etc.) Umożliwia użytkownikowi wydawanie poleceń dla systemu i wprowadzanie danych. Prezentuje dla użytkownika dane przetwarzane przez warstwę logiki aplikacji. Typowa implementacja HTML, ASP.NET Może być połączona w jeden pakiet z logiką prezentacji (specjalna aplikacja po stronie klienta). Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 23
Przykładowa struktura warstwowa (1) Presentation «form» Customer «textbox» FirstName «textbox» LastName... new edit «form» Order «form» OrderPosition Application Logic ID: integer FirstName: string LastName: String... class Customer 1 * class Order ID: Integer Customer: Customer Positions: OrderPosition[*]... Check(): boolean Services «service» Customers RegisterCustomer (Customer) GetCustomer(ID: integer): Customer... using «service» Orders RegisterOrder (Order) GetOrder(ID: integer): Order GetOrdersOf(ID: integer): Orders[*] CheckOrder(ID: integer): Order... Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 24
Przykładowa struktura warstwowa (2) Data Management «transfer object» Customer «transfer object» Order «register» Customers RegisterCustomer (Customer) GetCustomer(ID: integer): Customer... «register» Orders RegisterOrder (Order) GetOrder(ID: integer): Order GetOrdersOf(ID: integer): Orders[*] ChangeStatus(Order)... Data Layer «table» Customers ID: integer {auto, PK} FirstName: nvarchar [20] LastName: nvarchar [30]... 1 * 1 «table» Orders ID: integer {auto, PK} CustomerID: integer {FK}... * «table» OrderPos ID: integer {auto, PK} OrderID: integer {FK} Number: integer... «index» FullName = LastName + FirstName Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 25
Zawartość projektu architektury systemu (1) 1. Koncepcja systemu Opis ogólny sposobu realizacji systemu. Wymienione wykorzystywane technologie. 2. Struktura systemu 2.1. Struktura sprzętowa Schematyczny diagram komponentów sprzętowych (nienormowany w UML) lub diagram wdrożenia. 2.2. Struktura programowa Diagram komponentów programowych z podziałem na podsystemy i/lub warstwy. 3. Komponenty sprzętowe Specyfikacje komponentów sprzętowych z wymaganiami sprzętowymi (o ile nie zostały wcześniej zamieszczone w specyfikacji wymagań, albo gdy zostały uzupełnione). 4. Podsystemy W przypadku bardziej złożonego systemu specyfikacje poszczególnych podsystemów z przydzielonymi przypadkami użycia i określonymi komponentami składowymi. Jeśli określono strukturę sprzętową, to podaje się lokalizację komponentów programowych na komponentach sprzętowych. 5. Warstwy architektoniczne Specyfikacje warstw architektonicznych z opisem sposobu realizacji. W specyfikacji wyszczególnione komponenty przydzielone do poszczególnych warstw. W architekturze wielopiennej przypisanie warstw do poszczególnych pni. Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 26
Zawartość projektu architektury systemu (2) 6. Komponenty programowe 6.1. Komponenty główne Specyfikacje głównych komponentów programowych z przydzielonymi przypadkami użycia. 6.2. Komponenty warstwy prezentacji Specyfikacje głównych komponentów należących do warstwy prezentacji. 6.3. Komponenty warstwy aplikacji Specyfikacje głównych komponentów należących do warstwy aplikacji. 6.4. Komponenty warstwy danych Specyfikacje głównych komponentów należących do warstwy aplikacji. 7. Sposoby realizacji wymagań jakościowych Tu można przekopiować wymagania jakościowe ze specyfikacji i uzupełnić je o rubrykę "Sposób realizacji". Rubryka ta jest wypełniana szczegółowo w sposób tekstowy i stanowi zalecenia dla programistów. 7.1. Wymagania w zakresie wiarygodności 7.2. Wymagania w zakresie wydajności 7.3. Wymagania w zakresie elastyczności 7.4. Wymagania w zakresie użyteczności Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 27
Literatura Dennis A., Wixom B.H., Tegarden D.: Systems Analysis & Design. An Object-Oriented Approach with UML, John Wiley and Sons, USA, 2002 Bass L., Clements P., Kazman R.: Architektura oprogramowania w praktyce, WNT, Warszawa, 2006 Hofmeister C., Nord R., Soni D.: Tworzenie architektury oprogramowania, WNT, Warszawa, 2006 Projektowanie Aplikacji Internetowych Projektowanie architektury systemu internetowego 28