{"id":55881,"date":"2020-01-31T00:00:00","date_gmt":"2020-01-30T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij"},"modified":"2020-02-18T14:04:02","modified_gmt":"2020-02-18T11:04:02","slug":"sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij","title":{"rendered":"Porady i \u017ar\u00f3d\u0142a informacji do tworzenia aplikacji bezserwerowych.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Porady i \u017ar\u00f3d\u0142a informacji do tworzenia aplikacji bezserwerowych.\" src=\"\/wp-content\/uploads\/2020\/01\/a29ca83a52a809d148aebbd6821d4ef9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCho\u0107 technologie serverless w ostatnich latach szybko zyskuj\u0105 na popularno\u015bci, to wci\u0105\u017c wi\u0105\u017ce si\u0119 z nimi wiele mit\u00f3w i obaw. Zale\u017cno\u015b\u0107 od dostawcy, narz\u0119dzia, zarz\u0105dzanie kosztami, zimny start, monitoring i cykl \u017cycia rozwoju \u2014 to wszystko tematy cz\u0119sto poruszane przy omawianiu technologii serverless. W tym artykule przyjrzymy si\u0119 niekt\u00f3rym z wymienionych temat\u00f3w oraz podzielimy si\u0119 wskaz\u00f3wkami i linkami do u\u017cytecznych \u017ar\u00f3de\u0142 informacji, kt\u00f3re pomog\u0105 nowicjuszom w stworzeniu pot\u0119\u017cnych, elastycznych i ekonomicznych aplikacji serverless.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Mity dotycz\u0105ce technologii serverless<\/h2>\n<p>\nWielu ludzi uwa\u017ca, \u017ce serverless i przetwarzanie danych poza serwerem (<noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/serverless.html#unpacking-faas\">Functions as a Service<\/a><\/noindex>, FaaS) to niemal to samo. Oznacza to, \u017ce r\u00f3\u017cnica nie jest zbyt du\u017ca i warto wdro\u017cy\u0107 nowo\u015b\u0107. Chocia\u017c AWS Lambda by\u0142a jednym z \u201egwiazd\u201d rozkwitu technologii serverless i jednym z najpopularniejszych element\u00f3w architektury serverless, to ta architektura to co\u015b wi\u0119cej ni\u017c FaaS.<\/p>\n<p>Podstawowa zasada technologii serverless polega na tym, \u017ce nie musisz martwi\u0107 si\u0119 o zarz\u0105dzanie i skalowanie infrastruktury; p\u0142acisz tylko za to, co wykorzystujesz. Wiele us\u0142ug spe\u0142nia te kryteria \u2014 AWS DynamoDB, S3, SNS czy SQS, Graphcool, Auth0, Now, Netlify, Firebase i wiele innych. Generalnie serverless oznacza korzystanie ze wszystkich mo\u017cliwo\u015bci oblicze\u0144 w chmurze bez potrzeby zarz\u0105dzania infrastruktur\u0105 i jej optymalizacji w celu skalowania. Oznacza to r\u00f3wnie\u017c, \u017ce bezpiecze\u0144stwo na poziomie infrastruktury przestaje by\u0107 twoim problemem, co jest ogromn\u0105 zalet\u0105, bior\u0105c pod uwag\u0119 trudno\u015bci i z\u0142o\u017cono\u015b\u0107 przestrzegania standard\u00f3w bezpiecze\u0144stwa. Wreszcie, nie musisz kupowa\u0107 infrastruktury, kt\u00f3ra jest ci udost\u0119pniana.<\/p>\n<p>Serverless mo\u017cna uzna\u0107 za \u201estan umys\u0142u\u201d: okre\u015blon\u0105 mentalno\u015b\u0107 w projektowaniu rozwi\u0105za\u0144. Unikaj podej\u015b\u0107, kt\u00f3re wymagaj\u0105 utrzymania jakiejkolwiek infrastruktury. Podej\u015bcie serverless pozwala nam skupi\u0107 si\u0119 na zadaniach, kt\u00f3re maj\u0105 bezpo\u015bredni wp\u0142yw na projekt i przynosz\u0105 korzy\u015bci naszym u\u017cytkownikom: tworzymy solidn\u0105 logik\u0119 biznesow\u0105, rozwijamy interfejsy u\u017cytkownika oraz opracowujemy elastyczne i niezawodne API.<\/p>\n<p>Na przyk\u0142ad, je\u015bli mo\u017cna unikn\u0105\u0107 zarz\u0105dzania i wsparcia platformy wyszukiwania pe\u0142notekstowego, tak w\u0142a\u015bnie zrobimy. Takie podej\u015bcie do budowania aplikacji mo\u017ce znacznie przyspieszy\u0107 wprowadzenie produktu na rynek, poniewa\u017c nie trzeba ju\u017c my\u015ble\u0107 o zarz\u0105dzaniu skomplikowan\u0105 infrastruktur\u0105. Uwolnij si\u0119 od obowi\u0105zk\u00f3w i koszt\u00f3w zwi\u0105zanych z zarz\u0105dzaniem infrastruktur\u0105 i skup si\u0119 na tworzeniu aplikacji i us\u0142ug, kt\u00f3re s\u0105 potrzebne Twoim klientom. Patrick Debois nazwa\u0142 to podej\u015bcie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/jedi4ever\/from-serverless-to-service-full-how-the-role-of-devops-is-evolving?ref=https:\/\/twitter.com\/i\/cards\/tfw\/v1\/736144044112384000?cardname=player&amp;earned=true&amp;lang=en&amp;card_height=130\">\u2018servicefull\u2019<\/a><\/noindex>, ten termin jest przyj\u0119ty w spo\u0142eczno\u015bci serverless. Funkcje powinny by\u0107 postrzegane jako pomost dla us\u0142ug w postaci wdra\u017canych modu\u0142\u00f3w (zamiast wdra\u017cania ca\u0142ej biblioteki lub aplikacji internetowej). Zapewnia to niesamowit\u0105 granularno\u015b\u0107 zarz\u0105dzania wdro\u017ceniami i zmianami w aplikacji. Je\u015bli nie mo\u017cesz w ten spos\u00f3b wdra\u017ca\u0107 funkcji, mo\u017ce to sugerowa\u0107, \u017ce funkcje wykonuj\u0105 zbyt wiele zada\u0144 i powinny zosta\u0107 zrefaktoryzowane.<\/p>\n<p>Niekt\u00f3rych niepokoi zale\u017cno\u015b\u0107 od dostawcy podczas tworzenia aplikacji w chmurze. Podobnie jest w przypadku technologii serverless, i ma\u0142o prawdopodobne, \u017ce jest to wynik b\u0142\u0119dnego przekonania. Z naszych do\u015bwiadcze\u0144 wynika, \u017ce tworzenie aplikacji serverless na AWS w po\u0142\u0105czeniu z mo\u017cliwo\u015bci\u0105 AWS Lambda integracji z innymi us\u0142ugami AWS to cz\u0119\u015bciowo to, co tworzy zalety architektur serverless. To dobry przyk\u0142ad synergii, gdzie efekt z po\u0142\u0105czenia jest wi\u0119kszy ni\u017c suma sk\u0142adnik\u00f3w. Staraj\u0105c si\u0119 unika\u0107 zale\u017cno\u015bci od dostawcy, mo\u017cna napotka\u0107 jeszcze wi\u0119ksze problemy. Pracuj\u0105c z kontenerami, \u0142atwiej jest zarz\u0105dza\u0107 w\u0142asnym poziomem abstrakcji mi\u0119dzy dostawcami chmury. Ale w przypadku rozwi\u0105za\u0144 serverless wysi\u0142ki nie b\u0119d\u0105 si\u0119 op\u0142aca\u0107, szczeg\u00f3lnie je\u015bli od samego pocz\u0105tku uwzgl\u0119dnia si\u0119 op\u0142acalno\u015b\u0107. Wa\u017cne jest, aby dowiedzie\u0107 si\u0119, jak dostawcy zapewniaj\u0105 \u015bwiadczenie us\u0142ug. Niekt\u00f3re specjalistyczne us\u0142ugi zale\u017c\u0105 od punkt\u00f3w integracji z innymi dostawcami i mog\u0105 z pude\u0142ka oferowa\u0107 mo\u017cliwo\u015b\u0107 pod\u0142\u0105czenia w stylu plug-and-play. \u0141atwiej jest wywo\u0142a\u0107 Lambd\u0119 z ko\u0144cowego punktu API gateway ni\u017c zarejestrowa\u0107 \u017c\u0105danie do jakiego\u015b kontenera lub instancji EC2. Graphcool zapewnia prost\u0105 konfiguracj\u0119 za pomoc\u0105 Auth0, co jest prostsze ni\u017c u\u017cycie zewn\u0119trznych \u015brodk\u00f3w autoryzacji.<\/p>\n<p>Wyb\u00f3r odpowiedniego dostawcy dla Twojej aplikacji serverless to decyzja na poziomie architektury. Tworz\u0105c aplikacj\u0119, nie zak\u0142adasz, \u017ce kiedykolwiek wr\u00f3cisz do zarz\u0105dzania serwerami. Wyb\u00f3r dostawcy chmurowego nie r\u00f3\u017cni si\u0119 od wyboru u\u017cywania kontener\u00f3w, baz danych, czy nawet j\u0119zyka programowania. <\/p>\n<p>Przemy\u015bl:<\/p>\n<ul>\n<li>Jakie us\u0142ugi s\u0105 Ci potrzebne i dlaczego. \n<\/li>\n<li>Jakie us\u0142ugi oferuj\u0105 dostawcy chmur i jak mo\u017cna je zintegrowa\u0107 za pomoc\u0105 wybranego rozwi\u0105zania FaaS. \n<\/li>\n<li>Jakie j\u0119zyki programowania s\u0105 wspierane (z dynamicznym lub statycznym typowaniem, kompilowane lub interpretowane, jakie s\u0105 benchmarki, jaka wydajno\u015b\u0107 przy zimnym starcie, jaka jest ekosystem open source itp.).\n<\/li>\n<li>Jakie s\u0105 Twoje wymagania dotycz\u0105ce bezpiecze\u0144stwa (SLA, 2FA, OAuth, HTTPS, SSL itd.).\n<\/li>\n<li>Jak zarz\u0105dza\u0107 swoim CI\/CD i cyklami rozwoju oprogramowania.\n<\/li>\n<li>Z jakich rozwi\u0105za\u0144 klasy infrastructure-as-code mo\u017cesz skorzysta\u0107.\n<\/li>\n<\/ul>\n<p>\nJe\u015bli rozwijasz istniej\u0105c\u0105 aplikacj\u0119 i stopniowo dodajesz funkcje bezserwerowe, mo\u017ce to nieco ograniczy\u0107 dost\u0119pne mo\u017cliwo\u015bci. Jednak prawie wszystkie technologie bezserwerowe zapewniaj\u0105 jakie\u015b API (przez REST lub kolejki komunikat\u00f3w), kt\u00f3re umo\u017cliwiaj\u0105 rozszerzanie niezale\u017cnie od rdzenia aplikacji i z \u0142atw\u0105 integracj\u0105. Szukaj us\u0142ug z zrozumia\u0142ymi API, dobr\u0105 dokumentacj\u0105 i siln\u0105 spo\u0142eczno\u015bci\u0105, a na pewno si\u0119 nie pomylisz. \u0141atwo\u015b\u0107 integracji cz\u0119sto mo\u017ce by\u0107 kluczow\u0105 metryk\u0105 i prawdopodobnie jest to jeden z g\u0142\u00f3wnych powod\u00f3w sukcesu AWS od momentu wydania Lambda w 2015 roku.<\/p>\n<h2>Kiedy bezserwerowo\u015b\u0107 jest przydatna<\/h2>\n<p>\nTechnologie bezserwerowe mo\u017cna zastosowa\u0107 praktycznie wsz\u0119dzie. Jednak ich zalety nie ograniczaj\u0105 si\u0119 tylko do sposob\u00f3w zastosowania. Pr\u00f3g wej\u015bcia do chmur obliczeniowych jest dzisiaj tak niski w\u0142a\u015bnie dzi\u0119ki technologiom bezserwerowym. Je\u015bli deweloperzy maj\u0105 pomys\u0142, ale nie wiedz\u0105, jak zarz\u0105dza\u0107 infrastruktur\u0105 chmurow\u0105 i optymalizowa\u0107 koszty, nie musz\u0105 szuka\u0107 in\u017cyniera do tego zadania. Je\u015bli start-up chce stworzy\u0107 platform\u0119, ale obawia si\u0119, \u017ce koszty mog\u0105 wymkn\u0105\u0107 si\u0119 spod kontroli, mo\u017ce w \u0142atwy spos\u00f3b skorzysta\u0107 z rozwi\u0105za\u0144 bezserwerowych.<\/p>\n<p>Dzi\u0119ki oszcz\u0119dno\u015bciom koszt\u00f3w i \u0142atwo\u015bci skalowania, rozwi\u0105zania bezserwerowe s\u0105 r\u00f3wnie u\u017cyteczne zar\u00f3wno dla system\u00f3w wewn\u0119trznych, jak i zewn\u0119trznych, a\u017c po aplikacje internetowe z milionami u\u017cytkownik\u00f3w. Koszty mierzone s\u0105 raczej nie w euro, lecz w centach. Wynajem najprostszej instancji AWS EC2 (t1.micro) na miesi\u0105c kosztuje 15 \u20ac, nawet je\u015bli nic z ni\u0105 nie robisz (kto nigdy nie zapomnia\u0142 wy\u0142\u0105czy\u0107?!). Dla por\u00f3wnania, aby osi\u0105gn\u0105\u0107 taki poziom koszt\u00f3w w tym samym okresie, musisz uruchomi\u0107 Lambda o rozmiarze 512 MB przez 1 sekund\u0119 oko\u0142o 3 miliony razy. A je\u015bli nie korzystasz z tej funkcji, to nic nie p\u0142acisz.<\/p>\n<p>Poniewa\u017c technologia bezserwerowa zale\u017cy g\u0142\u00f3wnie od zdarze\u0144, mo\u017cna stosunkowo \u0142atwo doda\u0107 infrastruktur\u0119 bezserwerow\u0105 do starych system\u00f3w. Na przyk\u0142ad, za pomoc\u0105 AWS S3, Lambda i Kinesis mo\u017cesz stworzy\u0107 serwis analityczny dla starego systemu detalicznego, kt\u00f3ry b\u0119dzie odbiera\u0107 dane przez API.<\/p>\n<p>Wi\u0119kszo\u015b\u0107 platform serverless obs\u0142uguje r\u00f3\u017cne j\u0119zyki. Najcz\u0119\u015bciej s\u0105 to Python, JavaScript, C#, Java i Go. Zazwyczaj we wszystkich j\u0119zykach nie ma \u017cadnych ogranicze\u0144 dotycz\u0105cych u\u017cycia bibliotek, wi\u0119c mo\u017cesz korzysta\u0107 z ulubionych bibliotek open source. Nale\u017cy jednak unika\u0107 nadmiernego u\u017cycia zale\u017cno\u015bci, aby Twoje funkcje dzia\u0142a\u0142y optymalnie i nie traci\u0142y korzy\u015bci z ogromnej skalowalno\u015bci aplikacji serverless. Im wi\u0119cej pakiet\u00f3w trzeba za\u0142adowa\u0107 do kontenera, tym d\u0142u\u017cej trwa cold start.<\/p>\n<p>Cold start to sytuacja, gdy najpierw trzeba zainicjowa\u0107 kontener, \u015brodowisko wykonawcze i obs\u0142ug\u0119 b\u0142\u0119d\u00f3w, zanim zaczniesz z nich korzysta\u0107. Z tego powodu op\u00f3\u017anienie w wykonywaniu funkcji mo\u017ce wynosi\u0107 do 3 sekund, co nie jest najlepsz\u0105 opcj\u0105 dla niecierpliwych u\u017cytkownik\u00f3w. Jednak cold starty wyst\u0119puj\u0105 przy pierwszym wywo\u0142aniu po kilku minutach bezczynno\u015bci funkcji. Wiele os\u00f3b uznaje to za niewielk\u0105 niedogodno\u015b\u0107, kt\u00f3r\u0105 mo\u017cna obej\u015b\u0107, regularnie pinguj\u0105c funkcj\u0119, aby utrzyma\u0107 j\u0105 w trybie gotowo\u015bci. Albo w og\u00f3le ignoruj\u0105 ten aspekt.<\/p>\n<p>Chocia\u017c AWS wprowadzi\u0142o<noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/rds\/aurora\/serverless\/\"> serverless baz\u0119 danych SQL Serverless Aurora<\/a><\/noindex>, to jednak bazy danych SQL nie s\u0105 idealne do tego zastosowania, poniewa\u017c podczas realizacji transakcji polegaj\u0105 na po\u0142\u0105czeniach, kt\u00f3re mog\u0105 szybko sta\u0107 si\u0119 w\u0105skim gard\u0142em przy du\u017cym ruchu w AWS Lambda. Tak, deweloperzy ci\u0105gle poprawiaj\u0105 Serverless Aurora i warto j\u0105 przetestowa\u0107, jednak obecnie dla system\u00f3w serverless znacznie lepiej nadaj\u0105 si\u0119 rozwi\u0105zania NoSQL, takie jak<noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/dynamodb\/\"> DynamoDB<\/a><\/noindex>. Niemniej jednak, sytuacja ta z pewno\u015bci\u0105 wkr\u00f3tce si\u0119 zmieni.<\/p>\n<p>Narz\u0119dzia tak\u017ce nak\u0142adaj\u0105 wiele ogranicze\u0144, szczeg\u00f3lnie w obszarze lokalnego testowania. Chocia\u017c istniej\u0105 rozwi\u0105zania takie jak Docker-Lambda, DynamoDB Local i LocalStack, to wymagaj\u0105 one \u017cmudnej pracy i znacznej konfiguracji. Niemniej jednak, wszystkie te projekty s\u0105 aktywnie rozwijane, wi\u0119c to tylko kwestia czasu, kiedy narz\u0119dzia osi\u0105gn\u0105 potrzebny nam poziom.<\/p>\n<h2>Wp\u0142yw technologii serverless na cykl rozwoju<\/h2>\n<p>\nPoniewa\u017c Twoja infrastruktura jest po prostu konfiguracj\u0105, mo\u017cesz wdro\u017cy\u0107 kod za pomoc\u0105 skrypt\u00f3w, na przyk\u0142ad, skrypt\u00f3w shell. Mo\u017cesz r\u00f3wnie\u017c skorzysta\u0107 z rozwi\u0105za\u0144 klasy configuration-as-code, takich jak <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/cloudformation\/\">AWS CloudFormation<\/a><\/noindex>. Chocia\u017c ta us\u0142uga nie oferuje konfiguracji we wszystkich dziedzinach, pozwala na definiowanie konkretnych zasob\u00f3w do u\u017cycia jako funkcje Lambda. To znaczy, tam, gdzie CloudFormation mo\u017ce zawie\u015b\u0107, mo\u017cesz napisa\u0107 w\u0142asny zas\u00f3b (funkcj\u0119 Lambda), kt\u00f3ry wype\u0142ni t\u0119 luk\u0119. Dzi\u0119ki temu mo\u017cesz zrobi\u0107 cokolwiek, nawet skonfigurowa\u0107 zale\u017cno\u015bci poza swoim \u015brodowiskiem AWS.<\/p>\n<p>Poniewa\u017c wszystko to jest po prostu konfiguracj\u0105, mo\u017cesz parametryzowa\u0107 swoje skrypty wdra\u017cania pod konkretne \u015brodowiska, regiony i u\u017cytkownik\u00f3w, szczeg\u00f3lnie je\u015bli stosujesz rozwi\u0105zania typu infrastructure-as-code, takie jak CloudFormation. Na przyk\u0142ad mo\u017cesz wdro\u017cy\u0107 kopi\u0119 infrastruktury dla ka\u017cdej ga\u0142\u0119zi w repozytorium, aby ca\u0142kowicie izolowanie je testowa\u0107 w trakcie rozwoju. To radykalnie przyspiesza uzyskiwanie informacji zwrotnej od programist\u00f3w, gdy chc\u0105 zrozumie\u0107, czy ich kod dzia\u0142a poprawnie w \u015brodowisku produkcyjnym. Kierownicy nie musz\u0105 martwi\u0107 si\u0119 o koszty wdro\u017cenia licznych \u015brodowisk, poniewa\u017c p\u0142ac\u0105 tylko za rzeczywiste zu\u017cycie.<\/p>\n<p>DevOps ma mniej zmartwie\u0144, poniewa\u017c musz\u0105 jedynie upewni\u0107 si\u0119, \u017ce programi\u015bci maj\u0105 poprawn\u0105 konfiguracj\u0119. Nie musz\u0105 ju\u017c zarz\u0105dza\u0107 instancjami, load balancerami czy grupami bezpiecze\u0144stwa. Dlatego coraz cz\u0119\u015bciej u\u017cywa si\u0119 terminu NoOps, chocia\u017c wci\u0105\u017c wa\u017cne jest, aby umie\u0107 skonfigurowa\u0107 infrastruktur\u0119, zw\u0142aszcza gdy mowa o konfiguracji IAM i optymalizacji zasob\u00f3w w chmurze.<\/p>\n<p>Istnieje wiele pot\u0119\u017cnych narz\u0119dzi do monitorowania i wizualizacji, takich jak Epsagon, Thundra, Dashbird i IOPipe. Umo\u017cliwiaj\u0105 one \u015bledzenie bie\u017c\u0105cego stanu aplikacji bezserwerowych, dostarczaj\u0105 logi i \u015blady, rejestruj\u0105 metryki wydajno\u015bci oraz w\u0105skie gard\u0142a architektury, przeprowadzaj\u0105 analizy i prognozowanie wydatk\u00f3w oraz wiele wi\u0119cej. Nie tylko dostarczaj\u0105 in\u017cynierom DevOps, programistom i architektom wyczerpuj\u0105cy wgl\u0105d w dzia\u0142anie aplikacji, ale tak\u017ce pozwalaj\u0105 kierownikom \u015bledzi\u0107 sytuacj\u0119 w czasie rzeczywistym, z sekundenowymi kosztami na zasoby i prognozowaniem wydatk\u00f3w. Organizacja czego\u015b takiego w zarz\u0105dzanej infrastrukturze jest znacznie trudniejsza.<\/p>\n<p>Projektowanie aplikacji bezserwerowych jest znacznie prostsze, poniewa\u017c nie musisz wdra\u017ca\u0107 serwer\u00f3w internetowych, zarz\u0105dza\u0107 maszynami wirtualnymi ani kontenerami, naprawia\u0107 serwer\u00f3w, system\u00f3w operacyjnych, bram internetowych itp. Abstrakcja od wszystkich tych obowi\u0105zk\u00f3w pozwala architekturze bezserwerowej skupi\u0107 si\u0119 na najwa\u017cniejszym \u2013 na spe\u0142nianiu potrzeb biznesowych i klient\u00f3w.<\/p>\n<p>Chocia\u017c narz\u0119dzia mog\u0142yby by\u0107 lepsze (s\u0105 ulepszane z dnia na dzie\u0144), programi\u015bci mog\u0105 skoncentrowa\u0107 si\u0119 na wdra\u017caniu logiki biznesowej i optymalnym rozdzielaniu z\u0142o\u017cono\u015bci aplikacji pomi\u0119dzy r\u00f3\u017cnymi us\u0142ugami w ramach architektury. Zarz\u0105dzanie aplikacjami bezserwerowymi odbywa si\u0119 w oparciu o zdarzenia i jest abstrahowane przez dostawc\u0119 chmurowego (na przyk\u0142ad, SQS, zdarzenia S3 lub strumienie DynamoDB). Dlatego wystarczy, \u017ce programi\u015bci napisz\u0105 logik\u0119 biznesow\u0105, aby zareagowa\u0107 na okre\u015blone zdarzenia, a nie musz\u0105 si\u0119 martwi\u0107 o to, jak najlepiej wdro\u017cy\u0107 bazy danych i kolejki wiadomo\u015bci, ani jak zorganizowa\u0107 optymalne operacje z danymi w okre\u015blonych fizycznych magazynach.<\/p>\n<p>Kod mo\u017cna wykonywa\u0107 i debugowa\u0107 lokalnie, tak jak w ka\u017cdym procesie rozwoju. Testowanie modu\u0142owe pozostaje takie samo. Mo\u017cliwo\u015b\u0107 wdra\u017cania ca\u0142ej infrastruktury aplikacji za pomoc\u0105 konfigurowalnej konfiguracji stosu pozwala programistom szybko uzyska\u0107 wa\u017cne opinie, nie martwi\u0105c si\u0119 o koszty testowania lub wp\u0142yw na drogie zarz\u0105dzane \u015brodowiska.<\/p>\n<h2>Narz\u0119dzia i metody budowy aplikacji bezserwerowych<\/h2>\n<p>\nNie ma konkretnego sposobu na budow\u0119 aplikacji bezserwerowych. R\u00f3wnie\u017c zestawu us\u0142ug do tego zadania. Liderem w\u015br\u00f3d zaawansowanych rozwi\u0105za\u0144 bezserwerowych obecnie jest AWS, jednak warto r\u00f3wnie\u017c zwr\u00f3ci\u0107 uwag\u0119 na <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/gcp\">Google Cloud<\/a><\/noindex>,<noindex><a rel=\"nofollow\" href=\"https:\/\/zeit.co\/\"> Zeit<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/firebase.google.com\/\">Firebase<\/a><\/noindex>. Je\u015bli korzystasz z AWS, to jako podej\u015bcie do budowy aplikacji mo\u017cna zarekomendowa\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/serverless\/sam\/\">Serverless Application Model<\/a><\/noindex> (SAM), zw\u0142aszcza przy u\u017cyciu C#, poniewa\u017c w Visual Studio dost\u0119pne s\u0105 \u015bwietne narz\u0119dzia. SAM CLI mo\u017ce robi\u0107 to samo, co Visual Studio, wi\u0119c nic nie stracisz, je\u015bli przejdziesz na inny IDE lub edytor tekstu. Oczywi\u015bcie, SAM dzia\u0142a r\u00f3wnie\u017c z innymi j\u0119zykami.<\/p>\n<p>Je\u015bli piszesz w innych j\u0119zykach, to Serverless Framework to doskona\u0142e narz\u0119dzie open source, kt\u00f3re pozwala na konfiguracj\u0119 czegokolwiek przy u\u017cyciu bardzo pot\u0119\u017cnych plik\u00f3w konfiguracyjnych YAML. Serverless Framework obs\u0142uguje tak\u017ce r\u00f3\u017cne us\u0142ugi chmurowe, wi\u0119c polecamy je tym, kt\u00f3rzy szukaj\u0105 rozwi\u0105zania wielochmurowego. Ma ogromn\u0105 spo\u0142eczno\u015b\u0107, kt\u00f3ra stworzy\u0142a mn\u00f3stwo wtyczek do wszelkich potrzeb. <\/p>\n<p>Do testowania lokalnego idealnie nadaj\u0105 si\u0119 narz\u0119dzia open source takie jak Docker-Lambda, Serverless Local, DynamoDB Local i LocalStack. Technologie bezserwerowe s\u0105 jeszcze w wczesnej fazie rozwoju, podobnie jak narz\u0119dzia do nich, wi\u0119c przy konfigurowaniu skomplikowanych scenariuszy testowych b\u0119dziesz musia\u0142 si\u0119 natrudzi\u0107. Jednak uruchomienie stosu w \u015brodowisku i przetestowanie go jest niezwykle tanie. Nie musisz robi\u0107 dok\u0142adnej lokalnej kopii \u015brodowisk chmurowych.<\/p>\n<p>Aby zmniejszy\u0107 rozmiar wdra\u017canych paczek i przyspieszy\u0107 \u0142adowanie, u\u017cyj AWS Lambda Layers. <\/p>\n<p>U\u017cywaj odpowiednich j\u0119zyk\u00f3w programowania do konkretnych zada\u0144. R\u00f3\u017cne j\u0119zyki maj\u0105 swoje zalety i wady. Istnieje wiele benchmark\u00f3w, ale JavaScript, Python i C# (.NET Core 2.1+) s\u0105 liderami pod wzgl\u0119dem wydajno\u015bci AWS Lambda. Niedawno w AWS Lambda pojawi\u0142 si\u0119 Runtime API, kt\u00f3ry pozwala na okre\u015blenie preferowanego j\u0119zyka i \u015brodowiska wykonawczego, wi\u0119c eksperymentuj.<\/p>\n<p>Utrzymuj ma\u0142y rozmiar paczek do wdro\u017cenia. Im mniejsze, tym szybciej si\u0119 \u0142aduj\u0105. Unikaj u\u017cywania du\u017cych bibliotek, zw\u0142aszcza je\u015bli korzystasz tylko z kilku ich funkcji. Je\u015bli programujesz w JavaScript, u\u017cywaj narz\u0119dzi do pakowania, takich jak Webpack, aby zoptymalizowa\u0107 budow\u0119 i uwzgl\u0119dni\u0107 tylko to, co jest naprawd\u0119 potrzebne. W .NET Core 3.0 wprowadzono QuickJit i Tiered Compilation, kt\u00f3re poprawiaj\u0105 wydajno\u015b\u0107 i znacznie pomagaj\u0105 przy zimnych uruchomieniach.<\/p>\n<p>Zale\u017cno\u015b\u0107 funkcji bezserwerowych od zdarze\u0144 mo\u017ce na pocz\u0105tku utrudnia\u0107 koordynacj\u0119 logiki biznesowej. W tym kontek\u015bcie niezwykle przydatne mog\u0105 by\u0107 kolejki wiadomo\u015bci oraz automaty stan\u00f3w. Funkcje Lambda mog\u0105 wywo\u0142ywa\u0107 si\u0119 nawzajem, ale r\u00f3b to tylko wtedy, gdy nie oczekujesz odpowiedzi (\"strzel i zapomnij\") \u2014 nie chcesz przecie\u017c p\u0142aci\u0107 za czekanie na zako\u0144czenie innej funkcji. Kolejki wiadomo\u015bci s\u0105 pomocne w oddzielaniu cz\u0119\u015bci logiki biznesowej, zarz\u0105dzaniu w\u0105skimi gard\u0142ami aplikacji oraz przetwarzaniu transakcji (przy pomocy kolejek FIFO). Funkcje AWS Lambda mog\u0105 by\u0107 powi\u0105zane z kolejkami SQS jako kolejki \"utkwionych\" wiadomo\u015bci, kt\u00f3re \u015bledz\u0105 b\u0142\u0119dne wiadomo\u015bci do p\u00f3\u017aniejszej analizy. Funkcje AWS Step Functions (automaty stan\u00f3w) s\u0105 bardzo pomocne w zarz\u0105dzaniu z\u0142o\u017conymi procesami wymagaj\u0105cymi tworzenia \u0142a\u0144cuch\u00f3w funkcji. Zamiast tego, aby funkcja Lambda wywo\u0142ywa\u0142a inn\u0105 funkcj\u0119, Step Functions mog\u0105 koordynowa\u0107 przej\u015bcia stan\u00f3w, przekazywa\u0107 dane mi\u0119dzy funkcjami i zarz\u0105dza\u0107 globalnym stanem funkcji. Umo\u017cliwia to okre\u015blenie warunk\u00f3w ponownych pr\u00f3b lub tego, co nale\u017cy zrobi\u0107 w przypadku wyst\u0105pienia konkretnego b\u0142\u0119du \u2014 w okre\u015blonych warunkach bardzo pot\u0119\u017cne narz\u0119dzie.<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nW ostatnich latach technologie bezserwerowe rozwijaj\u0105 si\u0119 w niewiarygodnym tempie. Z t\u0105 zmian\u0105 paradygmatu wi\u0105\u017c\u0105 si\u0119 pewne nieporozumienia. Dzi\u0119ki abstrahowaniu infrastruktury i zarz\u0105dzaniu skalowalno\u015bci\u0105, rozwi\u0105zania bezserwerowe oferuj\u0105 znaczne korzy\u015bci: od uproszczenia proces\u00f3w rozwoju i DevOps, po znaczne obni\u017cenie koszt\u00f3w operacyjnych.<br \/>\nI chocia\u017c podej\u015bcie bezserwerowe nie jest pozbawione wad, istniej\u0105 niezawodne metody i wzorce projektowania, kt\u00f3re pozwalaj\u0105 tworzy\u0107 odporne aplikacje bezserwerowe lub integrowa\u0107 elementy bezserwerowe z istniej\u0105cymi architekturami.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nix\/blog\/486180\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0425\u043e\u0442\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c, \u0441 \u043d\u0438\u043c\u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u0438 \u043e\u043f\u0430\u0441\u0435\u043d\u0438\u0439. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0432\u0435\u043d\u0434\u043e\u0440\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c\u0438, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0442\u0435\u043c\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0442\u0435\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u043c\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":55882,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55881","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0425\u043e\u0442\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0425\u043e\u0442\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-30T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:02+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Porady i \u017ar\u00f3d\u0142a informacji dotycz\u0105ce tworzenia aplikacji bezserwerowych | ProHoster","description":"Chocia\u017c bezserwerowe.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 | ProHoster","og:description":"\u0425\u043e\u0442\u044f \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sovety-i-istochniki-informatsii-dlya-sozdaniya-besservernyh-prilozhenij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-30T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:02+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55881","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:35:40","updated":"2022-10-07 20:58:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=55881"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55881\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/55882"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=55881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=55881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=55881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}