Cloud to bardzo popularny termin, który przewija się w dzisiejszym Internecie, a w tym dot. branży IT wyjątkowo często. Mimo to natknąć się można na częsty brak zrozumienia tego, czym jest cloud i jak on powstaje. Dlatego w tej serii artykułów wytłumaczę co i jak, na bazie własnego doświadczenia.
A na początku nie było nic…
Jak zawsze, wszystko ma swój początek. W moim przypadku nie był to początek specjalnie niezwykły czy interesujący. Ot, zwyczajna potrzeba samorozwoju połączona z potrzebą prywatnego „pojemnika” na bibliotekę mediów i podręczne pliki tekstowe czy multimedialne pod użytek szkolny. Oczywiście, można by zapytać — czemu więc nie Google Drive lub OneDrive. Odpowiedź jest prosta — bo tak, bo mogę. Chciałem zbudować własne rozwiązanie tego typu i to zrobiłem. Nie uzasadniałem tego jakoś sepcjalnie. Wystarczyło mi przekonanie, że w ten sposób się uczę oraz to, że jest to dla mnie i będę tego używał. Tak powstał zalążek projektu, który dziś nosi nazwę Pika Cloud.
Pierwsze kroki są zawsze najtrudniejsze
W tym wypadku oczywiście inaczej nie było. Początki sięgają roku 2017, gdy zaczynałem uczyć się Web developmentu, aby zostać full stackiem. Ze względu na to, że zaczynałem od Javy, a potem przeniosłem się na C# uznałem, że zacznę naukę w ASP.NET Core. Wtedy była to wersja 1.1… czyli już jakiś czas temu.
Już wtedy wiedziałem, że będzie to system webowy, który pozwoli mi na dostęp do plików na moim serwerze. Od samego początku system miał zintegrowane logowanie i listowanie plików ze wskazanego folderu. Oryginalny, utrzymywany aż do wersji 2.x, system kategoryzowania plików był zgodny z podstawowymi założeniami systemu plików. Nie było to oczywiste jednak, że pewnego dnia będzie to coś, co nazwę systemem typu cloud.
Cloud — co to i jak to definiujemy?
W poprzednim paragrafie powiedziałem, że nie podejrzewałem, że pewnego dnia mój system będzie cloudem. Warto jednak sobie wytłumaczyć co ten termin oznacza. Definicja cloudu już wtedy tj. ok. 2015 roku była rozmyta. Zależnie od tego, kogo zapytałeś o opinię, inną odpowiedź mogłeś uzyskać. Zgodnie z Wikipedią system IT typu cloud to nadtyp tzw. intranetu. Idąc za definicją intranetu, system tego typu musi być zamknięty, czyli należy do tzw. Deep Webu, ale powinien być dostępny z zewnątrz. Dodatkowo takie systemy muszą świadczyć usługi w zakresie: dostępu do danych, wspomagania modelowania procesów informacyjnych organizacji, prezentowania informacji publicznych lub chronionych, CRM, CMS itd.
Cloud w tym wszystkim ma bardziej ogólną rolę, jako nadtyp intranetu. Jest systemem, który pozwala na dostęp z zewnątrz, ale zwykle posiada część należącą do Clear Webu i część należącą do Deep Webu. Obie te części mają wpływ na architekturę systemu. Równocześnie, ma to też wpływ na UX czy UI systemu. Wszystkie te składowe — architektura, podział na części, UX i UI — to wynik przeznaczenia danego systemu.
System cloud to jeden z najbardziej generycznych (ogólnych) systemów, jakie istnieją. W zależności od różnych czynników będą one wyglądać i działać inaczej. Przykładowo, systemy cloud jak Azure to są systemy ogólnego przeznaczenia. Oznacza to, że ich część Clear Web nie należy do ich wnętrza, bo zazwyczaj są to:
- podstrony promujące markę i usługi,
- dokumentacja,
- systemy zaprojektowane przez klientów Azure, GCP, AWS itd.
Czy to wszystko w ramach takich systemów? Oczywiście, że nie. Wszystkie takie cloudy posiadają swój wewnętrzny podsystem lub zespół podsystemów. Pełnią one funkcje intranetów, które pozwalają administrować takimi kolosalnymi systemami. Z drugiej strony są systemy takie jak właśnie PikaCloud. Są to systemy wyspecjalizowane. Rolą takich systemów jest realizowanie jednej, konkretnej usługi informatycznej. Cechą podstawową i wspólną dla nich jest to, że również posiadają części widoczne z Clear Web i Deep Web.
Własny cloud — zbyt ambitnie?
Z całego tekstu do tej pory, może więc wynikać, że cloud to bardzo ambitny projekt. Jednak nie jest tak, szczególnie jeśli weźmiemy pod uwagę drugi typ, czyli systemy wyspecjalizowane. Wynika to z tego, że takie systemy nie różnią się de facto od zwyczajnych aplikacji Web. Różnice mogą polegać na tym, jak rozwiążesz pewne kwestie architektoniczne. Żadne rozwiązanie nie będzie jednak definitywnie klasyfikować systemu jako cloudu per se.
Idąc tym tokiem myślenia, każda aplikacja, która coś realizuje, może zostać nazwana cloudem, o ile tylko spełnia wymagania wskazane wcześniej. Oczywiście, są różne podejścia do realizacji dokładnie tych samych funkcjonalności. Jedne będą bardziej dopasowane do zastosowań cloud, a drugie mniej.
Przykładowo wdrażanie cloudu, szczególnie takiego, który ma charakter systemu rozproszonego (ang. distributed system), będzie stanowić wyzwanie. Można to robić ręcznie lub automatycznie. Nie wpływa to na charakter dostępności części systemu czy jego role. Jednak, systemy IT, nawet te małe, łatwiej się wdraża automatycznie. Są do tego specjalnie narzędzia jak Ansible, Docker, Kubernetes czy Podman, Terraform, Jenkins czy TeamCity itd. Wymienione narzędzia stanowią dziś rdzeń narzędzi z zakresu infrastruktury cloud.
To jak zacząć?
Oczywiście, od tego, co zawsze — określ swoje potrzeby, zdefiniuj je jako potrzeby biznesowe, a następnie stwórz szkic projektu. Formą szkicu może być notatka, schematy UML, albo prosty wykres zależności na kartce, może być to cokolwiek, co pomoże Ci projektować. Następnym krokiem będzie dobranie stosu technologicznego tak, by było Ci, jak najprościej zrealizować stworzone założenia. Nigdy nie kieruj się tym, że dana technologia jest popularna czy nie. Kieruj się tym, co w Twoim wypadku będzie opłacalne. Wybierz narzędzia tak, abyś mógł powiedzieć, że są wygodne i łatwe w użyciu.
Przykładowo, chcesz zbudować na sam start prostą platformę CRM, która nie ma zbyt wiele dynamicznych widoków. Dobrym wyborem będzie wtedy nawet najprostszy SSR na bazie Symfony. Jeśli jednak w trakcie projektowania uznasz, że system wymaga np.:
- dużo dynamicznych danych ładowanych w trakcie interakcji użytkownika z front-endem;
- częstych zmian danych w tle, aktualizacji;
- często pobiera te same dane, które są powtarzalne;
- potrzeba dać dostęp do niektórych widoków offline
- itd…
To dobrym wyborem może być inna technologia jak np. ASP.NET czy Spring Boot z Vue albo Reactem, a do tego Redis i RabbitMQ. Największym problemem może być z początku dobranie odpowiednich narzędzi do tego czego potrzebujesz. Dlatego też, na początek polecam zacząć od implementacji wprost własnego pomysłu, tak by uzyskać PoC, a następnie rozwijać i przebudowywać cały system.
I co dalej?
Po wykonaniu kroków powyżej wypłyniesz na ocean możliwości, więc musisz ustalić jeden kurs, który pozwoli Ci sprawnie rozwijać taki projekt. Pamiętaj, że najważniejsze jest zarządzanie Twoją własną chęcią do rozwoju takiego projektu. To nie jest projekt, który zbudujesz w jeden wieczór, ani nawet w tydzień. PikaCloud, a właściwie jego „core” rozwijam już od ponad 6 lat i nadal są kwestie do poprawy, ulepszenia lub całkowitej zmiany. W przeciągu 6 lat ten system miał dwie duże rewizje, w trakcie których „przeorałem” większość kodu i zmieniłem diamtralnie pewne koncepcje np. podejście do przechowywania plików. Podobnie zapewne będzie u Ciebie o ile zdecydujesz się coś takiego tworzyć jako swój side-project. Jednak tu Cię pocieszę, bo tak samo jak ewt. Twój przyszły projekt, ten kurs również będzie rozwijany i poprawiany, aby wspomóc Cię w szukaniu kierunku i inspiracji do rozwoju swojego mini-cloudu.
Z tego miejsca, chciałem Ci podziękować za przeczytanie całości tekstu jak również zaprosić na następny wpis z tej serii na blogu Zaprogramuj Życie, w którym będę rozwijać kwestię projektowania oraz doboru stosu technologicznego. Do następnego razu!