Jak nowoczesny marketplace może skorzystać na rozwiązaniach AWS Cloud?
Stając przed zadaniem stworzenia rozwiązania, które pomoże przejąć kontrolę nad transportem drogowym, wiedzieliśmy, że najpierw musimy przenieść je w chmury. Dlaczego akurat podejście cloud-native było najlepsze dla projektu budowy marketplace’a z planem międzynarodowej ekspansji? Przekonajmy się, jakie przewagi dał nam AWS Cloud i z jakimi trudnościami musieliśmy się zmierzyć, żeby ostatecznie Prilo mógł spokojnie wyruszyć w bezpieczną drogę.
Prilo. Czym cechuje się nowoczesny marketplace?
Potrzebujesz przewieźć samochód z punktu A do punktu B? A może dysponujesz zapleczem umożliwiającym transport aut i chcesz wystawić swoją ofertę? Prilo to przestrzeń dla kierowców, zleceniodawców i klientów, w której mogą swobodnie ustalić wszelkie niezbędne szczegóły zlecenia oraz zawrzeć umowę. Platforma usprawnia proces przewozu samochodów, m.in. wspierając wymianę dokumentów, umożliwiając szybką komunikację między użytkownikami oraz pozwalając na bieżąco śledzić transport dzięki aplikacji mobilnej dla kierowców.
Ta nowoczesna giełda transportu aut powstała na zlecenie naszego klienta, polskiej spółki Adampol. Projekt tworzyliśmy od zera, dzięki czemu mieliśmy okazję rozpocząć prace już na etapie odkrywania produktu i formułowania potrzeb. W efekcie stanęliśmy przed wyzwaniem stworzenia swoistego marketplace’a, który umożliwiałby m.in.:
- Zamieszczanie zleceń,
- Składanie ofert,
- Zawieranie umów.
A w ramach realizacji zleceń:
- Ustalanie szczegółów transportu,
- Wymianę dokumentów,
- Komunikację między stronami,
- Śledzenie ciężarówek.
Co warto zaznaczyć, Prilo nigdy nie miał być typowo backofficowym rozwiązaniem. Dzięki zaangażowaniu w projekt zespołu Kreatik platforma dopracowana została pod względem UX/UI, a także ubrana w atrakcyjną grafikę. To marketplace stworzony z myślą o wygodzie i potrzebach użytkowników, co perspektywy developerskiej, przełożyło się na wybór narzędzi potrzebnych do realizacji projektu.
Dlaczego akurat chmura?
W pierwszej fazie projektu, klienta na warsztat wziął zespół Kreatik. Wspólnie przeszli fazę discovery, m.in. definiując grupę docelową i odkrywając jej realne potrzeby. Dzięki temu wiedzieliśmy, jakie funkcjonalności musi zawierać w sobie platforma i w jakim kierunku będzie się rozwijać. Zapewniło nam komfort pracy i pozwoliło na w pełni świadomy wybór narzędzi. Nie bez znaczenia pozostawało również to, że nasz klient — Adampol — pozostaje częścią międzynarodowej spółki Hyundai Glovis. Hyundai pracuje w oparciu o ściśle określone standardy i tym samym w pewnym stopniu narzuca rozwiązania. Ostatecznie stanęliśmy przed wyborem: oprogramowanie on-premise z elementami chmury czy całkowita infrastruktura cloud?
Na szczęście już na tamtym etapie dobrze znaliśmy założenia portalu i wiedzieliśmy, że w planach jest ekspansja na rynki zagraniczne. Biorąc pod uwagę możliwości chmury (szczególnie że standardy Hyundai kierowały nas bezpośrednio w stronę rozwiązań AWS Cloud), zdawaliśmy sobie sprawę, że pod tym względem będzie lepszym wyborem niż wariant on-premise. Rozległa infrastruktura AWS sprzyja międzynarodowym projektom – chmura dostępna jest z każdego miejsca na świecie, o ile tylko dociera tam Internet. Dodatkowo do połączenia nie potrzeba żadnego skomplikowanego sprzętu, bo to pozostaje po stronie operatora. Kierowca w trasie łatwo połączy się z aplikacją za pomocą telefonu, bez opóźnień i problemów z przesyłem danych.
Jedyne, czego na tamten moment nie mogliśmy przewidzieć, to wielkości ruchu, jaki w przyszłości wygeneruje Prilo. A ponieważ nie chcieliśmy, żeby klient płacił wyłącznie za gotowość do startu, odpowiedź właściwie nasuwała się sama. Musieliśmy już tylko ustalić, jak bardzo chcemy się w tę chmurę zagłębić.
Pierwsze kroki z AWS Cloud
Jak powszechnie wiadomo, infrastruktura AWS Cloud zapewnia ogrom usług. Łatwo się tym zachłysnąć, dlatego naszym priorytetem był wybór rozwiązań najlepszych pod kątem projektu. Dzięki wcześniejszym doświadczeniom z innych projektów byliśmy pewni, że chcemy korzystać z narzędzi developerskich oraz CI/CD w chmurze. Ostatecznie dość szybko podjęliśmy decyzję, że wykorzystamy AWS wszędzie tam, gdzie uprości to prace nad projektem. W efekcie większość zadań związanych z zarządzaniem, skalowaniem i konfiguracją przenieśliśmy właśnie do chmury. Na szczęście ze względu na standardy pracy z Hyundai, nie musieliśmy obawiać się vendor locka i mogliśmy śmiało korzystać z możliwości AWS Cloud.
Prilo to ogólnodostępny portal, dlatego od strony architektonicznej ważny był wzorzec implementacji CQRS. Wiedzieliśmy, że odczytów będzie zdecydowanie więcej niż zapisów, ponieważ internauci będą odwiedzać platformę i przeklikiwać się przez jej ofertę. Dodatkowym wyzwaniem był fakt, że portal miał zaplanowane trzy interfejsy użytkownika. Co innego chcieliśmy przedstawić użytkownikom końcowym, co innego administracyjnym, a jeszcze zupełnie co innego kierowcom. I o ile dwa pierwsze interfejsy zaprojektowaliśmy jako SPA w Angularze, to już trzeci wymagał nie tyle aplikacji Single-Page, co pełnowymiarowej aplikacji mobilnej napisanej we Flutterze (i dostępnej w Google Play).
Chmura w poszukiwaniu oszczędności
Realizując projekt, cały czas mieliśmy w głowie myśl, że użytkowanie portalu musi być wygodne a utrzymanie opłacalne. Szukaliśmy narzędzi, które w najlepszy sposób oddadzą logikę biznesową i ostatecznie zdecydowaliśmy się na połączenie AWS Elastic Container + Fargate oraz AWS Lambda. Lambdy to bardzo tanie, elastyczne i łatwe do integracji rozwiązanie, ale charakteryzuje się tzw. coldstartem. Wirtualna maszyna potrzebuje krótkiej chwili, aby uruchomić usługę, dlatego nie każda funkcjonalność aplikacji nadaje się do takiej obsługi. Uznaliśmy jednak, że w przypadku pobocznych funkcji (choćby takich jak automatyczna wysyłka e-maila), parosekundowe opóźnienie nie zrobi użytkownikom żadnej różnicy, a wygeneruje realne oszczędności dla całego projektu.
Z drugiej strony AWS Elastic Container + Fargate także jest elastycznym rozwiązaniem, kierującym się w stronę podejścia serverless, co znacznie ułatwiło i przyspieszyło naszą pracę. Między innymi również dlatego, że zawiera w sobie gotowe narzędzia (np. healtheck, autoscalling, blue-green deployment). Być może obsługa wszystkiego ręcznie wyszłaby pozornie taniej, ale czas, który musielibyśmy na to poświęcić, szybko przekroczyłby budżet, jaki poszedł na AWS Cloud.
Chmura a bezpieczeństwo
Prilo jest typowym przykładem architektury mikrousługowej. Dla bezpieczeństwa naszego klienta całą domenę podzieliliśmy na subdomeny, a w konsekwencji na serwisy, żeby najważniejsze operacje zamykały się w jednym miejscu, a komunikacja między serwisami była ograniczona do minimum. Serwisy reagują między sobą asynchronicznie, a jeżeli komunikacja jest już naprawdę niezbędna, odbywa się to synchronicznie przez REST API.
W komunikacji asynchronicznej po raz kolejny pomógł nam AWS, dzięki połączeniu narzędzi SNS i SQS. Pozytywnie wpłynęło to na wydajność – nawet przy bardzo dużym obciążeniu, marketplace działa sprawnie i klient nie musi liczyć się z przestojami.
Czy chmura i marketplace do siebie pasują?
Z perspektywy wykonanej pracy i pierwszych efektów możemy śmiało powiedzieć, że architektura mikroserwisowa, wdrożona w podejściu cloud-native, bardzo dobrze wpisuje się w potrzeby takiego rozwiązania jak publicznie dostępny marketplace. Chmura AWS dostarcza dużo gotowych komponentów, znacznie skracając czas wytworzenia rozwiązania oraz poprawiając jego wydajność i bezpieczeństwo.