SoDA

Jak za pomocą Azure obniżyć koszty utrzymania aplikacji?

Przedstawimy kilka sposobów na to, jak obniżyć koszty utrzymania aplikacji. Niektóre pomysły mogą Cię zaskoczyć! Podamy również potencjalne błędy, które mogą kosztować Cię setki złotych. Czy wiesz jak zaoszczędzić na utrzymaniu aplikacji?

1. Kim jesteśmy

W iteo już od ponad 10 lat tworzymy oprogramowanie dostosowane do indywidualnych potrzeb i wymagań naszych konsumentów. Zawsze kładziemy nacisk na jakość, nowoczesne technologie oraz zadowolenie klientów jak również użytkowników aplikacji. Co za tym idzie musimy skupiać się nie tylko na wizualnych aspektach naszych produktów, ale także na szybkości działania, wysokiej wydajności, globalnej dostępności oraz odporności na awarie. Naszym celem jest również możliwie jak największa automatyzacja procesów wdrożeniowych oraz zminimalizowanie kosztów infrastruktury.

Niedawno mieliśmy okazję wykorzystać nasze umiejętności podczas tworzenia aplikacji dla jednego z naszych partnerów biznesowych. Chcielibyśmy podzielić się z Wami naszymi doświadczeniami związanymi z procesem wytwarzania i wdrożenia tej aplikacji.

iteo

2. Co robiliśmy

Stanęliśmy przed zadaniem stworzenia aplikacji, której celem jest pomoc osobom chorym na Zespół Jelita Drażliwego, znanego także pod nazwą IBS. Ma ona również szereg funkcjonalności wspierających utrzymanie zdrowego balansu między odżywianiem a aktywnością fizyczną.

Oprócz typowych przeciwności, takich jak złożona logika biznesowa, czekało na nas wiele innych wyzwań. Przede wszystkim, klient oczekiwał od aplikacji wysokiej wydajności, niezawodności oraz płynności działania. Wygoda użytkownika jest dla nas bardzo ważna, dlatego te założenia były dla nas wręcz naturalne. Innym istotnym aspektem była możliwość łatwego i szybkiego skalowania wydajności. Klient planował docierać do coraz większego grona odbiorców — najpierw na rodzimym rynku, a w przyszłości pomagać ludziom na całym świecie. Cały projekt był współfinansowany ze środków Unii Europejskiej, dlatego bardzo skrupulatnie podeszliśmy do kwestii ceny utrzymania naszego rozwiązania. Konieczne było nie tylko dość precyzyjne określenie potencjalnych kosztów, ale także wybór usług i rozwiązań, na które pozwalał budżet projektu.

iteo

3. Jak sobie z tym poradziliśmy

a. Dlaczego w chmurze

Chcąc wyjść naprzeciw powyższym wymaganiom, rozważaliśmy różne możliwości. Braliśmy pod uwagę rozwiązania on-premise, Infrastructure as a Service (IaaS) oraz Platform as a Service (PaaS). Ostatecznie podjęliśmy decyzję, że optymalnym wyborem będzie PaaS. Decydującym aspektem była łatwość wdrożenia i utrzymania. Dostawcy usług chmurowych zapewniają nam maszyny, na których są już zainstalowane najpotrzebniejsze środowiska i pozwalają nam zapomnieć o konieczności ich aktualizacji. Co więcej, usługodawca w większości przypadków daje nam również gwarancję dostępności (SLA), której poziom przekracza wtedy zwykle 99,99%. Klienci, którzy nie korzystają jeszcze z chmury często wyrażają obawy o dostęp do swoich zasobów. Co prawda nie mamy możliwości fizycznego kontaktu z serwerem, jednak panele administracyjne pozwalają skonfigurować wszystko, co potrzebne do uruchomienia i poprawnego działania usług. Inną wątpliwością, która często pada z ust klientów jest cena. Zazwyczaj jest ona nieco większa niż w przypadku rozwiązań on-premise czy standardowych hostingów ale jeśli uwzględnimy koszty konserwacji czy wdrożeń, jest to oferta bardzo konkurencyjna. Równie istotnym aspektem jest to, że najczęściej za usługi chmurowe płacimy w zależności od ich faktycznego wykorzystania a nie za zarezerwowaną moc.

b. Dlaczego wybraliśmy Azure

W dzisiejszych czasach na rynku publicznych chmur obliczeniowych głównymi graczami są: AWS, Azure oraz GCP. Biorąc pod uwagę że oprogramowanie było tworzone w środowisku .NET, naturalnym wyborem była chmura Microsoft Azure. Microsoft dba o ścisłą integrację swoich produktów, co przekłada się na znaczne przyspieszenie realizacji projektów. Dodatkowo zespół programistyczny iteo posiada doświadczenie praktyczne jak i potwierdzone certyfikacją Microsoft kompetencje w zakresie implementacji rozwiązań biznesowych na platformie Azure.

c. Jakie usługi wykorzystaliśmy

Przygotowana przez nas aplikacja została wdrożona w podejściu PaaS przy użyciu App Service. Usługa ta bardzo upraszcza zarządzanie aplikacją, ponieważ nie musimy przejmować się żadnymi kwestiami związanymi z serwerem, na którym działamy. App Service oferuje nam również możliwość bardzo łatwego skalowania. Gdy padnie decyzja, że klient chce rozszerzyć zasięg aplikacji, za pomocą zaledwie kilku kliknięć możemy zwiększyć parametry serwera, aby obsłużyć większe obciążenia.

Wszystkie pliki, takie jak grafiki strony internetowej czy dokumenty przechowujemy w Azure Storage Account. Jest to idealne rozwiązanie dla tego typu aplikacji, ponieważ nie wymaga deklarowania i rezerwowania z góry konkretnej ilości miejsca. Pozwala przechowywać zarówno małe jak i ogromne ilości danych, bez żadnego skalowania. Najważniejszą zaletą tego rozwiązania jest cena — jest ona uzależniona wyłącznie od wykorzystanej przestrzeni dyskowej.

Inną, trudną do przecenienia zaletą, jest integracja App Service z usługą Azure DevOps, która łączy w sobie wiele funkcjonalności dostosowanych do potrzeb developmentu, między innymi repozytorium kodu źródłowego. Panel administracyjny Azure pozwala za pomocą kilku kliknięć uruchomić App Service i wdrożyć na nim kod z repozytorium DevOps.

Jedną z najciekawszych funkcjonalności DevOps jest Azure Pipelines. Pozwala ona zautomatyzować procesy związane z kompilowaniem i optymalizacją kodu a także konfigurowaniem samej aplikacji w App Service. Dzięki Continuous Integration, jesteśmy w stanie dostarczać nowe wersje znacznie szybciej, jednocześnie minimalizując ryzyko błędów. Przygotowana przez nas konfiguracja w nowym formacie (YAML) jest prosta w modyfikacji i reużywalna. Pozwala z łatwością wdrażać różne wersje kodu na różnych środowiskach.

Jako bazę danych wybraliśmy DaaS, czyli Database as a Service. Usługa Azure SQL oferuje wszystkie funkcjonalności, których potrzebujemy, w bezkonkurencyjnej cenie. Warto również podkreślić, że Azure SQL nie wymaga zakupu relatywnie kosztownych licencji jak w przypadku np. SQL Server.

Do bezpiecznego przechowywania poufnych elementów konfiguracji wykorzystaliśmy komponent Key Vault. Jest to niemal darmowa usługa, która pozwala przechowywać informacje takie jak hasła i klucze dostępu. Od ręki otrzymujemy szyfrowanie i bardzo szczegółową kontrolę dostępu do tych danych. Możemy także umożliwić dostęp do tych informacji innym zasobom Azure, dzięki czemu tworzymy centralne miejsce do przechowywania konfiguracji. Jeśli w przyszłości zaszłaby potrzeba wymiany np. klucza dostępu, możemy to zrobić bardzo szybko. Co więcej, mamy gwarancję że został on zmieniony w konfiguracji wszystkich zasobów, które go potrzebują.

Aby uprościć i zmniejszyć koszty konserwacji samej aplikacji, zintegrowaliśmy ją z usługą Application Insights. Pozwala ona zbierać logi i dane diagnostyczne zarówno z App Service jak i innych zasobów Azure. Posiada szereg funkcjonalności, które ułatwiają diagnozowanie problemów w działaniu aplikacji, takich jak np. długi czas przetwarzania czy problem w komunikacji ze zintegrowanym systemem zewnętrznym. Po raz kolejny mogliśmy odczuć, jak doskonale współpracują ze sobą różne produkty Microsoft. Środowisko .NET oferuje gotowe pakiety, które bez większego trudu można wkomponować w kod źródłowy. Dzięki nim możemy zbierać informacje diagnostyczne o działaniu samej aplikacji, np. czas wykonywania żądań. Z Application Insights możemy również zintegrować sam App Service, co w znacznym stopniu ułatwia monitorowanie obciążenia, a co za tym idzie ułatwia znalezienie najlepszego momentu do przeprowadzenia prac serwisowych.

Rys. Diagram rozwiązania i komponentów Azure

Do zarządzania infrastrukturą wykorzystaliśmy Terraform. Jest to rozwiązanie typu Infrastructure as Code (IaC), które bardzo upraszcza procesy związane z tworzeniem i kontrolowaniem środowisk wdrożeniowych. Z jego pomocą utworzyliśmy krótkie skrypty, na podstawie których możemy w ciągu kilku minut stworzyć nowe, zupełnie odrębne, środowiska lub je usunąć. Konfigurację Terraform, czyli tzw. “state” również zapisujemy w Azure Storage Account, dzięki czemu zespół zajmujący się wdrażaniem może pracować nad infrastrukturą równolegle w tym samym czasie.

d. Jak się to sprawdza

Przygotowana przez nas architektura pozwoliła nam niewielkim kosztem uruchomić aplikację, która może obsłużyć zarówno niewielki jak i ogromny ruch. Znakomita większość procesu wdrożenia została zautomatyzowana, dzięki czemu możemy łatwo i szybko dostarczać nowe aktualizacje i funkcjonalności, nie obawiając się ewentualnych błędów podczas instalacji. Wszystkie zasoby znajdują się w chmurze Microsoft Azure, dlatego komunikacja między nimi jest szybka i wydajna. Co więcej, aplikacja posiada jedno, centralne miejsce do konfigurowania wszystkich usług, a wszystkie rozliczenia zamykają się w pojedynczej fakturze od jednego dostawcy.

4. Podsumowanie

Aplikacja miała niedawno swoją premierę i jest dostępna dla klientów. Zbiera dobre recenzje i cały czas powiększa grono odbiorców. Platforma ma duże perspektywy rozwoju funkcjonalności, a dzięki zastosowanej architekturze opartej na usługach Azure będziemy w stanie szybko dostosowywać ją do nowych zmian.

Daria Marek, .NET Developer
Paweł Rudyk, .NET Developer

Najnowsze artykuły

Najnowsze artykuły

Sztuczna inteligencja w samochodach autonomicznych. Wywiad z Kubą Walińskim, CEO w Happy Team

US One Stop Shop: Opracowanie strategii wejścia na rynek podczas rozwijania firmy technologicznej w USA

Case study bards.ai: Modele AI / LLM już niedługo uruchomią się na mobile bez dostępu do internetu