Przejdź do Treści

Czy aplikacje zostawiają ślad węglowy?

Capgemini
2022-07-01

Ślad węglowy, czyli całkowita emisja gazów cieplarnianych wytworzonych podczas pełnego cyklu życia produktu. Choć nie jest to tak oczywiste, pozostawiają go również aplikacje wykorzystywane codziennie przez miliardy ludzi na całym świecie. Zapraszamy do lektury artykułu Marcina Sokoła – Senior Software Consultant w Capgemini Polska.

Wszystkie aplikacje, te znajdujące się na milionach serwerów, we wszystkich chmurach oraz miliardach telefonów komórkowych, cały czas zużywają energię przyczyniając się do emisji gazów cieplarnianych. Zwłaszcza jeśli aplikacja jest mało wydajna, generuje zbędny ruch sieciowy, pobiera z bazy niepotrzebne dane lub kiedy wykorzystuje zbyt dużo pamięci.

Część z powyższych problemów można wyeliminować za pomocą testów performance’owych, stosując kilka reguł (np. sonarowych) oraz poprzez analizę i zmiany w kodzie. Nie na wszystko istnieje „cudowne lekarstwo”, jednak poniżej przedstawię kilka rozwiązań.

HTTP (i inne protokoły) – przesyłamy tylko niezbędne dane. Zmniejszy to ilość potrzebnej pamięci po stronie serwera, wielkość transmitowanej paczki danych oraz zmniejszy ilość potrzebnej pamięci w naszej aplikacji, czyli tym sposobem zyskujemy na trzech rzeczach.

Baza danych – korzystając z baz danych pobieramy tylko te dane, które są niezbędne. Korzyści wynikające z ich stosowania to: mniej pamięci i operacji (operacje mogą być dyskusyjne) po stronie bazy danych, rozmiar transmitowanej paczki, ilość potrzebnej pamięci w naszej aplikacji- również potrójny zysk

Indexy – szybsze wyszukiwanie i wolniejsze wstawianie. Można na tym wiele zyskać lub stracić. Zakładając index na złej kolumnie/polu bez wcześniejszej analizy, zamiast wzrostu wydajności zwolnimy aplikacje. Oczywiście zbyt dużo indeksów również może zmniejszyć wydajność aplikacji jak również wpłynąć negatywnie na ilość zużywanej pamięci.

Nasza aplikacja – tutaj zwróćmy uwagę na dwie metryki tj. CPU i RAM. Czasami warto jest stracić na jednej metryce, aby zyskać na drugiej np. warunki w pętlach powinny opierać się na zmiennych (strata na pamięci), a nie na np. list.size(), ponieważ każdorazowo wywoływana jest funkcja zwracająca rozmiar (zysk na operacjach).

Innym dobrze znanym „zwalniaczem” aplikacji JAVA jest dodawania String’ów. Ogólnie starajmy się unikać operacji, które tworzą nowe obiekty (narzut na dodatkowe operacje i pamięć). Problem ze String’ami nie sprowadza się tylko do dodawania, więc dobrze jest się zapoznać ze sztuczkami związanymi z ich wydajnością.

Oczywiście we wszystkim należy zachować „zdrowy rozsądek”. Pewne jest, że niektóre rozwiązania wybieramy dla własnej wygody – łatwiej jest użyć biblioteki, niż samemu implementować skomplikowany algorytm, jednak dobrze jest przynajmniej wybrać wydajne i łatwe rozwiązanie oraz nie pobierać ogromnej biblioteki w celu użycia tylko jednej funkcji.

Używanie statycznych pól (oszczędność na pamięci), dobrze dobrane wzorce projektowe, wydajny kod oraz wiele innych rzeczy nie tylko czyni z nas dobrych programistów, ale również może mieć realny wpływ na środowisko naturalne.

Dbając o takie szczegóły może nie zapewnimy naszej aplikacji ogromnego wzrostu wydajności, jednak wystarczy zmniejszyć zużycie energii często używanej aplikacji o 0.1%, żeby średnio jedna na tysiąc instancji działała „za darmo”- przy miliardach działających aplikacji robi to już duża różnicę

Pamiętajmy o tym, że to my czynimy ten świat lepszym miejscem, to my mamy wpływ na jego przyszłość poprzez szereg małych, często niedostrzegalnych decyzji i zmian. 😉