Wielokrotnie po wydaniu aplikacji, upływie gwarancji oraz zakończeniu wdrażania zmian rozwojowych, klient znajduje sobie inną firmę, z którą rozpoczyna nową współpracę. Najczęściej dzieje się to w obliczu sukcesu zamówionego produktu. Dlaczego? Bo nie byliśmy gotowi przejąć inicjatywy w odpowiednim momencie i skutecznymi działaniami zwalczyć obaw, które mieli klienci. Chciałbym przedstawić kilka kroków i narzędzi, które zespół deweloperski powinien używać, aby być w stanie wyjść naprzeciw oczekiwaniom.

Monitoring aplikacji

Monitoring

Bardzo często firmy nie monitorują działających aplikacji. Informacja, że coś nie działa albo działa nie tak, jakby tego oczekiwano, otrzymywana jest dopiero od klienta lub, co gorsza, klient końcowy go o tym poinformuje. Umówmy się, że jest to najgorszy możliwy scenariusz. Zdecydowanie lepszym rozwiązaniem jest powiadomienie klienta o awarii oraz o podjęciu odpowiednich kroków naprawy. Monitoring aplikacji i sprawna komunikacja z klientem, pozwolą na budowanie partnerskiej relacji opartej o zaufanie.

Czym właściwie jest monitoring? To zbiór narzędzi pozwalających zautomatyzować proces kontrolowania tego, co dzieje się z naszą aplikacją. Co więcej, pozwala na szybkie reagowanie przed wystąpieniem niektórych problemów (np. wydajnościowych). Dzięki temu mamy możliwość nie tylko zaoszczędzić, ale również zarobić pieniądze.

Możemy rozróżnić kilka poziomów monitoringu. Najczęściej wymienianymi monitorami są monitory typu whitebox i blackbox. Wyróżnione poniżej poziomy monitoringu nie są żadną normą, a jedynie intuicyjnym podziałem tego, co i w jaki sposób możemy monitorować.

  1. Poziom serwerowy (Blackbox)
  2. Poziom serwera aplikacji (Blackbox)
  3. Poziom aplikacji (Whitebox)
  4. Poziom jakości aplikacji (Whitebox)
  5. Poziom bazy danych (Whitebox)

Poziom serwerowy

Na poziomie serwerowym możemy monitorować stan serwera: 

  • czy działa, 
  • czy posiadamy odpowiednią ilość miejsca na dyskach, 
  • poziom zużycia jego zasobów takich jak RAM, CPU, 
  • czas odczytu i zapisu na dyskach. 

W skrócie odpowiada na pytanie “Czy nasz serwer pozwala nam na działanie aplikacji?“.

Poziom serwera aplikacji

Pozwala na monitorowanie stanu serwera aplikacji (np. nginx, node, glassfish):

  • czy aplikacja jest uruchomiona i odpowiada na zapytania,
  • czy funkcjonują procesy odpowiedzialne za prawidłowe działanie aplikacji, m.in. zadania cykliczne.

Odpowiada nam na pytanie “Czy nasza aplikacja działa?“.

Poziom aplikacji

Poziom monitoringu aplikacji pozwala nam określić “Jak działa nasza aplikacja?“. To tutaj monitorujemy błędy naszej aplikacji oraz ewentualne zasoby zależne, czyli integracje, aplikacje współdziałające itd. Dodatkowo informuje nas on również o pewnych scenariuszach, o których powinniśmy wiedzieć, lub umożliwia nam łatwy dostęp do takiej informacji np. o tym, czy i co zostało zaimportowane.

Poziom jakości aplikacji

Poziom jakości aplikacji pozwala odpowiedzieć na pytanie “Czy nasza aplikacja działa poprawnie?“. To tutaj znajdziemy różnego rodzaju testy – jednostkowe, funkcjonalne, end-to-end itd.

Poziom bazy danych

Czasami z różnych powodów nie chcemy, aby środowisko monitorowało wszystkie zachowania, zapytania, czy scenariusze. Niektórymi z nich może zająć się baza danych. Wszystkie znane mi silniki baz danych posiadają funkcje monitorujące. Możemy też monitorować czasy zapytań i włączyć logowanie tych, które są redundantne albo zbytnio obciążają naszą bazę danych. Sama baza nie umożliwia nam jednak monitorowania najcięższych przypadłości – takich jak np. deadlocki.

Rozwój

Dlaczego warto zainwestować w monitoring?

W monitoring warto zainwestować przede wszystkim dlatego, że budujemy zaufanie. Nie ma nic bardziej wartościowego niż klient, który ufa temu, co robimy. Zaufanie może przynieść (i najczęściej przynosi) nam masę benefitów:

  • nowe współprace zdobyte z polecenia zadowolonych klientów,
  • współpraca oparta na przekonaniu, że interes klienta to też nasz interes, 
  • lepsza jakość współpracy.

Świadomość metryk naszego serwera oraz aplikacji pozwala nam nie tylko przeciwdziałać, ale i zapobiegać sytuacjom kryzysowym. Będąc w stanie reagować przed występującymi problemami i awariami, możemy stawiać na edukowanie każdego i na każdym poziomie komunikacji klient-dostawca. Powinniśmy nie tylko odpowiednio przedstawiać problem, ale i umiejętnie wybierać rozwiązanie. 

Zaletą współpracy opartej o zaufanie jest to, że klient nie będzie chciał “wymienić nas na lepszy model”, gdy tylko projekt zacznie odnosić sukcesy. Często dzieje się tak, ponieważ klient nie czuje się pewnie w tym, co robi lub, co gorsza, boi się, że z nami dalszy sukces nie jest możliwy. 

Czas wytwarzania w początkowych fazach projektu może być nieco wydłużony z uwagi na pisanie testów, konfiguracje i organizacje monitoringu. Warto podkreślić, że już za około połową projektu (a jeśli projekt nie jest skomplikowany, to nawet wcześniej) zaczyna on przynosić przychód w postaci zaoszczędzonego czasu, komfortu wytwarzania kodu przez programistów i zmniejszonej regresji. Co więcej, w przypadku gdy utrzymujemy projekt, pozwala nam zaoszczędzić czas na testowaniu, wytwarzaniu nowych funkcjonalności i, co najważniejsze, na stabilności naszego systemu

Dlaczego stabilność jest taka ważna? Dla przykładu: jeśli system przez dobę generuje nam 100 000 zł dochodu, a 90% ruchu odbywa się w godzinach 7-23, to 1 minuta przerwy w działaniu w tych godzinach jest warta niemalże 100 zł, a godzina prawie 6000 zł. Nie wspominając o wpływie takich problemów na inne czynniki takie jak konwersje lub ruch nawracający. 

Jakich narzędzi używamy?

Cypress.io

Cypress to framework JavaScriptowy, dzięki któremu jesteśmy w stanie przeprowadzić testy end-to-end. Testy end-to-end pozwalają nam określić, czy aplikacja spełnia wymagania użytkownika końcowego. Obrazując, jest to zbiór narzędzi, dzięki któremu jesteśmy w stanie “zaprogramować” użytkownika końcowego, który jest stanie przeklikać się przez całą naszą platformę i określić, czy działa ona tak, jakbyśmy tego oczekiwali.

zabbix

Zabbix

Zabbix to narzędzie w klasie enterprise, które pozwala rozwiązać ogrom problemów monitorowania parametrów sieci, działania i integralności serwerów. Pozwala nam reagować od razu na występujące problemy serwerowe. Co więcej, pozwala nam na przechwytywanie danych i ich przekazywanie, a dzięki funkcjom raportującym możemy łatwo dbać o jakość wytwarzanych aplikacji.

phpunit

PHPUnit

PHPUnit to framework służący do pisania i wykonywania testów jednostkowych w języku PHP. Testy jednostkowe to takie, które pozwalają nam sprawdzić, czy kod aplikacji działa w sposób, w jaki tego oczekujemy. Dzięki tym testom programiści mogą określić, czy wytworzony kod działa w sposób zamierzony. Odpowiednie pokrycie kodu testami jednostkowymi pozwala na określenie, czy logika aplikacji nie została uszkodzona.

graylog

Graylog

To zaawansowane repozytorium logów naszych aplikacji. Pozwala na obserwowanie aplikacji pod kątem występujących błędów i statusów zaplanowanych prac. Co więcej, umożliwia natychmiastową reakcję nie tylko osobom odpowiedzialnym za monitorowanie aplikacji i kontakt z klientem, ale również programistom, ułatwiając i przyspieszając rozwiązywanie problemów.

Dodaj komentarz