
Tworzenie przyjaznych środowisku i opartych o chmurę aplikacji w Java
To jest transkrypcja 173. odcinka podcastu Porozmawiajmy o IT.
Cześć, moimi gośćmi są dziś Łukasz Stefaniszyn, skuteczny architekt oprogramowania z doświadczeniem w zakresie full stack Software Delivery Life Cycle w oddziale financial services w Capgemini Polska. Umiejętnie zarządza i wdraża nowe innowacyjne pomysły i strategie w zespołach onshore i offshore. Pomyślnie wdraża aplikacje z zapewnieniem wysokiej jakości wraz z dobrze zdefiniowaną infrastrukturą chmury. Buduje profesjonalne biznesowe relacje ze współpracownikami. Oraz Bartłomiej Wasiuk, który jest architektem oprogramowania w oddziale financial services w Capgemini Polska. Pełni rolę lidera technicznego w zespole pracującym dla klienta z branży ubezpieczeń. Wieloletni praktyk w dziedzinie projektowania i tworzenia złożonych systemów dla klientów z różnych branż. Preferuje stack technologiczny oparty o język programowania Java. Zaangażowany w życie firmy jako bezpośredni przełożony grupy świetnych deweloperek i deweloperów. Doświadczony w pracy z metodykami Scrum oraz Safe.
Cześć, moimi gośćmi są dziś Łukasz Stefaniszyn, skuteczny architekt oprogramowania z doświadczeniem w zakresie full stack Software Delivery Life Cycle w oddziale financial services w Capgemini Polska. Umiejętnie zarządza i wdraża nowe innowacyjne pomysły i strategie w zespołach onshore i offshore. Pomyślnie wdraża aplikacje z zapewnieniem wysokiej jakości wraz z dobrze zdefiniowaną infrastrukturą chmury. Buduje profesjonalne biznesowe relacje ze współpracownikami. Oraz Bartłomiej Wasiuk, który jest architektem oprogramowania w oddziale financial services w Capgemini Polska. Pełni rolę lidera technicznego w zespole pracującym dla klienta z branży ubezpieczeń. Wieloletni praktyk w dziedzinie projektowania i tworzenia złożonych systemów dla klientów z różnych branż. Preferuje stack technologiczny oparty o język programowania Java. Zaangażowany w życie firmy jako bezpośredni przełożony grupy świetnych deweloperek i deweloperów. Doświadczony w pracy z metodykami Scrum oraz Safe.
Dzisiaj porozmawiamy sobie o dwóch istotnych trendach: dbaniu o środowisko i wykorzystaniu chmury. Połączymy te trendy, rozmawiając o tym, jak tworzyć przyjazne środowisku i oparte o chmurę obliczeniową aplikacje w Java.
Chciałbym rozpocząć od aspektu środowiskowego, bo w IT oprócz zagadnień bezpieczeństwa, jakości, disability, o których się coraz częściej mówi, mam wrażenie nawet, że do jakiegoś mainstreamu te zagadnienia trafiają, to też pojawia się aspekt wpływu, jaki ma branża na środowisko.
Czy faktycznie ten wpływ jest na tyle duży, czy faktycznie jest to problem, czy jako społeczeństwo, ludzkość mamy o co się martwić, czy IT ma na tyle znaczący wpływ na to, że warto ten temat poruszać?
ŁS: Częściowo tak, jak wspominałeś, czyli mamy już całkiem dużo elementów, które determinują, co jest dobrym produktem jako aplikacja, a co potrzeba jeszcze ulepszyć. Na pewno to, co na dzień dzisiejszy jest takim elementem, dyferencjałem odnośnie do wyzwań IT, to jest użyteczność, utrzymanie, dostępność, jakość. Od niedawna jeszcze jesteśmy w tej części związanej z bezpieczeństwem.
Dość klasycznym elementem są koszty i szybkość działania aplikacji, a całkowicie niedawno pojawiło się coś, co się nazywa green IT, czyli zielone IT. Ale to jest właśnie coś, co my też zauważamy w pierwszej kolejności w Europie, pewnie dalej na świecie, czyli coraz więcej mamy tych aplikacji, coraz więcej wytwarzamy, nawet ze stacjonarnych sklepów przechodzimy do świata elektronicznego. Co za tym idzie, jest zapotrzebowanie na strony internetowe czy jakieś mobilne aplikacje, więc tego jest całkiem sporo i będzie jeszcze więcej.
To jest też dobre, bo wygląda na to, że świat się rozwija. I korzystając z danych, które są tworzone, opublikowane i weryfikowane u nas, przez firmę Capgemini, wychodzi na to, że na obecną chwilę wkład IT w wytwarzanie dwutlenku węgla z powodu działania serwerów, urządzeń elektrycznych jest na poziomie ok. 3%. I mniej więcej, biorąc pod uwagę szybkość rozwoju, szacuje się, że w 2040 r. będzie ponad 14%. Nie jest jeszcze duże, ale zaczyna rosnąć, więc to jest tak naprawdę moment, kiedy warto się nad tym zastanowić z dwóch powodów.
Pierwszy jest najbardziej oczywisty, czyli że chcemy, żeby miejsce, w którym żyjemy, było jak najlepsze, ale też druga rzecz jest taka, że inne firmy zaczynają zwracać na to uwagę, a co za tym idzie, przy samych ofertach, jakie będziemy składać do innych firm, jest np. informacja, że aplikacja spełnia wymogi, jeśli chodzi o zielone IT, co jest dodatkiem ponadto, co jest już dotychczas, czyli użyteczności, utrzymania, dostępności.
Gdybyśmy spojrzeli głębiej na to, jakie branże czy jakie zastosowania IT de facto mają istotny wpływ, bo najszerzej, bo o ile najczęściej wspomina się tu blockchain, który ma trochę przebiegi przepalające prąd i mało jest z tego jakiegoś użytku, o tyle jestem ciekaw, jakie jeszcze identyfikujecie zastosowania IT, które pozostawiają znaczący swój ślad na środowisko.
BW: Tutaj jest dużo różnych śladów, jak to nazwałeś. Łukasz wspomniał o serwerach. Przecież, żeby utrzymać taki Google, Amazon posiada ogromne centra danych. To nie tylko prąd do podtrzymywania samych urządzeń sieciowych, ale też cała infrastruktura utrzymująca to. Jest tego bardzo dużo i dlatego my jako organizacja, wybierając dostawcę usług cloudowych, czy my jako oferent rozwiązań infrastrukturalnych, możemy opierać się na centrach IT, które pobierają zieloną energię i w ten sposób możemy trochę zminimalizować wpływ na środowisko.
Natomiast wspomniałeś o technologii blockchain. Ona jest pewnym novum w IT od kilku lat. Owszem, obserwujemy bardzo duże obciążenie maszyn w czasie operacji blockchainowych, ale w zastosowaniach komercyjnych jest jeszcze mało wykorzystywane. Ja tutaj najbardziej bym się obawiał jeśli chodzi o wykorzystanie energii w kopalniach bitcoinów. Na świecie powstają całe farmy włączonych kart graficznych, które rozgrzane wręcz do czerwoności kopią te bitcoiny i inne kryptowaluty.
A mówię o bitcoinie, bo jest ustalona maksymalna liczba bitcoinów dostępnych w obiegu i jeszcze ona nie została osiągnięta, ale im bliżej jesteśmy tej maksymalnej liczby, tym wykopanie kolejnego bitcoina jest cięższe i konsumuje dużo więcej energii. Już kilka lat temu domowi górnicy kryptowalut, jak to się mówi, mieli problem, że opłacalność wykopania bitcoina względem poboru prądu już się obracała na niekorzyść. Więc uważam, że największe zagrożenia to chmury, ogromne centra serwerowe, sieciowe i kopalnie bitcoinów.
My jako organizacja mamy pewien wpływ na pierwszy z tych aspektów. Oczywiście jeżeli mówimy o sustainability, czyli zrównoważonym rozwoju, do tego można jeszcze dodać typowe biurowe zachowania. Czyli ograniczanie zużycia papieru na rzecz maili, ograniczanie podróży służbowych na rzecz wideokonferencji. Więc to są rzeczy, na które możemy mieć jakiś wpływ.
Wspominałeś, Łukasz, wcześniej o green IT, Bartek, teraz powiedziałeś, jakie fragmenty szeroko rozumianego IT mogą mieć swój wpływ na środowisko, chciałbym się teraz przyjrzeć temu od drugiej strony, czyli spróbować ująć temat przyjazności środowisku. Kiedy w ogóle możemy mówić, że aplikacja jest przyjazna środowisku? Co to w ogóle znaczy?
ŁS: Tak, w sumie bardzo fajne pytanie, ponieważ musimy pamiętać o tym, że w ogóle cała ta inicjatywa przyjaznych aplikacji to jest tak naprawdę rozłożenie na dwa główne składniki, tj. aplikacja sama w sobie, czyli jej sposób działania, a więc w tym przypadku mówimy o tym, w jaki sposób się zachowuje aplikacja, która była napisana w danym języku programowania, jeżeli chodzi o zużycie CPU, RAM-u, sieci czy zapisu/ odczytu z dysku. Ale jest też ta druga rzecz – sama infrastruktura. Czyli czy komponenty, z których zbudowaliśmy naszą infrastrukturę, która będzie wspierać rzeczywiście naszą aplikację, jest też optymalna.
Bo czasami może być tak, że przedobrzymy z jakimiś usługami albo sama koncepcja realizacji biznesowego działania aplikacji może być lepiej zrobiona przy użyciu innych komponentów. Bo sami wiemy, że w IT, żeby napisać jakąś jedną funkcjonalność, można to zrobić na mnóstwo różnych sposobów, łatwiej, bardziej lub mniej czytelnie, szybciej, wolniej. Jest bardzo dużo różnych podejść, w jaki sposób zrealizować dokładnie to samo zadanie i idąc o jeden szczebel w górę, dokładnie tak samo można zrobić z infrastrukturą.
Czyli tę samą funkcjonalność czy funkcjonalność biznesową można zrealizować przy użyciu różnego zestawu usług, co za tym idzie, musimy pamiętać, że najczęściej tak naprawdę mówimy o rozwiązaniach chmurowych. Z naszej perspektywy to jest na kliknięcie jednego przycisku, natomiast tysiące kilometrów dalej faktycznie zaczynają się uruchamiać maszyny, które zaczynają realizować to, co sobie kliknęliśmy tylko u siebie na ekranie. Więc trzeba wziąć to pod uwagę.
I mając to na myśli, pojawia się taka cienka granica między wydajnością aplikacji a tym, czy aplikacja i zarazem też infrastruktura jest zielona (green IT). Jest jeszcze zagadnienie, czy jak szybko działa mi aplikacja, to czy ona jest zielona. Czyli kwestia tego czy i w jaki sposób będziemy mierzyć sobie ten green IT, ale sądzę, że możemy tu zadać pytanie, w jaki sposób moglibyśmy się powoli zacząć przymierzać do tego, w jaki sposób to mierzyć i warzyć.
To jest bardzo ważna rzecz, dlatego pozwolę sobie podkreślić, że o przyjazności aplikacji mówimy wówczas, kiedy jest zadbany ten obszar aplikacji samej w sobie, czyli wydajnie napisanej aplikacji, która wykorzystuje zasoby w jak najmniejszym stopniu, ale też infrastruktury. Nie możemy o tym komponencie zapominać, ponieważ tutaj to wykorzystanie energii i ten wpływ może być duży. I czasami też złudnie w chmurze obliczeniowej coś, co jest dostępne jednym klikiem, de facto może mieć całkiem spory impakt.
Do tego zaraz przejdziemy. Chciałbym teraz może faktycznie przejść do tego wątku, o którym wspomniałeś, bo ciężko jest zarządzać czymś, czego się nie mierzy. Dlatego pytanie teraz, jakie narzędzia, jakie miary mamy dostępne w procesie wytwarzania i utrzymania aplikacji (bo przed chwilą sobie powiedzieliśmy, że ta infrastruktura i utrzymanie też ma znaczący wpływ), aby właśnie ten wpływ na środowisko zidentyfikować, wiedzieć, jaki jest ten wpływ, a w perspektywie długoterminowej minimalizować?
ŁS: Mamy ten podział, jeżeli chodzi o działanie aplikacji i działanie infrastruktury. Jeżeli chodzi o infrastrukturę, i idąc troszkę bardziej tak naprawdę, już korzystając z takich rozwiązań typu chmura, AWS, Azure czy Google, to oni już tak naprawdę, nie w bezpośredni sposób, ale pośrednio, optymalizują, tzn. informują danego użytkownika, że słuchaj, tę funkcjonalność, którą odpaliłeś, prawdopodobnie można byłoby lepiej uruchomić.
To też wszystko zależy od tego, w jakim pakiecie jesteśmy, czyli że dany dostarczyciel chmury od razu te informuje nas o możliwej optymalizacji użycia zasobów, więc to już w jakiś sposób się tam dzieje. Bo nie ukrywajmy, że tak naprawdę w jakimś stopniu koszt, który my ponosimy za działanie jakiejś usługi, jest bardzo często kosztem, który przekłada się na zużycie energii. Więc poniekąd ci więksi dostawcy chmurowi już informują nas o tym, w jaki sposób moglibyśmy lepiej zrealizować naszą funkcjonalność biznesową.
Natomiast jeśli chodzi o drugą część, czyli samą aplikację, to jest to już tylko i wyłącznie po naszej, czyli deweloperów, stronie. I teraz: co można byłoby zrobić? W sumie jest trochę tak, że Capgemini jest całkiem sporą firmą, ona jest rozłożona w ok. 50 krajach, ponad 300 tys. pracowników i to też daje całkiem sporą wartość. Wartość tego typu, że w różnych częściach świata różne działy zaczęły się trochę zastanawiać nad tym, w jaki sposób być tym sprzedawcą usług, który się tak naprawdę zacznie wybijać.
I tym elementem może być np. właśnie w dzisiejszych czasach to zielone IT. I w oddziale francuskim zaczęto współpracować z kilkoma uniwersytetami, też firmy z innej branży IT, federacje zrzeszające informatyków wygenerowały bardzo fajny i ciekawy raport, który robi nam zestawienie, co można byłoby zrobić lepiej, jeśli chodzi o samą aplikację. Umieścili to w dość ciekawej koncepcji, mianowicie nakładając, jak łatwo dałoby się zaimplementować daną regułę do aplikacji i jaki ma to wpływ. Najczęściej tego typu weryfikację można robić przy użyciu statycznej analizy kodu.
To tak naprawdę wszyscy znamy, wytwarzając każdą aplikację, najczęściej używamy. W pierwszym kroku to jest statyczna analiza kodu. I w takiej analizie można by wykryć jakieś wzorce, które podpadają pod za duże zużycie zasobów. Najprostszym, który wszystkim pewnie przychodzi do głowy, może być np. select *. Czyli tak naprawdę konsumujemy strasznie dużo operacji nad czymś, co tak naprawdę można byłoby zoptymalizować przez konkretny zestaw filtrów czy tabel.
I to jest najtłustsza metoda, która może zeżreć najwięcej zasobów, ale twórcy tego raportu tak naprawdę nie skupili się tylko na takich standardowych elementach, jak konstrukcje aplikacji pisanych w Javie czy Java Script, jeśli chodzi o strukturę do baz danych, ale też wzięli na warsztat takie struktury jak CSS, DOM czy Cookies, gdzie od razu można by wykryć tego rodzaju nadużycia, jeśli chodzi o konsumpcję za dużego właśnie procesora, RAM-u, sieci bądź zapisu / odczytu na dysku. I to nie tylko lokalnie dla tej aplikacji, ale też jeśli np. mówimy sobie o jakichś stronach internetowych, to jest oprócz tego chociażby np. ten Cookies, gdzie raz wygenerowany jest dystrybuowany do wszystkich odbiorców.
Więc np. optymalizacja jeżeli chodzi o Cookies, byłaby taka, że nie wysyłać zawsze, albo wysyłać tylko i wyłącznie Cookies, kiedy są faktycznie potrzebne. I dzięki temu ten rozmiar wysyłanych danych jest mniejszy, a co za tym idzie, po drodze te wszystkie routery, sieci itd. mają też mniejsze obciążenie w przetworzeniu tej samej informacji albo tak naprawdę zbędnej informacji.
Więc autorzy tego raportu wzięli na warsztat wiele aspektów, rozłożyli je na elementy takie, jak łatwo da się zrealizować daną regułę i jaki ma ona wpływ na środowisko. I w pierwszej kolejności co można byłoby np. zrobić, to jeśli weźmiemy sobie na warsztat naszą javową aplikację, to można bezpośrednio zaaplikować ten zespół reguł do statycznej analizy kodu, czyli np. do SonarQube można wrzucić zestaw reguł, które od razu nam wykryją, że może i aplikacja działa okej, jest według standardowych reguł statycznej analizy kodu, ale ma jakąś strukturę, która np. będzie za dużo zużywać pamięci.
I można byłoby już zacząć optymalizować ten kod pod kątem samego wykorzystania energii, a też nie ukrywajmy, że jest to bardzo fajny element, który można zaświecić, jeżeli chodzi o konkurencję. Czyli tak naprawdę jest to coś, co można względnie łatwo zaimplementować i od razu też powiedzieć, że my już na to patrzymy pod kątem takiego zielonego IT.
👉 Czytaj/słuchaj dalej na: https://porozmawiajmyoit.pl/poit-173-tworzenie-przyjaznych-srodowisku-i-opartych-o-chmure-aplikacji-w-java/