Wywiad: przełamywanie granic skalowalności oprogramowania

22.06.2023

Skalowalność – tajemnicze słowo, które coraz częściej pojawia się w kontekście potrzeb współczesnych przedsiębiorstw. O tym, dlaczego skalowalność oprogramowania odgrywa tak ważną rolę rozmawiamy z doświadczonym analitykiem i architektem systemowym Michałem Bielem. Wszystko to w kontekście przemyślanej struktury aplikacji i uwzględnienia indywidualnych potrzeb przedsiębiorstw. Zainteresowani? Z tekstu dowiecie się przede wszystkim:

  • Skalowalność oprogramowania – o co tu chodzi?
  • Czy architekt systemu może skutecznie wyeliminować potencjalny problem braku skalowalności już na starcie?
  • Dlaczego indywidualne podejście gwarantuje dobór optymalnych technologii?
  • Czy istnieją ogólne schematy przydatne w działaniach dotyczących podnoszenia jakości i użyteczności oprogramowania dla przedsiębiorstw?

A wszystko to poparte przykładami. Gotowi? Zaczynamy!

Marta Skiba: po pierwsze muszę powiedzieć, że świetnie gościć tu tak doświadczonego i zapracowanego specjalistę, jak Ty. Ciężko było się wyrwać z codziennych obowiązków?

  • Michał Biel: w praktyce nasza rozmowa dotyczy stricte tego, czym zajmuję się na co dzień więc cieszę się, że mogę wprowadzić innych do tej rzeczywistości. A że dużo się dzieje – fakt – w tej pracy nie ma miejsca na odpoczynek!

Marta Skiba: właśnie, czym spowodowane jest coraz większe zainteresowanie oprogramowaniem dedykowanym, skoro na rynku nie brak gotowych rozwiązań abonamentowych?

  • Michał Biel: z mojej perspektywy, motorem napędzającym tę tendencję jest fakt coraz większej rywalizacji we wszystkich sektorach gospodarki. Czasy niepewności spowodowane chociażby pandemią wyraźnie pokazały, że szybkie dostosowanie się do zmieniających się realiów, jest kluczowe w kontekście zdobycia przewagi rynkowej. W przypadku oprogramowania „pudełkowego”,  czas dostarczenia nowej wersji oprogramowania, dopasowanej do bieżących warunków często przekracza kilka miesięcy. W tym czasie biznes boleśnie odczuwa skutki takiego stanu rzeczy. To właśnie kontekst doboru personalizowanych funkcjonalności i możliwości natychmiastowego reagowania na zmiany sprawiają, że przedsiębiorstwa chętnie zwracają się w stronę oprogramowania „szytego na miarę”. Co więcej, w przypadku wielu systemów pudełkowych, ich architektura nie pozwala na sensowne ich skalowanie, więc niespodziewany ponadprzeciętny ruch, może doprowadzić do ich niedostępności. Sytuacje takie dramatycznie odbijają się na wizerunku firmy, dlatego tak ważne jest zadbanie o skalowalność już na początkowym etapie projektowania.  

Marta Skiba: wywołałeś tajemniczą „skalowalność”. Opowiesz o tym coś więcej?

  • Michał Biel: skalowalność oprogramowania to nic innego, jak zdolność systemu do płynnego dostosowywania się do wzrastających potrzeb i obciążeń. Oczywiście bez utraty wydajności. Mówiąc konkretniej: optymalnie zaprojektowany system czy aplikacja powinny być skalowalne, bo dzięki temu będą w stanie sprawnie obsłużyć zwiększającą się liczbę użytkowników, danych, transakcji czy zasobów. Przetworzenie większej ilości informacji, przyjęcie większego ruchu, to wszystko elementy, które decydują o realizacji celów biznesowych przedsiębiorstwa. Właśnie przez pryzmat realizacji tych celów i ROI możemy oceniać skuteczność wdrożonego oprogramowania.

Marta Skiba: brzmi poważnie. Czy możesz bardziej obrazowo omówić skalowalność oprogramowania na przykładach? Konkrety cenimy najbardziej.

  • Michał Biel: doskonale to rozumiem. Zacznijmy więc od najbardziej powszechnego przykładu, czyli wykorzystania aplikacji mobilnych. Na ten moment wybierzmy aplikację oferującą spersonalizowane oferty kredytowe. Całość działa na rynku od dłuższego czasu, bez zastrzeżeń. Zbliżamy się do wzmożonego okresu zainteresowania nową formą wsparcia: kredyt 2%. Przewidujemy zwiększony wzrost zapytań i wniosków kredytowych. Obciążenia wzrosną, jednak dzięki skalowalności aplikacji jesteśmy na to gotowi. Zawsze 😉 Nowoczesne aplikacje mogą być skonfigurowane do automatycznego skalowania w odpowiedzi na wzrost zapotrzebowania na konkretne zasoby. W praktyce wygląda to w ten sposób, że po przekroczeniu określonego progu użytkowników oprogramowanie automatycznie uruchamia nowe zasoby, zapewniając optymalną wydajność. Analizuje się tu na bieżąco obciążenie serwera, czas odpowiedzi, ruch użytkowników. Uruchamianie nowych zasobów może obejmować chociażby zwiększanie przepustowości sieci, uruchamianie dodatkowych serwerów, skalowanie baz danych, itp. Wszystko zależy od bieżących potrzeb, jednak efekt jest zawsze ten sam: sprawne realizowanie zadań, tj. niezakłócone działanie wszystkich funkcjonalności aplikacji.

Marta Skiba: dzięki skalowalności możemy zapewnić płynne działanie aplikacji unikając problemów nawet w okresach zwiększonego obciążenia. Omówiony przykład aplikacji mobilnej dotyczy branży finansowej, zapewne analogiczne schematy można zauważyć w przypadku wyprzedaży w e-commerce czy branży turystycznej tuż przed wakacjami. Jak to wygląda w przełożeniu na inne sektory gospodarki?

  • Michał Biel: masz rację, dlatego wybrałem ten przykład na start, bo łatwo tu dostrzec analogie. Skalowalne oprogramowanie dedykowane klasy Enterprise pomaga dużym przedsiębiorstwom osiągać większą efektywność operacyjną. W gronie naszych klientów znajdziemy przykłady firm z sektora energetycznego, które wykorzystują skalowalne oprogramowanie do obsługiwania i przetwarzania dużych ilości danych energetycznych, monitorowania majątku sieciowego czy dostarczania zintegrowanych rozwiązań dla klientów. Skala działania jest tu ogromna, bo mówimy o produkcji, dystrybucji i zarządzaniu sieciami i usługami dla klientów. Równie duża skala działania charakteryzuje branżę transportową. Skalowanie daje tu możliwość optymalizacji przepływu towarów poprzez skuteczne zarządzanie zamówieniami, magazynowaniem i logistyką. Firmy produkcyjnie monitorując własne parki maszynowe dysponują danymi dotyczącymi wydajności, zużycia energii i jakości. Dzięki oprogramowaniu dedykowanemu mogą analizować je w czasie rzeczywistym i błyskawicznie dostosowywać zasoby do zmieniających się potrzeb: zwiększone zapotrzebowanie, testowanie nowej linii produktów, itp. Wybacz, że podaję tak skondensowane przykłady, jednak przekrój klientów, którzy doceniają potencjał skalowalności oprogramowania jest ogromny.

Marta Skiba: jasne, dzięki za szczegółowe rozwinięcie tematu. Wspomniałeś o analizie danych w czasie rzeczywistym. Wydaje się, że to szalenie skomplikowany temat, zwłaszcza, gdy danych jest bardzo dużo.

  • Michał Biel: a wiesz, że właśnie w przetwarzaniu dużych zbiorów danych i ich analizie skalowalność odgrywa kluczową rolę? Jeśli firma gromadzi duże ilości danych potrzebuje oprogramowania, które może je efektywnie przetwarzać. Czyli takiego, które będzie skalować się wraz ze wzrostem dostarczanych do niego informacji. Oprogramowanie dedykowane pozwala na skalowanie dostępnej infrastruktury i zasobów obliczeniowych, a to wszystko po to, by dostarczać wartościowe analizy, które będą stanowić realne wsparcie procesów decyzyjnych w przedsiębiorstwach. Skalowalność to klucz do sukcesu. I nie ma w tym stwierdzeniu nawet cienia przesady.

Marta Skiba: ciekawe…ciekawe. Pytanie, czy zapewnienie skalowalności to łatwe zadanie?

  • Michał Biel: teraz wkraczamy na prawdziwie fascynującą ścieżkę. Sukces w zapewnieniu skalowalności oprogramowania tkwi we współpracy architekta systemu, zespołu developerów, administratorów systemów i teamu zaangażowanego w projekt po stronie klienta. Osoba pełniąca każdą z ról ma konkretne zadania do wykonania. Dużo zależy od doboru technologii, optymalizacji kodu, sposobu zarządzania bazami danych – czynników jest wiele. Kompleksowe podejście od realizacji zadań przekłada się na jakość produktu końcowego.

Marta Skiba: a jakie zadania w tym łańcuchu współzależności projektowej pełni architekt systemów?

  • Michał Biel: w najbardziej ogólnym ujęciu rolą architekta systemów jest identyfikowanie i projektowanie rozwiązań, które umożliwiają skalowalność oprogramowania. Szczegółowa analiza wymagań biznesowych i technologicznych powinna poprzedzać projekt architektury nowego systemu. Na podstawie informacji zdobytych na tym etapie można zidentyfikować potencjalne punkty, które ograniczają skalowalność, np. nieoptymalne zależności między poszczególnymi modułami systemu. Świadome podejście do etapu projektowania minimalizuje potencjalne punkty zapalne. Uwzględnienie indywidualnych potrzeb każdego klienta to ogromna przewaga w procesie tworzenia oprogramowania. Dla jednych monolit sprawdzi się doskonale, jednak w przypadku bardziej zaawansowanych systemów architektura, w której poszczególne funkcjonalności rozdzielimy do osobnych modułów może dać znacznie więcej możliwości. Każdy z modułów, skalowany niezależnie, to ogromny potencjał i szansa na lepsze wykorzystanie dostępnych zasobów teraz i w przyszłości. Jeśli zaprojektujemy całość systemu w taki sposób, by umożliwić dynamiczne monitorowanie stanu obecnego to automatyczne skalowanie zapewni odpowiednią wydajność systemu. Rolą architekta systemu jest więc uwzględnienie przewidywanych obciążeń i projektowanie całości z myślą o potencjalnym wzroście użytkowników, danych, zadań, itp. Nie można zapominać o bezpieczeństwie, które w obecnych czasach musi być jednym z priorytetów. Jak widać przekrój realizowanych zadań jest spory, ale doświadczony architekt i zaangażowany zespół projektowy to nieocenione atuty w sprawnym prowadzeniu działań.

Marta Skiba: mówisz o przewidywaniach potencjalnych wzrostów obciążeń. Czy istnieją jakieś sprawdzone mechanizmy, które pozwalają się na takie sytuacje przygotować już na etapie projektowania systemu?

  • Michał Biel: pozwolisz, że krótko zarysuję kierunki, w których można podążać. Na start warto zwrócić uwagę na analizę danych historycznych, prognozy rozwoju rynku. To wszystko daje nam obraz przewidywanych obciążeń. Zaawansowane systemy zaprojektowane w oparciu o mikrousługi, wprowadzone już na etapie tworzenia architektury, to podstawa do elastycznego rozwoju systemu w przyszłości. Rozwój technologii chmurowych jest dodatkową szansą, gdyż elastyczne zasoby można tu dostosowywać do zmieniających się potrzeb stosunkowo łatwo. Wymagania stawiane przed nowym systemem determinują wybór odpowiedniej platformy chmurowej i tworzenie całej infrastruktury. Nie bez znaczenia na etapie projektowania architektury oprogramowania są testy i symulacje obciążeń. Dane zgromadzone na podstawie analizy różnych scenariuszy testowych pomagają ocenić wydajność i skalowalność oprogramowania, a jeśli są prowadzone przy dużych obciążeniach, pozwalają identyfikować tzw. wąskie gardła i problemy wydajnościowe. Oczywiście wszystko po to, by adresować potencjalne trudności już na etapie projektowania i móc skutecznie im przeciwdziałać.

Marta Skiba: czy system, który raz zaprojektujemy zgodnie z zastosowaniem tak przemyślanej architektury będzie działał sprawnie w przyszłości?

  • Michał Biel: musimy pamiętać, że skalowanie oprogramowania to proces dynamiczny. Reagowanie na zmiany można usprawnić przy zastosowaniu mechanizmów automatyzacji i kontroli. Jednak regularne monitorowanie wydajności oprogramowania, jego obciążeń oraz wykorzystywanych zasobów jest wskazane. Wszystko po to, by ciągle przekraczać granice skalowalności i realizować założone cele z nawiązką.

Marta Skiba: podoba mi się stwierdzenie o przekraczaniu granic skalowalności i wiesz, co? Wykorzystam je jako myśl przewodnią naszej rozmowy!

  • Michał Biel: haha, cieszę się bardzo. Jako konkluzję mogę nawet podać Ci kilka schematycznych kroków, które warto wdrożyć na etapie projektowym, by przekraczanie granic skalowalności było możliwe.

Marta Skiba: chyba nie mogłam zaplanować lepszego podsumowania. Słucham uważnie.

  • Michał Biel: receptą na przekraczanie granic skalowalności jest mocna analiza wymagań i potencjału systemu już na starcie. Im więcej uwagi poświęconej na tym etapie, tym mniej potencjalnych niespodzianek w przyszłości. Dzięki skutecznej optymalizacji kodu można eliminować wąskie gardła, redundancję w kodzie, operacje, które nie są realizowane efektywnie. Mówiąc o optymalizacji kodu mam na myśli chociażby: zastosowanie bardziej efektywnych algorytmów, zoptymalizowanie komunikacji z bazą danych, wyeliminowanie powtarzających się operacji. Wydajny kod to podstawa. W miarę możliwości warto rozważyć podział systemu na mikrousługi czy skoncentrować uwagę na modelu architektury opartym na zdarzeniach. Wykorzystanie klastrów, systemów rozproszonych, rozwiązań chmurowych to wszystko elementy umożliwiające obsługiwanie większej ilości żądań w tym samym czasie. Technologia ma moc, tylko należy wiedzieć, jak dostosować dostępne rozwiązania do indywidualnych potrzeb i możliwości przedsiębiorstwa.

Marta Skiba: i właśnie tu wchodzisz Ty i Twój zespół?

  • Michał Biel: dokładnie! Mamy wiedzę, mamy doświadczenie, pasjonujemy się swoją pracą. Niewiele jest rzeczy, które przebiją uczucie, gdy oprogramowanie stworzone od podstaw, poparte sporą dozą analityki, pracy koncepcyjnej i wdrożeniowej zaczyna działać w praktyce. W Opsenio dbamy o relacje z klientami, więc pozytywny feedback, jaki otrzymujemy po czasie to najlepsza gratyfikacja.

Marta Skiba: masz poczucie dobrze wykonywanej pracy, prawda?

  • Michał Biel: jasne! Własnej i całego teamu. Zaangażowanie wszystkich procentuje w jakości. Dzięki temu tworzymy systemy uznawane za krytyczne u naszych klientów. To zaufanie, na które zapracowaliśmy realizując zadania step by step.

Marta Skiba: dzięki Michał za rozmowę, a wszystkich zainteresowanych szczegółami zachęcamy do kontaktu. Mamy nadzieję, że skalowalność oprogramowania nie ma już przed Wami tajemnic 😉 a jeśli… to wiecie, gdzie nas znaleźć!

Poprzedni wpis Następny wpis