Komponentowe i rozproszone (Web)Service Oriented Architecture
Serwis jako komponent Odseparowane (web) serwisy odpowiadające za poszczególne obszary domenowe Serwis może mieć własne GUI pozwalające na pracę osobom z odpowiedniego działu Synchroniczne wołania usług dostarczanych przez inne oddziały
Księgowość Marketing Obsługa Klientów Spedycja Sklep Magazyn Przykładowy sklep
Przykładowa funkcjonalność
Księgowość Marketing Obsługa Klientów Spedycja Sklep Magazyn
A gdzie są dane? W bazie danych…
Księgowość Marketing Obsługa Klientów Spedycja Sklep Magazyn
Klienci Transakcje Towary Księgowość Marketing Obsługa Klientów Spedycja Sklep Magazyn Może być gorzej?
To była tylko jedna akcja … Są i inne: Raporty Przeceny Przyjecie nowych towarów Wysyłka Zwroty i reklamacje * Liczba użytkowników
Podejście synchroniczne – powoli, ale przynajmniej działa Procesy głównie czekają na wyniki/zasoby/potwierdzenie Lepszy sprzęt często oznacza, że poświęcamy więcej cykli (szybszego) procesora na czekanie Timeout – powoduje ponowienie żądania (a stare może być jeszcze przetwarzane) System działa w developmencie a w produkcji (od razu lub nie) całość zaczyna mieć problemy
Podejście synchroniczne - czasem jednak nie działa … Maintenance/awaria/deadlock w jednym podsystemie/serwerze może spowodować degradację/zatrzymanie całego systemu Przenosimy serwer - Jak np. zmienić adresację w sieci? Skalujemy system – jak dodać drugą instancję serwisu magazyn? Co z utrzymywaniem starych wersji ?
Zależności Utrudniają development Utrudniają wdrażanie Ograniczają stabilność Utrudniają zarządzanie i utrzymanie Nie można ich wyeliminować ale trzeba je ograniczać...
Zależności (coupling) w kodzie Powiązanie wynika z zalezności Wywołanie funkcji zależy od sygnatury czyli kod wywołujący zależy od definicji funkcji Miary zależności w kodzie Ca – liczba klas (funkcji), które zależą od danej klasy (funkcji) Ce - liczba klas (funkcji), od których zależy dana klasa (funkcja)
Zależności (coupling) w systemach Platformowe (protokół, format – interoperability) Czasowe (żądanie - odpowiedź) Przestrzenne (adresy – identyfikacja)
Kilka scenariuszy Zmiana szczegułów implementacyjnych serwisu = konieczność wersjonowania lub jednoczesnego deplymentu wielu serwisów Zmiana (deplyment) nowej wersji serwisu, od którego zależy wiele innych serwisów = zmiany konfiguracyjne w klientach Upadek bazy = downtime + utrata danych Deadlock = rollback transakcji Upadek serwisu = blad przy wywołaniu
Jak efektywnie redukować powiązania? Ca, Ce – zależności w kodzie, SOA – opieramy się na kontraktach Platformowe – użycie XML/JSon zamiast binarnych protokołów (SOAP?) Przestrzenne – wirtualne endpointy, routowanie (np. po typie komunikatu) Czasowe – asynchroniczne komunikaty
Redukcja powiązań... jest złożona Efferent Afferent Platformowe Czasowe Przestrzenne