{"id":68487,"date":"2022-03-29T13:17:50","date_gmt":"2022-03-29T11:17:50","guid":{"rendered":"https:\/\/fotc.com\/?p=68487"},"modified":"2023-11-27T09:43:31","modified_gmt":"2023-11-27T08:43:31","slug":"wydajnosc-aplikacji-mobilnej-webowej-infrastruktura","status":"publish","type":"post","link":"https:\/\/fotc.com\/pl\/blog\/wydajnosc-aplikacji-mobilnej-webowej-infrastruktura\/","title":{"rendered":"Wydajno\u015b\u0107 aplikacji mobilnej i webowej. Jaki wp\u0142yw ma infrastruktura?"},"content":{"rendered":"\n
Wydajno\u015b\u0107 aplikacji mobilnej lub webowej pozostawia wiele do \u017cyczenia? Mo\u017ce to wynika\u0107 z b\u0142\u0119d\u00f3w po stronie infrastruktury. Sprawd\u017a, jak dzi\u0119ki rozwi\u0105zaniom chmurowym mo\u017cesz zoptymalizowa\u0107 zaplecze swoich us\u0142ug i zwi\u0119kszy\u0107 ich szybko\u015b\u0107.<\/p>\n\n\n\n
Lawinowo ro\u015bnie liczba danych, jak\u0105 przepuszczamy ka\u017cdego dnia przez nasze telefony i komputery. Coraz cz\u0119\u015bciej oczekujemy dost\u0119pu do informacji w czasie rzeczywistym. W takich okoliczno\u015bciach nawet najlepiej zaprojektowana aplikacja mobilna i webowa mo\u017ce do\u015bwiadczy\u0107 chwilowych problem\u00f3w z wydajno\u015bci\u0105. Poza optymalizacj\u0105 kodu aplikacji, warto zwr\u00f3ci\u0107 uwag\u0119 na rozwi\u0105zania w zakresie infrastruktury<\/strong>, na kt\u00f3rej utrzymywany jest dany produkt.<\/p>\n\n\n\n O sukcesie aplikacji mobilnych i webowych decyduje szereg czynnik\u00f3w, ale jeden z kluczowych stanowi ich wydajno\u015b\u0107. Wed\u0142ug bada\u0144<\/a> prowadzonych w ostatnich latach przez Google, r\u00f3\u017cnica zaledwie dw\u00f3ch sekund w czasie \u0142adowania aplikacji zwi\u0119ksza tzw. wsp\u00f3\u0142czynnik odrzuce\u0144 (bounce rate) do a\u017c 32%. Ka\u017cda kolejna sekunda zw\u0142oki powoduje, \u017ce wi\u0119ksza liczba u\u017cytkownik\u00f3w ju\u017c do takiej aplikacji nie wr\u00f3ci.<\/p>\n\n\n\n Statystycznie 3 do 4 sekund na pe\u0142ne za\u0142adowanie si\u0119 aplikacji webowej czy mobilnej jest dla nas akceptowalne<\/strong>. Cz\u0119sto nie mamy jednak wiedzy o tym, dlaczego to faktycznie trwa tyle czasu. Widzimy tylko graficzny interfejs u\u017cytkownika (graphical user interface, w skr\u00f3cie GUI). Okre\u015bla si\u0119 go r\u00f3wnie\u017c mianem warstwy prezentacyjnej<\/strong> (presentation layer), kt\u00f3ra jest najbli\u017cszej u\u017cytkownika ko\u0144cowego. W architekturze aplikacji jest ona na najwy\u017cszym poziomie.<\/p>\n\n\n\n Tymczasem pod spodem w samej aplikacji odbywa si\u0119 szereg proces\u00f3w zwi\u0105zanych z tzw. warstw\u0105 logiki<\/strong> (logic layer) oraz warstw\u0105 danych<\/strong> (data layer). Pierwsza z nich reaguje na konkretne zachowania u\u017cytkownika (np. klikni\u0119cie przycisku na ekranie) oraz definiuje dzia\u0142anie podstawowych funkcji. Druga za\u015b, stanowi zaplecze do przechowywania informacji niezb\u0119dnych do przetwarzania w danym momencie. Stworzenie interakcji mi\u0119dzy poszczeg\u00f3lnymi warstwami to dopiero po\u0142owa sukcesu. <\/p>\n\n\n\n Trzeba te\u017c pami\u0119ta\u0107, \u017ce w tle aplikacja mobilna lub webowa cz\u0119sto komunikuje si\u0119 przynajmniej z kilkoma miejscami w internecie. To mo\u017ce by\u0107 serwer WWW<\/strong>, serwer aplikacji<\/strong>, baza danych<\/strong> (jedna lub kilka), a czasem te\u017c osobny serwer dla plik\u00f3w multimedialnych<\/strong>. Je\u015bli chcesz wysy\u0142a\u0107 u\u017cytkownikowi powiadomienia typu push, r\u00f3wnie\u017c tym zajmuje si\u0119 osobna us\u0142uga. Wszystko zale\u017cy od stopnia skomplikowania aplikacji.<\/p>\n\n\n\n Gdy jeszcze dorzucimy do tego funkcj\u0119 komunikacji mi\u0119dzy u\u017cytkownikami oraz zaawansowan\u0105 analityk\u0119 szybko oka\u017ce si\u0119, \u017ce dob\u00f3r architektury aplikacji ma kluczowe znaczenie dla jej wydajno\u015bci.<\/p>\n\n\n\n Je\u015bli aplikacja zyskuje na popularno\u015bci i chce z niej korzysta\u0107 wi\u0119ksza liczba u\u017cytkownik\u00f3w, mog\u0105 pojawi\u0107 si\u0119 problemy z wydajno\u015bci\u0105. Przeci\u0105\u017cony serwer nie jest w stanie obs\u0142u\u017cy\u0107 wszystkich zapyta\u0144 na czas. Musimy zatem zwi\u0119kszy\u0107 mo\u017cliwo\u015bci tzw. backendu, czyli zaplecza dla aplikacji. Mo\u017cna tego dokona\u0107 na dwa sposoby. <\/p>\n\n\n\n Pierwszy z nich zak\u0142ada rozbudow\u0119 takiego serwera (m.in. przez do\u0142o\u017cenie pami\u0119ci operacyjnej lub zwi\u0119kszenie liczby procesor\u00f3w). Proces ten okre\u015blamy jako skalowanie pionowe<\/strong> (wertykalne). Jednak w pewnym momencie mo\u017cliwo\u015bci rozbudowy pojedynczej maszyny si\u0119 sko\u0144cz\u0105. Istniej\u0105 limity dok\u0142adania pami\u0119ci i rozbudowy pojedynczej maszyny. W drugim scenariuszu stawiamy dodatkowe serwery, kt\u00f3re zwi\u0119kszaj\u0105 og\u00f3ln\u0105 pul\u0119 dost\u0119pnych zasob\u00f3w. Operacj\u0119 t\u0119 nazywamy skalowaniem poziomym<\/strong> (horyzontalnym). Oba rodzaje skalowania mo\u017cna stosowa\u0107 r\u00f3wnolegle.<\/p>\n\n\n\n Je\u015bli zwi\u0119kszymy liczb\u0119 serwer\u00f3w musimy pomy\u015ble\u0107 o rozdzieleniu ruchu na poszczeg\u00f3lne maszyny i zbalansowaniu obci\u0105\u017cenia. Tym zajmuje si\u0119 load balancer<\/strong>. Nie tylko pozwala on przekierowa\u0107 ruch na serwer bli\u017cszy lokalizacji u\u017cytkownika aplikacji, ale pilnowa\u0107 te\u017c okre\u015blonego poziomu obci\u0105\u017cenia, po przekroczeniu kt\u00f3rego nale\u017cy wykorzysta\u0107 inne maszyny. Load balancing mo\u017ce dzia\u0142a\u0107 lokalnie w ramach jednej strefy geograficznej lub globalnie. Przyda si\u0119 w sytuacji gdy jedna z maszyn ulegnie awarii. Load balancer automatycznie prze\u0142\u0105czy ruch na pozosta\u0142e serwery w sieci. <\/p>\n\n\n\n Globaln\u0105 dystrybucj\u0105 danych, aby by\u0142y one bli\u017cej u\u017cytkownika zajmuje si\u0119 us\u0142uga CDN (Content Delivery Network)<\/strong>. To rozproszona po ca\u0142ym \u015bwiecie sie\u0107 serwer\u00f3w przechowuj\u0105cych kopie najcz\u0119\u015bciej wykorzystywanych element\u00f3w aplikacji. Szczeg\u00f3lnie chodzi tu o du\u017ce pliki multimedialne, kt\u00f3rych ka\u017cdorazowe przesy\u0142anie przez sie\u0107 mog\u0142oby zaj\u0105\u0107 wi\u0119cej czasu.<\/p>\n\n\n\n Us\u0142ug\u0119 CDN mo\u017cna potraktowa\u0107 jako odpowiednik pami\u0119ci cache w przegl\u0105darce internetowej, dzi\u0119ki kt\u00f3rej najcz\u0119\u015bciej odwiedzane strony WWW \u0142aduj\u0105 si\u0119 szybciej. Przegl\u0105darka nie musi bowiem pobiera\u0107 ca\u0142ej strony za ka\u017cdym razem z odleg\u0142ego o setki lub tysi\u0105ce kilometr\u00f3w serwera. Mo\u017ce pobra\u0107 szybciej kopi\u0119 plik\u00f3w z serwera po\u0142o\u017conego najbli\u017cej urz\u0105dzenia mobilnego lub komputera.<\/p>\n\n\n\n Rosn\u0105ca liczba element\u00f3w tej backendowej uk\u0142adanki mo\u017ce przera\u017ca\u0107, ale mamy na to sensowne rozwi\u0105zanie. Infrastruktura chmurowa Google Cloud pomo\u017ce spi\u0105\u0107 wszystko w jedn\u0105 sensown\u0105 ca\u0142o\u015b\u0107, zachowuj\u0105c najwy\u017csz\u0105 mo\u017cliw\u0105 wydajno\u015b\u0107<\/strong>. Google Cloud Platform to niemal 200 gotowych us\u0142ug chmurowych zaprojektowanych pod k\u0105tem r\u00f3\u017cnych zastosowa\u0144. <\/p>\n\n\n\n Przede wszystkim uwalnia tw\u00f3rc\u00f3w aplikacji mobilnych i webowych od dbania o kondycj\u0119 infrastruktury i pozwala im skupi\u0107 si\u0119 na tworzeniu produktu. Oczywi\u015bcie, nadal musz\u0105 oni stosowa\u0107 si\u0119 do dobrych praktyk z zakresu administracji i kontroli dost\u0119pu. Piszemy o tym szerzej w artykule: Shared responsibility model \u2013 za co odpowiada dostawca, a za co u\u017cytkownik chmury?<\/a><\/p>\n\n\n\n Na Google Cloud Platform<\/a> (w skr\u00f3cie GCP) sk\u0142ada si\u0119 rozproszona po ca\u0142ym \u015bwiecie sie\u0107 centr\u00f3w danych, na bazie kt\u00f3rych dost\u0119pny jest szeroki wachlarz gotowych produkt\u00f3w – w tym maszyn wirtualnych, baz danych (SQL i NoSQL), platform do tworzenia i wdra\u017cania aplikacji, us\u0142ug balansowania ruchu, serwer\u00f3w CDN czy narz\u0119dzi do zarz\u0105dzania ruchem w sieci. Dzi\u0119ki Google Cloud Platform mo\u017cesz te\u017c przeprowadzi\u0107 testy wydajno\u015bciowe i testy obci\u0105\u017ceniowe swoich aplikacji. <\/p>\n\n\n\n Us\u0142ugi wchodz\u0105ce w sk\u0142ad GCP – Cloud Load Balancing<\/strong> oraz Cloud CDN<\/strong> – przejm\u0105 na siebie ci\u0119\u017car roz\u0142o\u017cenia ruchu pomi\u0119dzy maszynami w jednym rejonie oraz w sieci rozproszonej geograficznie. Google rozwija w\u0142asn\u0105 sie\u0107 \u015bwiat\u0142owodow\u0105, \u0142\u0105cz\u0105c\u0105 wszystkie centra danych. U\u017cytkownikom Google Cloud daje do wyboru dwie opcje transmitowania zasob\u00f3w: z wykorzystaniem sieci Google (Premium Tier<\/a>) i publicznej sieci (Standard Tier).<\/p>\n\n\n\n Wspomniane wcze\u015bniej skalowanie aplikacji webowej lub mobilnej nie wymaga modernizacji czy dokupowania fizycznych serwer\u00f3w. Opiek\u0105 nad infrastruktur\u0105 zajmuje si\u0119 dostawca chmury, w tym wypadku Google<\/strong>. <\/p>\n\n\n\n Je\u015bli Tw\u00f3j produkt wymaga wi\u0119cej zasob\u00f3w, to po uprzednim przeprowadzeniu odpowiedniej konfiguracji, ustawieniu limit\u00f3w i sposobu skalowania us\u0142ug, otrzyma je natychmiast i bez zak\u0142\u00f3ce\u0144 w pracy aplikacji (upscaling). Je\u015bli ruch spadnie chmura sama dokona skalowania w d\u00f3\u0142 (downscaling), \u017ceby zminimalizowa\u0107 koszty us\u0142ugi. Kolejn\u0105 zalet\u0105 tego rozwi\u0105zania jest system rozlicze\u0144 bazuj\u0105cy na realnym zu\u017cyciu zasob\u00f3w (w wielu us\u0142ugach GCP p\u0142acisz tylko za to, co faktycznie wykorzystasz).<\/p>\n\n\n\nDlaczego wydajno\u015b\u0107 aplikacji ma znaczenie?<\/h2>\n\n\n\n
Co si\u0119 dzieje pod mask\u0105, czyli infrastruktura dla aplikacji<\/h2>\n\n\n\n

Jak zwi\u0119kszy\u0107 wydajno\u015b\u0107 aplikacji mobilnej? <\/h2>\n\n\n\n
Dlaczego warto postawi\u0107 na infrastruktur\u0119 Google Cloud?<\/h2>\n\n\n\n
