“Chmura” to bardzo szerokie pojęcie. Dość często się powtarza w kontekście rozwiązan IT. Tak często w nazwie aplikacji widzimy słowo „cloud”, że można by nawet nabrać wrażenia, że to takie hasło reklamowe, które ma zwabić klientów nowoczesnością. Jeśli coś ma w nazwie słowo “cloud” to pewnie jest bardziej niezawodne i dostępne z każdego zakątka świata. Prawda jest taka, że aplikacje działające w innym środowisku, które nie jest chmurą, mogą działać równie stabilnie i być równie dostępne. Jako użytkowników w zasadzie nie powinno nas kompletnie obchodzić, czy aplikacja działa w chmurze czy jakiejś innej infrastrukturze. Powinno nas tylko interesować, czy jest dostępna i spełnia nasze potrzeby. Fakt, czy działa w jakiejś chmurze powinien być dla nas wręcz nieistotny. To raczej inżynierowie firm IT powinni się tym zajmować, bowiem to oni są odpowiedzialni za działanie usług. Czemu zatem tak często się o tej chmurze mówi? Ponieważ potęgą chmury są niezliczone możliwości, które prawidłowo wykorzystane faktycznie mogą znacznie poprawić stabilność i wiele innych aspektów działania aplikacji. Możliwości te są na dodatek dostępne na kilka kliknięć, co jest bardzo dogodne. Ponadto chmura zapewnia duże możliwości optymalizacji kosztów, co jest szczególnie atrakcyjne dla firm płacących bardzo duże pieniądze za utrzymanie infrastruktury serwerowej. I w zasadzie to właśnie firmy powinny się bardziej interesować tym czym jest chmura i jak mogą ją wykorzystać, aby maksymalizować własne korzyści. Użytkownicy powinni tylko używać ich produktów. Wyjaśnijmy sobie czym tak naprawdę jest chmura i co może nam dać.

Aby zrozumieć czym jest chmura, cofnijmy się w czasie o około 20 lat. Wcielmy się w rolę przedsiębiorcy rozwijającego jakieś oprogramowanie. Załóżmy, że to oprogramowanie działa w standardowym modelu klient-serwer, czyli w takim, w którym musi istnieć jakiś serwer z uruchomioną aplikacją dostępny w Internecie. Z serwera zdalnie korzysta klient, czyli program obsługiwany przez użytkownika. Użytkownika nie interesuje, gdzie się fizycznie znajduje serwer, jedynie wie, że musi mieć dostęp do Internetu, żeby z aplikacji skorzystać i używa do tego właśnie zainstalowanego na swoim komputerze klienta. W takich okolicznościach nasz przedsiębiorca wie, że musi kupić kilka profesjonalnych maszyn, czyli właśnie serwerów, zamontować je gdzieś w odpowiednio przygotowanym do tego miejscu, zainstalować na nich system operacyjny, swoją aplikację serwerową oraz jakieś dodatkowe oprogramowanie do monitorowania tego wszystkiego. Większość z tych czynności przedsiębiorca może wykonać sam albo z pomocą swoich pracowników. Jednakże pojawiają się pewne problemy. Serwery z natury bardzo szybko się grzeją, potrzebują dużo prądu i zazwyczaj są bardzo głośne. Ze względu na to, że w biurze czasem dochodzi do odłączeń prądu w nocy a serwery muszą działać praktycznie bez przerwy, nasz bohater słusznie zauważa, że biuro nie jest najlepszym miejscem do przechowywania tych biznesowo krytycznych maszyn. Postanawia zatem wykupić kolokację swoich serwerów w pobliskim centrum danych. Sprowadza się to w zasadzie do tego, że pobliskie centrum danych udostępnia miejsce, prąd, dostęp do Internetu oraz chłodzenie w obrębie swojego budynku. Budynek jest oczywiście jeszcze dodatkowo odpowiednio chroniony i nadzorowany przez ochronę. Na koniec każdego miesiąca właściciel centrum danych przedstawia rachunek przedsiębiorcy. Kiedy tylko nasz przedsiębiorca zamontuje serwery w centrum danych zdalnie zarządza nimi i w razie potrzeby przychodzi na miejsce, jeśli jest taka potrzeba. Aplikacje serwerowe naszego przedsiębiorcy działają zatem na serwerach umieszczonych w centrum danych.

Opisany sposób utrzymania infrastruktury jest stosowany do dzisiaj. Każdy może zakupić serwer i umieścić go w wybranym centrum danych, po czym korzystać z niego jak tylko potrzebuje. Największą zaletą takiego podejścia jest pełna kontrola nad własnymi zasobami. Możemy kupić prawie dowolny serwer, zainstalować na nim dosłownie co chcemy, a jeśli jest serwerów kilka to możemy je łączyć praktycznie dowolną siecią. Aczkolwiek w tym aspekcie potrzebne nam będą jakieś uzgodnienia z pracownikami technicznymi centrum danych. Innymi słowy mamy pełną swobodę z pominięciem pewnych szczegółów wymienionych w regulaminie centrum danych albo możliwości technicznych. Taki typ infrastruktury, który jest praktycznie w całości zarządzany przez nas nazywamy “On-site” albo “on-premise”.

Pełna kontrola nad infrastrukturą “on-site” jest niewątpliwą zaletą, ale zwróćmy uwagę na wady takiego rozwiązania. Przede wszystkim czas aktywacji serwera może wynieść nawet kilkadziesiąt dni w zależności od wielkości zamówienia czy liczby dostępnych specjalistów. Infrastruktura tego typu wymaga sporo czasu i nieraz faktycznej wizyty na miejscu. Maszyny takie musimy również sami konfigurować od początku do końca, czyli od zamontowania na swoim miejscu, przez instalowanie systemu operacyjnego, wzmacnianie zabezpieczeń i na instalacji oraz zarządzaniu aplikacjami kończąc. Ogólnie rzecz ujmując im więcej mamy możliwości, tym więcej czasu spędzamy na odpowiednim doborze ustawień.

Możliwości konfiguracji są ogromne, ale tak naprawdę nikt nie korzysta z nich wszystkich. Jest ich po prostu zbyt wiele. Nie powinno zatem dziwić, że wielu przedsiębiorców z łatwością byłaby gotowa oddać część z tych ogromnych możliwości konfiguracji, które i tak nie zawsze dają wymierne korzyści, w zamian za szybkość rozwoju infrastruktury na swoje potrzeby. Chodzi przecież o szybkie zaspokojenie potrzeb swoich własnych klientów. Optymalizację przyspieszającą pracę serwerów o kilka procent, ale wymagającą długich godzin pracy, można sobie darować.

W lipcu 2002 roku korporacja Amazon, stworzyła coś co dzisiaj byśmy nazwali chmurą w modelu IaaS czyli “Infrastructure as a Service”. Jest to taki typ chmury, który pozwala w niemalże na kilka kliknięć stworzyć wirtualną infrastrukturę. Wirtualna baza danych, serwer plików, VPN, serwer aplikacji, autentykacji, sieć, która łączy te wszystkie usługi, monitoring, co tylko chcemy, możemy stworzyć w ciągu minut i łączyć ze sobą. Wszystko to utworzymy w postaci wirtualnej a o fizyczną infrastrukturę zadba dostawca chmury. Możliwości konfiguracji tych wszystkich usług będą faktycznie mniejsze niż gdybyśmy sami zarządzali tymi maszynami, ale większości użytkowników wystarczą w zupełności. A co najważniejsze, szybkość rozbudowywania infrastruktury będzie nieporównywalnie większa. To jednak nie wszystko. Jeśli optymalnie wykorzystamy zasoby i potencjał chmury, znacząco zredukujemy koszty. Załóżmy, że dzisiaj potrzebuję trzech serwerów, żeby moja firma działała prawidłowo. Moi pracownicy wykorzystują te serwery w 80%. Mam świadomość, że za tydzień przyjdzie kolejnych kilka osób zatrudnionych na trzymiesięczny kontrakt. W warunkach “on-site” musiałbym kupić im specjalnie dodatkowe serwery, które działałyby tylko krótki czas. Po wygaśnięciu kontraktu musiałbym serwery sprzedać. Chmura daje mi taką możliwość, że jeśli potrzebuję dodatkowych zasobów przez jakiś czas, po prostu je wykupuję w ciągu sekund, a kiedy nie są mi już potrzebne, oddaję je i już za nie nie płacę. Zapłacę tylko za liczbę godzin, w trakcie których korzystałem z nich. Cennik zazwyczaj jest godzinowy. Ale to nadal nie wszystko. Powiedzmy, że moja firma urosła i postanowiłem otworzyć biuro w innym kraju. Jeśli odpowiednio zarządzam swoimi zasobami chmury, jestem w stanie stworzyć kopię swojej infrastruktury za granicą i oddać ją do użytku pracownikom w innym państwie. To tylko kilka z dziesiątek możliwych scenariuszy zastosowania chmury typu IaaS w praktyce. Potęgą chmury jest automatyzacja, wirtualizacja, bogactwo dostępnych usług oraz możliwości łączenia ich ze sobą. Najbardziej popularne chmury typu “Infrastrucutre as a Service” to Amazon Web Services, Microsoft Azure oraz Google Cloud Platform. Są to tak zwane chmury publiczne, czyli dostępne dla każdego. Ale czy można mieć swoją własną chmurę? Jak najbardziej można. Projekt OpenStack rozwijany już od ponad 10 lat skupia się na stworzeniu oprogramowania umożliwiającego uruchomienie własnej chmury we własnym centrum danych. OpenStack jest również wykorzystywany komercyjnie, na przykład przez firmę OVH.

No dobrze, możemy automatyzować proces tworzenia, modyfikowania i nawet kasowania wirtualnych infrastruktur dzięki “Infrastructure as a Service”. Ale skoro już poświęciliśmy pewne możliwości konfiguracji w celu uzyskania większej szybkości rozwoju naszej firmy, czy możemy pójść jeszcze krok dalej? Czy można stworzyć pewne ramy dla aplikacji, którą rozwija nasza firma i po prostu wysłać taką aplikację do jakiejś platformy, nie przejmując się nawet i o wirtualne serwery? Otóż możemy. PaaS czyli “Platform as a Service” to taki typ przetwarzania w chmurze, który przenosi już nie tylko zarządzanie fizycznymi maszynami w ręce pracowników technicznych dostawcy chmury, ale również i zarządzanie częścią wirtualnych zasobów. Załóżmy, że rozwijam jakąś aplikację webową. Jeśli zdecyduję się na wykorzystanie jakiegoś modelu PaaS, moi programiści jedynie będą musieli odpowiednio przygotować kod aplikacji, żeby pasował do ram narzuconych przez platformę. Dalsze umieszczenie aplikacji na platformie i ewentualne jej migrowanie między podobnymi platformami stanie się banalnie proste. Co więcej, jeśli prawidłowo przygotuję swoją aplikację, platforma sama w dość inteligentny sposób będzie nią zarządzać. Na przykład, jeśli w aplikacji dojdzie do jakiejś awarii, platforma sama podejmie pewne działania zaradcze, jak choćby restart aplikacji. Jeśli platforma odnotuje wzmożony ruch w aplikacji na przykład związany z nagłym wzrostem zainteresowania aplikacją, w krótkim czasie automatycznie zostaną uruchomione kolejne zasoby, aby zapewnić płynność moim użytkownikom. Taka funkcjonalność jest szczególnie ważna w takie dni jak Black Friday, kiedy to liczba użytkowników korzystających z jakiegoś sklepu internetowego potrafi wzrosnąć kilkakrotnie w ciągu godzin. PaaS jest w stanie automatycznie dopasować zasoby do wymaganego zapotrzebowania, żeby w gorących okresach nikt nie poczuł, że strona wolno działa. Zasoby zostaną automatycznie zwolnione, kiedy przestaną być potrzebne. PaaS jest w stanie zrobić jednak znacznie więcej. Poza automatycznym skalowaniem zasobów, stwarza też duże możliwości wdrażania nowych zmian, kiedy tylko zostaną wprowadzone przez programistów. W warunkach “on-site” zmiana wersji oprogramowania potrafi być dość kłopotliwa. W warunkach PaaS proces można doprowadzić do całkowitego zautomatyzowania. Innymi słowy klienci mogą nawet nie zauważyć przerwy w dostawie usługi, kiedy to wersja oprogramowania została zmieniona w locie. Użytkownicy dostaną nowe funkcjonalności bez konieczności odcinania ich od konsumowania treści aplikacji, z której korzystają. Najczęściej pojawiającą się platformą tego typu jest technologia Kubernetes, która dziś robi ogromną karierę.

Ostatnim modelem przetwarzania w chmurze jest SaaS czyli “Software as a Service”. Jest to ten model, który właśnie najczęściej wszyscy otrzymujemy do użytku. Poprzednie modele leżą w zakresie zainteresowan programistów czy innych inżynierów IT, natomiast to ten właśnie model większości ludzi się kojarzy z chmurą. “Software as a service” to model, w którym dostawca aplikacji webowej, udostępnia użytkownikom po prostu funkcjonalności swojego produktu. Jaka jest infrastruktura fizyczna, sieci, serwery, systemy operacyjne, maszyny wirtualne, zarządzanie zasobami czy logika aplikacji, to wszystko pozostaje w gestii kogoś innego. Jeśli rozwijamy produkt w postaci SaaS, być może musimy znać te wszystkie aspekty jego działania albo przynajmniej ich część. Natomiast jeśli jesteśmy użytkownikami jakiejś aplikacji w modelu “Software as a Service”, interesuje nas jedynie jej używanie. Zatem jeśli następnym razem ktoś z panstwa ujrzy jakąś aplikację ze słowem “cloud” w nazwie i po wykupieniu dostępu otrzyma natychmiast dostęp do jej funkcjonalności, nie zastanawiając się, gdzie ona faktycznie działa, najprawdopodobniej jest to właśnie aplikacja w modelu SaaS. Kiedy zalogujemy się do takiej aplikacji, zdalna infrastruktura osadzona na fizycznych maszynach gdzieś setki kilometrów stąd dopasuje się automatycznie do naszych potrzeb. Być może aplikacja zażąda nowych zasobów, żeby zapewnić nam płynność. Być może dokładnie w trakcie naszej pracy wyjdzie nowa wersja aplikacji i zostanie na tych zdalnych zasobach zainstalowana tak, że nawet tego nie zauważymy. Być może w trakcie naszej pracy dojdzie do awarii części zasobów, a my nadal tego nie odczujemy, ponieważ zadania, które obsługiwały nasze zasoby zostały szybko przejęte przez inne maszyny. Wszystko to będzie dla nas nieodczuwalne, ponieważ tak właśnie powinna działać chmura, odsuwać od nas pewne problemy. Czy mogę sam stworzyć aplikację w modelu SaaS i udostępnić ją moim użytkownikom, tak, żeby zawsze ich doświadczenie było płynne i odporne na awarie? Mogę i do tego celu powinienem właśnie wykorzystać zasoby w chmurze, ponieważ to właśnie chmura daje mi tak szerokie możliwości.

Jak widać powiedzenie, że coś jest w chmurze może oznaczać różne rzeczy. Pewne jest jednak, że gdzieś poza naszą wiedzą zachodzą jakieś zautomatyzowane procesy mające na celu zapewnienie płynności i niezawodności użytkownikom. Procesy te mogą być związane z modyfikowaniem infrastruktury IT, na której działa aplikacja. To co widzimy w przeglądarce internetowej używając danej aplikacji to nieraz wierzchołek góry lodowej. Pod powierzchnią jest więcej, znacznie więcej technologii niż się wydaje. Dawniej infrastruktury były znacznie bardziej statyczne. Dzisiaj, zmieniają się, adaptują do potrzeb klientów i optymalizują koszty. Stały się niemal równie dynamiczne jak oprogramowanie. Dla tego tak wiele firm migruje swoje usługi do chmury, ponieważ to firmy właśnie powinny dostrzegać jej atrakcyjność. I co prawda chmura nie zawsze musi być idealnym rozwiązaniem dla każdego, doświadczenie mi podpowiada, że zdecydowana większość funkcjonalności może zostać przeniesiona. Szczególnie jeśli nie potrzebujemy bardzo specyficznych urządzeń. Nie musimy rozwijać własnego oprogramowania w ramach naszej działalności. Wystarczy, że nasza firma wykonuje jakieś czynności, które da się zautomatyzować. Wtedy również chmura może bardzo pomóc. I nie trzeba również być firmą z branży IT, aby to zrobić. Wystarczy, że jakaś czynność jaką wykonujemy powtarzalnie jest możliwa do zaprogramowania, wtedy warto takie zadanie oddać do chmury, żeby samemu zająć się czymś bardziej kreatywny. Możliwości leżą na stole i jest ich bardzo wiele. Trzeba je tylko przejrzeć i wyłonić te, które są dla nas najlepsze. A kreatywność ludzka nie zna granic. Zatem zachęcam do zapoznania się z niemalże nieograniczonymi możliwościami i wykorzystania ich do rozwiązania swoich problemów. Kto wie, może właśnie ktoś z państwa stworzy jakieś własne niepowtarzalne i innowacyjne rozwiązanie chmurowe, z którego potem wszyscy będziemy chcieli skorzystać?