Wirtualizacja usług

0

Przełomowe innowacje, takie jak Internet, regularnie zmuszają przedsiębiorstwa do szybkiego wprowadzania zmian, jeśli chcą się utrzymać na rynku. Przy każdej takiej przełomowej zmianie pojawia się proste pytanie o działanie aplikacji w firmie – czy są one w stanie wystarczającą szybko ewoluować?

Nowoczesne koncepcje, jak SOA i podobne architektury rozproszonych aplikacji, wydają się być rozwiązaniem, które pozwoli działom IT na szybkie adaptowanie się do zmian. SOA jest jedną z najpopularniejszych architektur, jednak jej wdrożenie nie należy do prostych.

Ponieważ klasyczne metodologie i narzędzia do prowadzenia testów nie przystają do nowoczesnych aplikacji, trzeba wypracować nowsze, bardziej rygorystyczne podejście i produkty, które sprostają szybkim zmianom i coraz bardziej złożonym aplikacjom. Wirtualizacja usług jest jedną najnowszych koncepcji, która ma umożliwić szybsze wprowadzanie oprogramowania na rynek, przy zapewnieniu większej jakości i mniejszego ryzyka.

Wirtualizacja usług służy do symulowania zachowania oprogramowania w celu usunięcia barier związanych z zależnościami pomiędzy zespołem programistów a zespołem testerów. W efekcie ma się skrócić czas tworzenia oprogramowania, przy jednoczesnym zmniejszeniu kosztów i ryzyka. Zależności pomiędzy tymi dwoma zespołami mogą poważnie ograniczyć prace programistyczne i testowe, szczególnie w złożonych środowiskach pełnych wzajemnych zależności. Dodatkowe komponenty mogą być niedostępne, charakteryzować się niską wydajnością lub być bezużyteczne. Poza tym czas i koszt stworzenia scenariuszy testowych i fizycznego środowiska testowego mogą znacznie ograniczyć zakres testów i wpłynąć negatywnie na jakość aplikacji. Wirtualizacja usług automatycznie tworzy realistyczne, wirtualne modele wybranych systemów, dzięki czemu prace programistyczne i procedury testowe nie muszą być prowadzone na realnych systemach.

Termin „wirtualizacja” jest powszechne używany w innych kontekstach, jak wirtualizacja serwerów czy wirtualizacja pamięci masowych. W tym artykule skupiamy się na wirtualizacji stosowanej w programowaniu i testowaniu nowoczesnych aplikacji SOA.

Narodziny wirtualizacji usług
Praktycy IT pierwsze kontakty z wirtualizacją mieli z reguły w przypadku oprogramowania do wirtualizacji serwerów, oferowanego przez VMware czy Citriksa. W przypadku prac programistycznych korzyści z tego rodzaju wirtualizacji są proste. Powszechnym zjawiskiem w większości firm jest wykorzystanie w niewielkim procencie infrastruktury IT . Zebranie w jedną pulę zasobów sprzętowych i niewykorzystanej pojemności, a następnie przeznaczenie tych zebranych zasobów infrastruktury dla programistów i testerów umożliwia ograniczenie wydatków na infrastrukturę. Ta świetna koncepcja znalazła powszechne zastosowanie. Czy jednak pozwala osiągnąć wszystkie korzyści, których oczekujemy od nowoczesnego podejścia do aplikacji, jak SOA, BPM (Business Process Management) czy środowiska cloud computing?

We współczesnych dużych korporacjach SOA samo w sobie nie jest czymś unikalnym, przeciwnie orientacja na usługi jest podstawą działania procesów IT. Nie należy już pytać, kto korzysta z SOA, lecz kto dostarcza wysokiej jakości usługi szybciej i taniej, czy inaczej, kto potrafi stworzyć najbardziej niezawodne, nowoczesne implementacje z najkrótszym czasem dotarcia na rynek. Prace deweloperskie zorientowane na usługi oraz procesy testowania znacznie się rozwinęły. Obecnie mamy nowe, zaawansowane metodologie programistyczne, metodologie testowe i narzędzia, które spełniają potrzeby rozproszonych, heterogenicznych, wielozadaniowych aplikacji. Podczas gdy SOA mówi o autonomicznych systemach, które są zintegrowane, ale mogą być rozwijane niezależnie, nie sprawdza się w przypadku rozdzielenia terminów zespołów, które muszą mieć dostęp do współdzielonych systemów. Duże projekty integracyjne i wdrożeniowe są usiane zadaniami, które wymagają wykorzystania zasobów nie nadających się do wirtualizacji sprzętowej.

Wirtualizacja usług z pomocą przeciążonym systemom
Kluczową wartością eksponowaną przez głównych dostawców oprogramowania do wirtualizacji (VMware, Citrix, Microsoft) jest lepsze wykorzystanie serwerów obciążonych na poziomie kilkunastu procent, na których mogą działać systemy nie wymagające dedykowanych zasobów. Co jednak należy zrobić z systemami, które nie są dobrymi kandydatami do sprzętowej wirtualizacji, np. systemami mainframe? Co z krytycznymi, przeciążonymi aplikacjami, które są wąskim gardłem dla zespołów, które potrzebują dostępu do oprogramowania podczas całego procesu programistycznego i testowego? W takich przypadkach korzyści z wirtualizacji sprzętowej są niewielkie.

Wirtualizacja serwerów koncentruje się na lepszym wykorzystaniu mocy zasobów IT, podczas gdy zespoły programistów korzystają z systemów, które są przeciążone, jak systemy mainframe czy płatne usługi.

Dobrą strategią w takich przypadkach jest wirtualizacja usług, ponieważ redukuje zależność zespołów od przeciążonych systemów, pozwalając programistom i testerom na równoległą pracę. Obserwując wzorzec wykorzystania zasobów występujący w korporacyjnych środowiskach IT, zespoły IT mogą określić, jaka mieszanka wirtualizacji sprzętowej i wirtualizacji usług pozwolić osiągnąć największe korzyści.

Tworzenie elastycznego środowiska
Podejście do programowania koncentrujące się na usługach pozwala w znacznym stopniu na wielokrotne wykorzystywanie komponentów programowych w celu elastycznego odpowiadania na potrzeby biznesowe. Aby osiągnąć korzyści płynące z nowoczesnych aplikacji, zespoły muszą nie tylko szybciej tworzyć nowe funkcjonalności, ale te funkcjonalności powinny być również testowane w jak najwcześniejszym stadium.

Początkowe próby rozwiązania powyższych problemów z reguły polegały na zaangażowaniu zespołów programistów tworzących fragmenty kodu umożliwiające komunikacją z systemami będącymi w trakcie tworzenia, ale okazało się to zbyt kosztowne i wymagające intensywnego zarządzania, a jednocześnie nie pozwoliło na stworzenie efektywnego środowiska deweloperskiego.

Wirtualizacja usług to możliwość emulowania dynamicznych zachowań i charakterystyk wydajności usług w wirtualnym środowisku. Wirtualizacja usług pozwala na replikację zachowań zasobów IT, co jest bardzo przydatne w przypadku systemów, które charakteryzują się ograniczoną dostępnością lub korzystanie z nich jest bardzo kosztowne. Wirtualne usługi reagują tak samo, jak prawdziwe komponenty. Z tą różnicą, że są dostępne 24 godziny oraz można konfigurować ich dane, funkcjonalności i czas odpowiedzi.

Wirtualizacja usług ewoluowała i dzisiaj obejmuje nie tylko usługi, ale również bazy danych, systemy mainframe i szeroki wachlarz zasobów IT. Automatycznie rejestrując zachowania określonego systemu poprzez analizę jego ruchu sieciowego, wirtualna usługa może symulować niemal wszystkie zasoby wykorzystywane w procesie tworzenia oprogramowania. Wirtualizacja usług osiągnęła punkt, w którym może znacznie poprawić przewidywalność i szybkość realizacji krytycznych projektów, zarówno od strony programistycznej, jak i od strony testów

Metodologia wirtualizacji usług
Proces wirtualizacji usług rozpoczyna się od zidentyfikowania ograniczonych zasobów. Dla określonego projektu należy określić zasoby, które są ograniczone kosztami bądź dostępnością. Czynności zmierzające do zidentyfikowania zasobów nadających się do wirtualizacji usług:

  • Identyfikacja takich zasobów, jak bazy danych, które wymagają współdzielonego dostępu przez wiele zespołów. Idealnym celem są systemy, które wymagają sekwencyjnego rozwoju przez wiele zespołów.
  • Identyfikacja zasobów typu SaaS, które charakteryzują się wysokim kosztem w przeliczeniu na użycie.
  • Identyfikacja systemów, które są niedostępne do testowania lub mają swój własny, niezależny harmonogram rozwoju.
  • Identyfikacja systemów ze skomplikowanym zarządzaniem danymi testowymi, jak synchronizacja danych testowych pomiędzy wieloma rozproszonymi systemami testowymi w celu zrealizowania wymaganego scenariusza testowego.

Następnie należy skonstruować model wybranego systemu. Z reguły realizuje się to poprzez konfigurację oprogramowania do wirtualizacji w celu sprawdzenia działania operacji wejścia/wyjścia wybranego systemu i na podstawie zebranych danych dokładnego modelowania jego zachowań. Informacje konfiguracyjne można zebrać również poprzez analizę metadanych dostarczanych przez rzeczywiste komponenty i usługi. Przykładowo, powszechnym podejściem jest początkowe uruchomienie wirtualnej usługi w celu przetestowania WSDL (Web Services Description Language).

Ostatnim krokiem jest wdrożenie modelu w wirtualnym środowisku. Zmiany konfiguracji w wirtualnym modelu można wprowadzać poprzez modyfikowanie danych lub charakterystyk wydajności. Teraz wirtualny model będzie się zachowywać w taki sam sposób, jak jego rzeczywisty odpowiednik, i będzie można wykorzystywać go do prac deweloperskich i testów.

Zastosowania wirtualizacji usług

Wirtualizacja usług znajduje szereg zastosowań w przypadku, gdy wybrane, zależne od siebie systemy są niedostępne lub mocno obciążone.

Można wyobrazić sobie sytuację, w której system realizujący zamówienia musi być zintegrowany przez dwa zespoły z różnymi zestawami danych testowych i z różnymi wymaganiami. Tradycyjnie firma musiałaby zapewnić sekwencyjny dostęp do systemu, przez co czas rozwoju aplikacji i jej testowania wydłużyłby się mniej więcej dwukrotnie. Wykorzystując wirtualizację usług, oba zespoły mogą korzystać z własnych wirtualnych usług w celu prowadzenia prac programistycznych nad aplikacją i testować ją niezależnie od siebie. Wirtualizacja serwerów umożliwia menedżerowi projektu przeprowadzenie równoległych prac programistycznych i testowych.

Wirtualizacja ma jeszcze inne, blisko związane zastosowanie, które może się przydać w wielu typowych projektach IT. Załóżmy, że plan projektu wymaga uruchomienia usług na serwerze typu mainframe. Usługi te będą następnie wykorzystywane przez nowoczesne aplikacje .NET. Przy tradycyjnym podejściu projekt byłby realizowany w dwóch etapach. W pierwszych pracowano by nad rozwojem usług działających na serwerze mainframe, natomiast druga faza polegałaby na programowaniu aplikacji .NET. Wykorzystując wirtualizację usług, architekt może stworzyć model usług mających zostać stworzonych na serwerze mainframe i stworzyć ich wirtualne odpowiedniki dla zespołu testerów, co pozwoli obu zespołom na równoległą pracę.

Poza tym wirtualizacja usług pozwala ograniczyć koszty związane z dostępem do zewnętrznych usług. Załóżmy, że firma wymaga integracji usług, które nie mogą być wystawione na procedury testowe. Może to być zewnętrzna usługa czy usługa świadczona przez partnera, dostępna za opłatą za korzystanie, co oznacza, że jej testowanie może być bardzo kosztowne. Bez wirtualizacji programiści byliby zmuszeni do ręcznego stworzenia szkieletu usługi i mieć nadzieję, że wszytko będzie dobrze działać w środowisku produkcyjnym. Korzystając z wirtualizacji, można stworzyć wierną replikę i uruchomić ją w wirtualnym środowisku, poprawiając jakość aplikacji, jednocześnie minimalizując lub w ogóle eliminując koszty dostęp do zewnętrznej usługi.

Te różne przykłady zastosowania wirtualizacji usług zrodziły się z konieczności złagodzenia skutków ograniczonej dostępności zasobów. Jeśli optymalizacja zasobów i wąskie gardła zasobów są kluczem do zarządzania projektem, wtedy wirtualizacja usług jest rozwiązaniem. Równoległe programowanie i testowanie może prowadzić do skrócenia czasu prac nad aplikacją.

Podsumowanie
Dzięki obejściu barier istniejących wokół mocno wykorzystywanych systemów, wirtualizacja usług umożliwia firmie stworzenie warstwy usług, które są bardziej efektywne kosztowo, elastyczne, a programiści są w stanie szybciej dostarczać aplikacje gotowe do wprowadzenia na rynek. Połączenie wirtualizacji serwerów z wirtualizacją usług pozwala rozwiązać problemy zarówno z mało obciążonymi systemami, jak również systemami intensywnie obciążonymi.

BRAK KOMENTARZY

ZOSTAW ODPOWIEDŹ