Opis architektury klient serwer

advertisement
WDRAŻANIE SYSTEMÓW
WIELOWARSTWOWYCH
SPIS TREŚCI
Strona
1. WSTĘP.........................................................................................
3
2. ZANIM POWSTAŁA ARCHITEKTURA WIELOWARSTWOWA...
3
3. ARCHITEKTURA ANSI/SPARC………………………………………
4
4. ARCHITEKTURY WIELOWARSTWOWE………………………….
5
4.1 ARCHITEKTURA DWUWARSTWOWA (klient/serwer) ……….
5
4.2 ARCHITEKTURA DWUIPÓŁWARSTWOWA……………………...
8
4.3 ARCHITEKTURA TRÓJWARSTWOWA……………………………
9
LITERATURA .............................................................................
16
WSTĘP
Sztuka projektowania architektury systemowej dąży do bardzo praktycznego celu:
udostępniania informacji klientom danego systemu. Za początki baz danych niektórzy
uważają czasy, w których cywilizacja sumaryjska i egipska zaczęły korzystać z pisma
klinowego. Komputery pozwoliły jednak na przechowywanie i manipulowanie zawartymi w
bazie danymi w sposób bardzo wyrafinowany.
Architektura systemu to pierwszy wymiar procesu projektowania bazy danych, forma
abstrakcyjna wykorzystywana podczas całego procesu tworzenia systemu. Architektura
systemów bazodanowych przebyła długą drogę od czasu swoich narodzin w latach 60-tych.
Wczesne bazy oparte na modelu hierarchicznym stopniowo ewoluowały w sieciowe zestawy
wskaźników, następnie w zbiory relacji i w końcu w grupy obiektów.
Poszczególnymi modelami architektur systemów bazodanowych były kolejno:
- CODASYL DBTG (lata 60 –70)
- Model ANSI/SPARC (American National Standard Institute/Standard Planning and
Requirements Committee) –lata 70
- Modele wielowarstwowe, obiektowe, rozproszone – lata 80. i 90.
ZANIM POWSTAŁA ARCHITEKTURA WIELOWARSTWOWA
Z historycznego punktu widzenia w początkach informatyki w firmach usługowych
czy też handlowych sama baza danych często ograniczała się do jednego komputera, na
początku często był to zwykły PC, który służył do wszystkiego: wystawiania faktur, pisania
dokumentów, czy też służył do przechowywania adresów klientów, aby móc prowadzić z
nimi korespondencję. Generalnie początki informatyzacji firm czy przedsiębiorstw polegały
na pewnej automatyzacji prac biurowych i próbach gromadzenia w jednym miejscu
wybranych informacji.
Stopniowy rozwój spowodował, że system oparty o jeden komputer lub pojedyncze
komputery przestał być wystarczający. Nie wystarczał zarówno pod względem pojemności,
jak i możliwości automatyzacji prac poza typowymi czynnościami biurowymi. Początkowo
rozwiązywano ten problem poprzez zwiększanie ilości komputerów i powielanie
oprogramowania. Bardzo szybko pojawił się jednak problem o wiele poważniejszy, a
mianowicie problem spójności danych. Problem polegał na tym, w jaki sposób spowodować,
aby zmiany wprowadzone w jednym komputerze były natychmiast widoczne na pozostałych
komputerach korzystających z tych samych danych. Wiązało się to z konieczności bieżącego
śledzenia stanu organizacji, stanu finansowania czy też płynnej obsługi klientów. Równolegle
z tym problemem traktowanym jako problem techniczny pojawiły się zagrożenia związane ze
stanem organizacyjnym przedsiębiorstw. Oczywiste jest, że rozwiązanie takiego problemu
musi pociągnąć za sobą dość poważne zmiany organizacyjne.
Pierwszym krokiem było łączenie komputerów w sieci tak, aby mogły one wymieniać
między sobą informacje, czy też mogły po prostu komunikować się ze sobą. Spowodowało to
między innymi ewolucję systemów baz danych, które musiały dostosować się do pracy w
sieci. Zmiany rozwinęły się w dwóch kierunkach. Z jednej strony zaczęto produkować coraz
większe i szybsze komputery umożliwiające jednoczesną obsługę wielu klientów. Powstała
architektura typu host/terminal składająca się z dużego komputera często klasy mainframe, do
którego podłączonych było wiele terminali. Terminal taki stanowiła prosta końcówka
umożliwiająca jedynie w sposób znakowy wyświetlanie informacji i wprowadzanie danych.
Wszystkie obliczenia natomiast, zapewnianie współbieżności, przechowywanie informacji
odbywało się na tym jednym dużym komputerze.
Drugi kierunek to rozwinięcie koncepcji wspólnego dostępu tylko do pewnych
zespołów. Powstawały sieci słabszych (w porównaniu z komputerami klasy mainframe)
komputerów, gdzie jeden z nich był odpowiedzialny za przechowywanie danych.
Przechowywanie to ograniczało się zazwyczaj do przechowywania pewnej grupy plików, do
których dostęp współbieżny miały wszystkie komputery. Na takim komputerze były
zaimplementowane mechanizmy umożliwiające spójne nanoszenie poprawek i uaktualnianie
danych. Polegało to na wprowadzeniu takiego mechanizmu, który uniemożliwia dostęp do
danych, gdy są one w trakcie obróbki przez któregokolwiek z użytkowników.
Mechanizm taki był realizowany na różne sposoby. Jednym z nich np. było zainstalowanie w
systemie baz danych specjalnego programu zapewniającego arbitralnie dostęp do danych.
Innym zainstalowanie w systemie operacyjnym mechanizmu nadawania atrybutów plikom
pozwalającego na nadzorowanie jego udostępniania i dokonywania zmian zawartości.
Wszystkie te rozwiązania miały zazwyczaj jedną zasadniczą wadę - były mało elastyczne.
ARCHITEKTURA ANSI/SPARC – podstawa projektowania systemu opartego na
bazach danych
Najważniejszą ze wczesnych prób standaryzacji architektury systemowej była
trójschematowa architektura ANSI/SPARC. Dzieli ona system bazodanowy na trzy modele:
wewnętrzny, koncepcyjny i zewnętrzny. Celem przewodnim twórców tej architektury jest
ustanowienie wszystkich jej warstw niezależnymi od siebie. Podejście to umożliwia
uodpornienie systemu na zmiany w strukturach fizycznych czy koncepcyjnych. Po zmianie
lub dodaniu nowej struktury magazynowej nie trzeba przebudowywać całego systemu. Ta
koncepcja niezależności danych była głównym punktem wczesnej analizy metod
projektowania i zarządzania bazami danych i nie straciła swojej ważności aż po dzień
dzisiejszy. Jest ona fundamentem, na którym bazują nowoczesne metody projektowania.
Model koncepcyjny – reprezentuje informacje zawarte w bazie danych. Struktury schematu
koncepcyjnego mogą zawierać struktury, operacje i ograniczenia dotyczące modelu danych.
W bazie relacyjnej np. w skład modelu koncepcyjnego wejdą tabele, reguły integralności oraz
język SQL. W bazie obiektowo relacyjnej schemat koncepcyjny obejmie wszystkie struktury
relacyjne oraz definicje typów danych i klas, a także metody reprezentujące zachowania
obiektów. Model koncepcyjny bazy zorientowanej obiektowo to definicje klas, ich atrybuty
oraz metody.
Model wewnętrzny – to rzeczywista, fizyczna struktura bazy danych. Zawiera indeksy,
uporządkowania pól, zestawy znaków itp. Schemat wewnętrzny stanowi uzupełnienie
schematu koncepcyjnego. Jest implementacją niskopoziomową wyposażoną w metody
efektywnego dostępu do danych za pomocą metod takich jak np. indeksowanie kolumn.
Odwzorowanie schematu koncepcyjnego na fizyczny zabezpiecza przed skutkami zmian
dokonywanych w metodach fizycznego zapisu bazy. Nowe indeksy, zmienione struktury
magazynowe czy zmiany w kolejności zapisywania pól nie wpływają na modele wyższego
poziomu. Tak właśnie realizuje się niezależność danych.
Model zewnętrzny – stanowi kolekcję perspektyw wykorzystywanych przez aplikacje
korzystające z zasobów bazy. Dane prezentowane użytkownikowi odwzorowywane są z
zapisu fizycznego na postać ujętą w schemacie koncepcyjnym. Pojedynczy użytkownik
systemu może mieć dostęp do całości lub najczęściej tylko wydzielonej części danych
systemu.
Architektura trójschematowa miała i nadal ma ogromny wpływ na projektowanie
systemów bazodanowych. Rozdzielenie schematów koncepcyjnego i wewnętrznego
odseparowuje problemy związane z wykorzystywanymi rozwiązaniami sprzętowymi i
oprogramowaniem do abstrakcyjnego modelu danych. Konstruując modele logiczne nie
trzeba martwić się o parametry fizyczne, ścieżki dostępu, struktury pliku, optymalizację
systemu.
ARCHITEKTURY WIELOWARSTWOWE
Charakterystyka
Lata 80. Stały pod znakiem rozszerzającej się dostępności komputerów osobistych,
coraz większej miniaturyzacji maszyn i łączeniu ich w sieci lokalne. Postęp techniczny
umożliwił rozproszenie obliczeń na szereg komputerów, zamiast wykonywania ich na
pojedynczym systemie klasy mainframe. Na początku podejście to przerodziło się w
architekturę klient/serwer, której rozwinięciem stała się później rozproszona architektura
klient/serwer, umożliwiająca wprowadzenie większej ilości serwerów obsługujących bazę
danych.
Z początkiem lat 90, pojawiło się tzw. partycjonowanie aplikacji.
Jest to następny poważny krok w rozwoju architektury klient/serwer. Możliwe stało się
bowiem uruchamianie części aplikacji na komputerze-kliencie a części na serwerze, do
którego dostęp mieli pozostali klienci. Jedną z popularnych metod zastosowania tej
technologii jest przetwarzanie transakcji(Transaction Processing Monitoring), w której
obsługą transakcji zajmuje się wydzielony serwer middleware, a cała architektura zyskała
miano trójwarstwowej.
Parę lat później w związku z szeroką dostępnością Internetu, architektura trójwarstwowa
przeszła jeszcze jedną transformację. Modyfikowano mianowicie oprogramowanie
middleware, dla rozproszonych aplikacji obiektowych, co zaowocowało możliwością
przeniesienia większej części obliczeń z klientów na serwery. Możliwe stało się również
rozpraszanie obiektów na różne komputery, co dało początek rozproszonej wielowarstwowej
architekturze obiektowej.
ARCHITEKTURA DWUWARSTWOWA (klient/serwer)
Dynamicznie rozwinęła się w końcu lat 80-tych. W myśl tej koncepcji systemy oparte
na tej architekturze podzielono na dwie części. Z jednej strony została wydzielona pewna
część systemu odpowiedzialna za przechowywanie danych i zachowanie ich pełnej spójności.
Z drugiej strony wydzielono pewne aplikacje czy procesy, które pobierają dane od
użytkownika wyświetlają je i przetwarzają, a następnie albo przesyłają je do serwera w celu
zapamiętania, albo generują pewne zapytania w celu uzyskania konkretnych informacji z
komputera-serwera. W ten sposób cały proces przetwarzania danych mamy podzielony na
dwie części. Z jednej strony mamy serwer, który przechowuje dane, ale potrafi także je
wyszukiwać z przechowywanej bazy na podstawie zapytań poszczególnych komputerów
(klientów), a z drugiej strony mamy aplikacje klienta, które tak naprawdę nic nie muszą
wiedzieć o fizycznej strukturze danych przechowywanych na serwerze o sposobie ich
zarządzania o liczbie użytkowników, a muszą jedynie umieć wysłać zapytanie do bazy,
wyświetlić informacje na ekranie lub wysłać do serwera polecenie aktualizujące dane.
Głównym zadaniem architektury klient/serwer jest ograniczenie ilości danych przesyłanych
przez sieć. Tradycyjny serwer plików, w momencie otrzymania prośby o udostępnienie
pewnego pliku, prześle całą jego zawartość do odpowiedniego klienta. Omawiana tu
architektura pozwala na uściślenie zarówno zapytania jak i odpowiedzi, tak aby klient
otrzymał dokładnie te dane na których mu zależy.
Oczywiście system o architekturze klient/serwer można umieścić na jednym komputerze.
Praca odbywa się wtedy dzięki możliwość przełączania procesów. Przykładem takiego
systemy może być system X-Window czyli graficzne środowisko pracy systemów unixowych
i pochodnych.
Jest to jednak rozwiązanie nietypowe.
Typowym rozwiązaniem jest oczywiście kilka komputerów pracujących w sieci. W takiej
konfiguracji mamy komputer (często jest to maszyna unixowa) wyposażony w serwer bazy
danych, czyli pewne oprogramowanie umożliwiające przechowywanie i zarządzanie danymi.
Z drugiej strony mamy aplikacje klienta, opartą najczęściej na środowisku graficznym typu
Windows, realizującą komunikację z użytkownikiem tzn. prezentującą dane, pozwalającą
wprowadzać i uaktualniać informację zadawać nietypowe zapytania dotyczące
pogrupowanych informacji przechowywanych na serwerze. Zastosowanie środowiska
graficznego znacznie wzbogaciło możliwości prezentacyjne, a jednocześnie pozwoliło na
bardziej naturalną komunikację z użytkownikiem z wykorzystaniem wykresów, map
cyfrowych, a także z wykorzystaniem rozwiązań multimedialnych, co pozwala na
przechowywanie w bazie danych obrazów i dźwięków.
zalety i wady
Tworząc system klient/serwer musimy zastanowić się nad tym co zyskujemy, a co
tracimy wybierając taką właśnie architekturę.
Zyskujemy przede wszystkim dużą elastyczność całego systemu, gdyż możemy pracować z
różnymi środowiskami graficznymi równocześnie, możemy operować danymi w sposób
spójny a jednocześnie niezależny od ich bieżącej struktury. Zarządzając z kolei samym
serwerem danych jesteśmy uniezależnieni od konkretnych użytkowników, od problemów
związanych ze wspólnym dostępem, a co za tym idzie możemy skoncentrować się na samej
strukturze informacji, na strukturach biznesowych, na współbieżności i efektywności.
Ponadto, gdy firma pracująca z takim systemem rozwija się i ilość informacji przechowywana
na serwerze powoduje, że staje się on mniej wydajny, możemy wymienić jednostkę serwera
na wydajniejszą maszynę, możemy zmienić rodzaj oprogramowania serwera, nie powodując
żadnych zmian interfejsu użytkownika. Nadal pracują oni w znany sobie sposób. Zyskiem jest
także fakt, że w przypadku zmiany interfejsu użytkownika istniałaby konieczność ponownego
przeszkolenia personelu, co oczywiście pociąga za sobą wzrost kosztów. W przypadku
dużych organizacji, np., wielooddziałowego banku, koszty te są znaczne. Kolejnym
wygodnym elementem jest możliwość wyboru różnego dostępu do danych w zależności od
kategorii użytkowników mających z nimi kontakt. Ta sama baza danych może obsługiwać
zarówno pracowników kas dużego supermarketu, którzy podliczają sumy na podstawie
odczytanych kodów paskowych towarów, a z drugiej strony może obsługiwać magazyn, gdzie
pracownik musi mieć możliwość wystawienia faktury, zaznaczenia (wpisania) nowej
dostawy, czy właściwego rozmieszczania towarów na półkach. Jednocześnie menedżer
chciałby znać aktualne wpływy finansowe, sprawdzić, jakie kategorie produktów przynoszą
największe zyski, czyli mieć dostęp do bardziej przekrojowych informacji.
Każdy zatem z tych pracowników wymaga innego interfejsu, a tak naprawdę nieco innego
oprogramowania Pracownikowi kasy wystarczy prosty czytnik kodów paskowych i
uproszczony terminal, na którym wyświetlany będzie jedynie wykaz sprzedanych towarów i
ich podsumowanie. W przypadku magazynu pracownik musi mieć dostęp do informacje dużo
bardziej rozbudowanej, często potrzebuje informacji z bazy danych klientów i dostawców,
musi mieć możliwość zarządzania stanem magazynu, umieć określić czego brakuje, co należy
zamówić, a czego jest w nadmiarze i należy obniżyć cenę ze względu na możliwość
przeterminowania itd. Z kolei zarządzanie firmą na wysokim poziomie wymaga bardzo
przekrojowych danych, związanych z zarządzaniem a nie szczegółowym stanem
poszczególnych stanowisk kasowych .
Tak więc mając wspólną bazę danych możemy tworzyć szereg różnych aplikacji klienckich,
które mając dostęp do wspólnych danych operują na nich w zupełnie inny sposób. Pomimo
bardzo istotnych i wymiernych korzyści wybór tej technologii nie odbywa się nigdy bez strat.
Po pierwsze stopień komplikacji jest dużo większy niż pojedynczy pakiet programów
przystosowany do pracy na komputerach pracujących w jakiejkolwiek sieci. Musimy przy
pisaniu programów zapewniać mechanizmy kontroli spójności, wielodostępu, co przy
rozległych systemach nie jest sprawą trywialną. Po drugie pisząc aplikacje klienckie musimy
zapewnić ich właściwe komunikowanie się z serwerem bazy danych. Aplikacja kliencka nie
ma bezpośredniego dostępu do danych elementarnych, a jedynie za pomocą specjalnego
języka (najczęściej jest to SQL) komunikuje się z serwerem zadając pytania, nanosząc pewne
poprawki. Przy architekturze klient/serwer musimy także pamiętać o odpowiednich
połączeniach sieciowych - o pewnych standardach, czyli zapewnieniu prawidłowego
porozumiewania się komputerów z różnymi systemami. W architekturze klient/serwer
zakłada się, że poszczególne komponenty środowiska mogą pochodzić od różnych
dostawców. Wynika, to ze specjalizacji firm produkujących poszczególne komponenty
systemów informatycznych. Stąd celowym jest dobieranie najlepszych w swojej klasie
produktów, aby tworzyć wydajne systemy. Samo wybieranie komponentów jest poważnym
problemem, gdyż musimy ze sobą uzgodnić pewien standard wymiany informacji. Na
poziomie serwera bazy danych najczęściej takim standardem jest język SQL, chociaż pomimo
przyjętych pewnych norm każdy z serwerów operuje pewnymi rozszerzeniami. Nie
korzystanie z tych rozszerzeń powoduje, że tracimy pewną możliwość, która jest
zaimplementowana bardzo wydajnie i decyduje o wyższości danego serwera nad innym.
Korzystanie z tych rozszerzeń powoduje często mniejszą skalowalność i przenośność
aplikacji niż w przypadku standardowego SQL.
Rozwarstwienie
Środowisko klient/serwer z jednej strony elastyczne i wydajne ma swoje ograniczenia.
Okazuje się, że tworzenie bardzo dużych systemów, gdzie aplikacja kliencka musi realizować
bardzo dużo funkcji, w których mamy do czynienia nie z jednym, ale z wieloma serwerami
danych rozproszonymi między oddziałami danej organizacji zaczyna nastręczać pewne
trudności. Wiąże się to z tym, że musimy zapewnić zarówno wydajność wykonywania
pewnych operacji, jak i spójność danych. Z kolei rozbudowywanie aplikacji klienckiej
powoduje ich ogromną czasami złożoność i wysoki stopień komplikacji, przez co zwiększają
się jej wymagania sprzętowe.
W związku z tym pojawiła się tendencja do wydzielania pewnych płaszczyzn przetwarzania.
Jeżeli przyjrzymy się strukturze informacji w organizacji czy firmie, to okaże się, że możemy
tę informację podzielić na pewne warstwy. Z jednej strony mamy samą strukturę informacji,
czyli fizycznie rzecz ujmując strukturę bazy danych - strukturę tablic, strukturę rekordów,
listę pól, typy wartości, jakie mogą przyjmować dane. Na tą strukturę nakłada się warstwa
tzw. reguł biznesowych. Są to pewni zależności pomiędzy danymi właściwe dla konkretnej
organizacji lub właściwe w danym okresie istnienia organizacji. Taką regułą może być np.
algorytm naliczania oprocentowania dla kredytów, sposób udzielania zniżek na bilety lotnicze
itd. Są to więc pewne algorytmy postępowania nie związane w sposób bezpośredni z danymi,
ale ich sprecyzowanie jest konieczne dla prawidłowego funkcjonowania firmy. Trzecia
warstwa to tzw. warstwa prezentacyjna określająca sposób wprowadzania i wyświetlania
danych. Określa ona np. czy pewne dane przedstawiamy w postaci listy, czy pól do
wprowadzania, czy data ma mieć strukturę dzień-miesiąc-rok, czy też rok-miesiąc-dzień
(choć jest to niezależne od sposobu przechowywania danych w bazie), czy gdy użytkownik
kliknie myszą na nazwisku klienta to wyświetlą się informacje o operacjach
przeprowadzonych na jego koncie itp.
Widać z tego, że sama struktura informacji narzuca nam podejście wielowarstwowe do
tworzenia systemu informatycznego. Wyraźnie wyłoniła się pewna warstwa, która nie
dotyczy ani samej struktury informacji ani sposobu jej prezentacji, natomiast dotyczy reguł
zarządzania tą informacją. Powstała wobec tego idea, która zakłada umieszczenie tychże reguł
biznesowych w odpowiednim miejscu, czy też na odpowiedniej płaszczyźnie architektury
klient/serwer.
W przypadku typowej architektury klient/serwer mamy do czynienia z architekturą
dwuwarstwową (warstwa klienta i warstwa serwem); reguły biznesowe najczęściej są
umieszczane w aplikacji klienckiej. Zmiana tych reguł powoduje konieczność dokonania
wymiany wszystkich aplikacji klienckich bez możliwości równoległego funkcjonowania
starej i nowej wersji, a w najlepszym razie odpowiedniego ich skonfigurowania.
ARCHITEKTURA DWU I PÓŁ WARSTWOWA
Problemy powyższe przyczyniły się do powstania nowego trendu wśród producentów baz
danych. Trendu mającego na celu wbudowanie mechanizmów obsługi reguł biznesowych i
szerszą obróbkę danych już na poziomie SZBD.
Powstała idea przeniesienia pewnej warstwy funkcjonalnej, czyli sposobów zarządzania i
przetwarzania informacjami na stronę serwera tak, aby aplikacje klienckie dostały jedynie
pewną listę funkcji, operacji, żądań, jakie mogą realizować, a nie miały bezpośredniego
dostępu do danych. Takie umieszczenie po stronie serwery było możliwe dzięki temu, że
wiele serwerów baz danych wyposażono w mechanizm zwany procedurami wbudowanymi i
trigerami, czyli pewnymi procedurami, które uruchamiają się automatycznie przy
zachodzeniu pewnych zjawisk. Trigery powodują np, że przy zmianie pewnych danych inne
się uaktualniają; gdy usuwamy z naszej bazy informacje o kliencie, to chcemy usunąć
wszystkie zamówienia jakie on złożył itd. Procedury te powinny uruchamiać się
automatycznie, bez ingerencji użytkownika.
W takiej architekturze mamy zatem do czynienia z aplikacją kliencką, która nie odwołuje się
bezpośrednio do bazy danych, ale jedynie wywołuje pewne operacje w serwerze danych,
który bądź udostępnia pewne dane bądź realizuje wywołane procedury bazodanowe. Drugim
elementem są zaimplementowane w bazie danych reguły biznesowe wspólne dla wszystkich
aplikacji klienckich. Wymiana takiej reguły powoduje, że sposób funkcjonowania aplikacji
klienta zmieni się dla każdego klienta jednocześnie. Taką aplikację z warstwą kliencką i
warstwą serwery bazy danych, który nie ogranicza się tylko do przechowywania danych, ale
również realizuje funkcje biznesowe nazywamy często architekturą dwu i pół warstwową.
Wady
Jednak istnieją pewne wady tej architektury. Język procedur wbudowanych i trigerów jest
dość skomplikowany, a najczęściej jest to "dialekt" języka SQL z pewnymi rozszerzeniami
dotyczącymi przetwarzania instrukcji strukturalnych. Niestety każdy producent serwerów baz
danych lansuje nieco odmienny format tego języka i trudno znaleźć dwie identyczne pod tym
względem bazy danych. Stąd też istnieje groźba przepisywania od nowa procedur w
przypadku zmiany serwera bazy danych. Nie jest to szczególnie skomplikowane, gdyż
większość procedur ma podobne mechanizmy, ale różnią się składnią. Ponadto często reguły
biznesowe są bardziej skomplikowane niż te podane jako przykłady i do ich realizacji nie
zawsze najodpowiedniejszy jest język procedur wbudowanych serwera. Wygodniejsze
okazują się języki trzeciej generacji.Stąd istnieje potrzeba wprowadzania kodu poza strukturą
serwera bazy danych.
Działanie aplikacji w architekturze klient / serwer wymaga sprawnej komunikacji
pomiędzy stacją roboczą, a serwerem. Informacja nie jest przekazywana ciągłym strumieniem
lecz w pakietach. Wysłany pakiet dociera do odbiorcy w różnym czasie:
 w sieci lokalnej (LAN) jest to czas rzędu milisekund
 w sieci rozległej (WAN) czas ten dochodzi do kilkuset milisekund
Operacje wykonywane na stacji roboczej wymagają wielokrotnej komunikacji z serwerem.
Na przykład proste dopisanie rekordu wymaga czterokrotnego przesłania pakietu
informacyjnego (lub grupy pakietów). Kolejny pakiet może zostać wysłany dopiero wtedy,
gdy poprzedni dotrze na miejsce. W sieci rozległej dokonanie tej operacji może więc zostać
wydłużone o niemal sekundę z samej tylko konieczności czterokrotnego oczekiwania na
pakiet informacji.
Przyczyna opóźnienia tkwi w konieczności wielokrotnej czasochłonnej komunikacji
pomiędzy stacją roboczą, a serwerem. Opóźnienie to jest więc niezależne od mocy
obliczeniowej serwera, mocy obliczeniowej stacji roboczej lub też przepustowości łącza.
Rozwiązanie problemu wymaga zmniejszenia częstotliwości przesyłania informacji pomiędzy
stacją roboczą, a serwerem. W praktyce jest to realizowane poprzez zastosowanie serwera
aplikacji.
ARCHITEKTURA TRÓJWARSTWOWA
Rodzi się, więc pojęcie trzeciej warstwy, warstwy, która byłaby niezależna zarówno od
serwera jak też od aplikacji klienckiej, a która odpowiadałaby za przetwarzanie funkcjonalne
samej informacji. W ten sposób aplikacja kliencka nie komunikuje się bezpośrednio z bazą
danych, a nawet nie musi wiedzieć o jej istnieniu, a komunikuje się jedynie z pewnym
komputerem, na którym zainstalowany jest tzw. serwer aplikacji. Wykonuje on procedury na
żądanie aplikacji klienckiej, a one odwołują się do bazy danych. Serwer aplikacji może także
samodzielnie realizować pewne operacje. Może on dokonywać pewnych obliczeń
numerycznych lub inicjować realizowanie pewnych operacji bazodanowych.
Dobrym przykładem architektury trójwarstwowej są przeglądarki WWW, czerpiące
informacje z internetowych serwerów bazodanowych, jednak niełączące się z nimi
bezpośrednio, ale za pomocą tzw. serwerów WWW.
Serwer WWW zachowuje się w tym wypadku jak klient serwera bazy danych. Oba te serwery
mogą choć nie muszą znajdować się na jednej maszynie. Użytkownik komunikuje się z
serwerem WWW poprzez interakcję z przeglądarką w dowolnym obsługiwanym przez niego
języku np.(CGI,PHP,JAVA. itp.). Serwer WWW łączy się z bazą danych i za pomocą SQL-a
lub np. zdalnych wywołań procedur (RPC) uzyskuje potrzebne dane, które następnie przesyła
do przeglądarki klienta. Takiego rozdziału dokonuje się w sytuacji, gdy możliwe jest
wyodrębnienie fazy obróbki danych wymagającej intensywnej interakcji z bazą danych i
przeniesienia reszty tej obróbki poza serwer bazy. Podejście to znacznie ogranicza ilość
danych przesyłanych siecią, ma istotny wpływ na bezpieczeństwo danych ze względu na
zgromadzenie w jednym miejscu procedur pracujących na danych oraz daje łatwiejszą
obsługę interface’u użytkownika. Prezentowane tu rozwiązania ewoluują w kierunku
wspomnianej wcześniej architektury monitorującej przetwarzanie transakcji, w której monitor
TP (Transaction Proccessing) pośredniczy pomiędzy klientem a bazą danych. Wspomniane
już wcześniej partycjonowanie aplikacji jest więc procesem polegającym na podziale aplikacji
na serwery i moduły działające na różnych klientach i serwerach.
Serwer aplikacji łączy w sobie różne technologie, aby ułatwić rozwijanie, wdrażanie i
zarządzanie wielowarstowowymi, rozproszonymi aplikacjami. Obecnie na rynku znajduje się
całe mnóstwo technologii "serwerów aplikacji". Technologie te można podzielić na dwie
podstawowe kategorie:
 Serwery aplikacji Webowych
 Firmowe (ang.legacy) serwery aplikacji
Serwer aplikacji Wekowych
Serwer aplikacji Webowych zapewnia środowisko do rozwijania aplikacji opartych na
HTML. Umożliwia pisanie aplikacji klient/serwer. W architekturze tej serwer aplikacji
Webowych znajduje się na serwerze Weba i obsługuje napływające żądania klientów.
Połączenia z bazami danych są realizowane przy pomocy ODBC i JDBC.
Ten typ serwera aplikacji jest łatwy w eksploatacji i zorientowany na Javę ze wsparciem dla
technologii Enterprise JavaBeans do tworzenia komponentów do pracy po stronie serwera.
Jednak rozwiązania te nie spełniają wymogów aplikacji korporacyjnych o krytycznym
znaczeniu - nie zapewniają obsługi transakcji, zapewniają bezpieczeństwo jedynie na
podstawowym poziomie, nie mają dostępu do systemów firmowych i zazwyczaj
charakteryzują się wydajnością podoptymalną.
Zalety
Wady
Stworzone z myślą o aplikacjach dla Internetu Brak obsługi transakcji
Zintegrowane z serwerem Weba
Niska wydajność
Łatwość rozwijania oprogramowania
Brak zarządzania systemami
Równoważenie obciążenia dla zapewnienia
Małe wsparcie dla istniejących systemów
skalowalności
Przykładami serwerów aplikacji Webowych są rozwiązania dostarczane przez Netscape,
NetDynamics i WebLogic.
Firmowe serwery aplikacji
Firmowe serwery aplikacji zapewniają infrastrukturę dla aplikacji o krytycznym
znaczeniu dla biznesu z obsługą transakcji, bezpieczeństwem, wychodzeniem z awarii,
równoważeniem obciążenia służącym do integracji danych w istniejących, firmowych
systemach, takich monitory transakcji. Jednak wiele z tych rozwiązań zamyka rozproszone
obiekty w ramach architektury klient/serwer i przez to utrudnia wsparcie dla działań opartych
na Webie.
Zalety
Wady
Solidna reputacja w korporacyjnych
Niestworzone z myślą o rozproszonych,
aplikacjach o krytycznym znaczeniu
Webowych środowiskach
Obsługa transakcji w aplikacjach
Niska wydajność w transakcjach
intranetowych
Internetowych
Bezpieczeństwo w korporacyjnych
Złożone środowisko programistyczne
aplikacjach intranetowych
Brak integracji z serwerem Weba
Ograniczone wsparcie językowe
Przykładami firmowych serwerów aplikacji mogą być rozwiązania BEA M3 i IBM
Component Broker.
Rozproszona obiektowa architektura wielowarstwowa ( na przykładzie arch.
CORBA)
Wraz ze wzrostem popularności technologii OO, zaczęto zajmować się problemem
rozpraszania obiektów. Skoro partycjonowaniu można poddać aplikacje i rozmieścić jej
fragmenty na różnych serwerach to dlaczego tego samego nie zrobić z systemami
obiektowymi. Wraz z utworzeniem grupy OMG(Object Management Group) , która
nakreśliła referencyjny model obiektowy i szereg modeli standardowych dla architektury
CORBA(Common Object Request Broker Architecture) nadeszło rozwiązanie powyższego
problemu. Ze standardem CORBA rywalizuje dziś opracowana przez Microsoft architektura
DCOM(Distributed Common Object Model) jak również inne narzędzią bazodanowe:
RDO(Remote Data Objects), DAO(Data Access Objects), OLE DB(Object Linking and
Abbanding DataBase, ADO(Active Data Objects) oraz ODB-ActivX. Większość
wymienionych tu technologii to dzieło Microsoft’u.
Niezależnie od swoich wad i zalet technologie, wszystkie te modele pozwalają ukryć
procedury dostępu do danych w obiektach i umieścić te obiekty na serwerach zamiast w
aplikacji klienta. Klient otrzymuje dane od obiektów na drodze komunikacji sieciowej.
Rozproszona architektura obiektowa czyni z bazy danych kolejny obiekt, który komunikuje
się z klientami poprzez sieć. Przezroczystość to ma bardzo subtelny wpływ na projektowanie
baz danych. Przeważnie w procesie tym zachodzi zjawisko nadawania pewnych priorytetów
samej bazie lub obsługującej ją aplikacji. W wypadku systemu rozproszonego sytuacja taka
nie występuje. Żaden element systemu nie jest ważniejszy od drugiego. Zamiast stosować
pojedynczy SZBD i obsługiwane przez niego serwery, można łączyć ze sobą różne systemy
zarządzania. Można nawet w obrębie takiego systemu umieścić bazę relacyjną jak i bazę
zorientowaną obiektowo. Zamiast serii modeli danych aplikacji, odwzorowywanych na model
koncepcyjny mamy serię modeli obiektowych odwzorowywanych na szereg modeli
koncepcyjnych. W projektowaniu obiektowym znaczenie zaczyna odgrywać język UML,
który już został uznany za standard i w przyszłości będzie prawdopodobnie szeroko
wykorzystywany.
Nowoczesne metody projektowania nie tylko odzwierciedlają wybraną architekturę
systemową, ale także czerpią z niej swą treść. Podejmowanie decyzji związanej z architekturą
jest tak samo ważne jak projektowanie związków encji, czy pisanie procedur w SQL-u.
Ewolucja architektury systemów bazodanowych nie jest oczywiście jeszcze zakończona choć
ciężko byłoby dziś stwierdzić czym mogłyby być w przyszłości zastąpione obiekty. Na razie
wydaje się, że mają one przed sobą świetlaną przyszłość podejście obiektowe do
projektowania systemów bazodanowych zwłaszcza w skali makro będzie stopniowo wypierać
starsze metody.
W czasach kiedy rozproszone aplikacje obiektowe stają się normą, a biznes oparty na WWW
święci sukcesy, przedsiębiorstwa koncentrują na warstwie pośredniej. Umieszczając logikę
biznesu na serwerach pracujących w warstwie pośredniej, przedsiębiorstwa mogą z łatwością
uaktualniać aplikacje przeznaczone dla tysięcy klientów - bez konieczności każdorazowego
wykonywania instalacji na wszystkich klientach.
Jednakże architektury z warstwą pośrednią są o wiele trudniejsze w programowaniu niż
tradycyjne aplikacje klient/serwer i wiążą się ze sprostaniem wielu unikalnym wyzwaniom
pojawiającym się przy ich wdrażaniu i zarządzaniu. Aby przedsiębiorstwo mogło skorzystać z
zalet wielowarstwowych, rozproszonych architektur, szeregowi programiści muszą być w
stanie rozwijać wyrafinowane, rozproszone aplikacje korzystając z wizualnych środowisk.
Działy IT muszą mieć możliwość łatwego wdrażania tych aplikacji w środowisku testowym i
produkcyjnym, które jest dzielone z administratorami. Administratorzy natomiast potrzebują
możliwości zarządzania tymi zdecentralizowanymi aplikacjami z jednego miejsca
Serwery aplikacji Webowych umożliwiają łatwe rozwijanie aplikacji dla Internetu, natomiast
firmowe serwery aplikacji opierają się na takich istniejących systemach, jak monitory
transakcji (TP Monitors).
Przedsiębiorstwa skłaniają ku rozwiązaniom opartym na serwerach warstwy pośredniej, a
aplikacje rozproszone stają się normą. Rozproszone aplikacje obiektowe oferują
przedsiębiorstwu zwiększoną odporność na awarie i skalowalność, krótszy czas do wejścia na
rynek dzięki wielokrotnemu wykorzystaniu komponentów i możliwości powiązania razem
rozdzielnych, heterogenicznych środowisk dzięki sile www.
Dzięki podzieleniu aplikacji na komponenty i przeniesieniu logiki biznesu na serwery
warstwy pośredniej, departamenty IT mogą w bardzo dużym stopniu zmniejszyć czas
rozwijania nowych aplikacji poprzez ponowne wykorzystywanie logiki znajdującej się w
obiektach serwerów warstwy pośredniej. Inną kluczową zaletą architektur z warstwą
pośrednią jest możliwość umieszczenia logiki biznesu na serwerze, a nie na kliencie. Oznacza
to, że w razie konieczności zmiany kodu, zmiana odbywa się w jednym miejscu, a nie na
każdej z 10.000 aplikacji klienckich.
Rozproszone wielowarstwowe architektury obiektowe oferują również istotne zalety
przedsiębiorstwom, które szukają sposobów zintegrowania nowego biznesu opartego na www
z systemami istniejącymi. Biznesowe aplikacje Webowe wymagają architektur z cienkimi
klientami, aby móc stosować klientów opartych na przeglądarkach. Klienci ci wymagają
możliwości interakcji z zasobami intranetowymi, ale często charakteryzują się ograniczonymi
zasobami systemowymi, co utrudnia ściąganie apletów.
Stosując rozwiązania serwerowe, koncentrujące się na warstwie pośredniej, działy IT mogą
ulżyć klientom przenosząc zasadniczą część logiki biznesu na serwery warstwy pośredniej zostawiając klientom cienki interfejs do bogatej funkcjonalności, której domagają się
użytkownicy. Takie rozwiązania po stronie serwera mogą także łączyć ze sobą różnorodne
platformy i integrować się z systemami firmowymi, dzięki czemu możliwe jest tworzenie
aplikacji Webowych integrujących istniejące systemy przedsiębiorstwa.
Wyzwania stawiane przez wielowarstwowe rozproszone aplikacje
Pomimo, że wielowarstwowe rozproszone architektury oferują przedsiębiorstwom szereg
korzyści, jednak przejście na te nowe rozwiązania wiąże się z nowymi, swoimi własnymi
problemami:
 Rozwijanie wielowarstwowych, rozproszonych aplikacji jest złożone
 Wdrożenie setek komponentów, z których się składa rozproszona aplikacja to duże
wyzwanie
 Zarządzanie tysiącami rozproszonych komponentów jest mozolne.

Rozwijanie wielowarstwowych, rozproszonych aplikacji jest złożone
Wysoce wykwalifikowani, zaawansowani programiści już od pewnego czasu rozwijali
wielowarstwowe, rozproszone aplikacje. Jednak owi programiści posiedli głęboką wiedzę o
różnorodnych złożonościach na poziomie systemu, takich jak współbieżność, blokowanie,
zarządzanie transakcjami, bezpieczeństwo i skalowalność. Rozumieją również w jaki sposób
należy zarządzać dostępem do takich zasobów systemowych, jak wątki, pamięć, połączenia z
bazami danych i połączenia sieciowe.
Jednak złożoność tych zagadnień ograniczała rozprzestrzenianie się programowania
wielowarstwowego, ponieważ przeciętni programiści zazwyczaj mają więcej doświadczenia z
rozwijaniem logiki biznesu niż programowaniem systemowym.
Wdrożenie setek komponentów, z których się składa rozproszona aplikacja, to duże
wyzwanie
Większość rozproszonych aplikacji składa się z setek komponentów. Każdy komponent ma
właściwości, które muszą być odpowiednio skonfigurowane, aby określić w jaki sposób
komponent jest uruchamiany, czy zapisuje informacje na dysk itp. W wielu wypadkach
sposób ustawiania tych właściwości zależy od platformy, na której rezyduje komponent. Co
więcej środowiska testowe i produkcyjne rozproszonych aplikacji są zazwyczaj rozdzielone,
co uniemożliwia programistom wprowadzanie do aplikacji inteligentnych modyfikacji w celu
poprawienia wydajności i skalowalności w rzeczywistym środowisku wdrożeniowym. Po
zainstalowaniu aplikacji, śledzenie aktywności tysięcy zdecentralizowanych obiektów samo w
sobie stanowi duże wyzwanie.
Zarządzanie tysiącami rozproszonych komponentów jest mozolne
Po wdrożeniu rozproszonej aplikacji administratorzy potrzebują sposobów upewniania
się, że aplikacja nadal działa. Komponenty aplikacji rozproszonej mogą się znajdować w
dowolnym miejscu przedsiębiorstwa i doświadczają wszystkich możliwych awarii, takich jak
zawieszenie systemu, przerwania w ruchu sieciowym lub błędy aplikacji.
Administratorzy muszą szybko otrzymywać informacje, że komponent nie pracuje i móc
podjąć natychmiastowe kroki, aby ponownie go uruchomić, albo uruchomić replikę
komponentu i przekierować ruch kliencki.
Jednak zarządzanie sieciami i systemami odbywa się zawsze z poziomu hosta. Hosty
wykonują określone funkcje, wykonuje się na nich oprogramowanie. Rozproszona aplikacja
nie wykonuje się na hoście - wykonuje się na połączonej sieci hostów. Patrząc się na jeden
host nie można stwierdzić czy aplikacja działa, czy nie.
Administrowanie rozproszoną aplikacją oznacza administrowanie całą siecią - może to być
szalenie mozolnym zadaniem jeżeli się nie posiada odpowiednich narzędzi.
Wymagania wobec wielowarstwowych, rozproszonych aplikacji
Aby wielowarstwowe, rozproszone architektury odgrywały poważną rolę w
przedsiębiorstwie, spełnione muszą być następujące warunki:
 Łatwość programowania przez szeregowych programistów. Wielowarstwowe,
rozproszone architektury wymagały zbyt dużo wiedzy systemowej dotyczącej
rozmaitych technologii (takich jak bazy danych, monitory transakcji, bezpieczeństwo i
CORBA), aby zwykły programista chciał się nimi zajmować. Aby takie architektury
mogły być dla przedsiębiorstw praktyczne, zwykli programiści muszą być w stanie
szybko i łatwo budować wyrafinowane, wielowarstwowe rozwiązania bez
konieczności rozumienia leżących w głębi złożoności systemowych. Muszą móc
rozwijać aplikacje - obsługujące transakcje i bezpieczeństwo - korzystając ze
Zintegrowanego Środowiska Programistycznego (IDE). Zapewniona powinna być
również obsługa technologii Enterprise JavaBeans (EJB) dla łatwego rozwijania
komponentów Javy do pracy po stronie serwera.
 Uproszczone wdrażanie aplikacji w zintegrowanych środowiskach testowych i
produkcyjnych. Działy IT muszą mieć możliwość łatwego testowania rozproszonych
rozwiązań, wprowadzania modyfikacji poprawiających wydajność, a następnie





współpracowania z administratorami w tym samym produkcyjnym środowisku. Dla
uproszczenia wdrażania aplikacji, IT potrzebuje rozwiązania udostępniającego
zcentralizowane spojrzenie na wszystkie komponenty znajdujące się na hostach w
sieci i łatwego sposobu ustawiania właściwości komponentów rozproszonej aplikacji.
Zcentralizowane zarządzanie. IT musi mieć możliwość łatwego zarządzania setkami
rozproszonych aplikacji, których wiele może posiadać tysiące komponentów
rozproszonych po całym przedsiębiorstwie.
Sprawne ramy do tworzenia krytycznych, korporacyjnych aplikacji. Aby
wielowarstwowe, rozproszone aplikacje były dla przedsiębiorstwa użyteczne, muszą
się opierać na ramach zapewniających obsługę transakcji, bezpieczeństwo,
wychodzenie z awarii, równoważenie obciążenia, skalowalność i wysoką wydajność.
Otwartość i oparcie na standardach. Przedsiębiorstwa potrzebują rozwiązań, które są
otwarte i opierają się na standardach, aby możliwa była współpraca z innym
oprogramowaniem zbudowanym w oparciu o standardy. Na przykład, rozproszone
aplikacje muszą się móc integrować z takimi systemami aplikacyjnymi jak SAP.
Integracja z bazami danych i systemami firmowymi. Rozproszone aplikacje muszą
mieć dostęp do korporacyjnych danych znajdujących się w popularnych bazach
danych (takich jak Oracle i Sybase), albo udostępnianych poprzez monitory transakcji,
takie jak CICS i Tuxedo).
Wsparcie różnorodnych środowisk. Przedsiębiorstwa posiadają różnorodne
środowiska, które muszą być obsługiwane, aby możliwe było stosowanie
wielowarstwowych, rozproszonych aplikacji. Po stronie serwera komponenty
serwerowe muszą być dostosowane do takich platform jak Windows NT i UNIX.
Dostęp do tych serwerów musi być możliwych z różnorodnych klientów, takich jak
HTML, aplety Javy, aplikacje Javy, dynamiczny HTML i aplikacje C++.
LITERATURA
1. Robert J. Muller "Bazy danych - jezyk UML w modelowaniu danych" Mikom
Warszawa 2000
2. C.J. Date "Wprowadzenie do systemow baz danych" WNT Warszawa 2000
3. C.J. Date i Hugh Darwen "SQL -omowienie standardu jezyka"
WNT Warszawa 2000
4. Marek Rzewuski „W poszukiwaniu najlepszej architektury” PC Kurier 9/2001
5. Radosław Roszczyk „Rozproszone warstwy” PC Kurier 13/2000
6. „Zintegrowane rozwiązanie do tworzenia, wdrażania i zarządzania wielowarstwowymi
rozproszonymi aplikacjami I” – Artykuły techniczne firmy Borland Polska –
www.borland.pl
Download