Serverless: co to jest i dlaczego jest inne

Opublikowany: 2019-01-11

Co to jest przetwarzanie bezserwerowe?

Być może widziałeś cały niedawny szum wokół serverless w społeczności programistów. Więc co to właściwie jest? Chodzi mi o to, że kod nadal musi gdzieś działać poprawnie, więc jak to właściwie jest bezserwerowe?

Oznacza to tylko, że zespół programistów i operacyjny nie musi nadzorować, zarządzać ani nawet dbać o rzeczywiste serwery. Może to brzmieć bardzo podobnie do przetwarzania w chmurze, ale istnieje kilka kluczowych różnic. A te różnice dotyczą głównie tego, czego nie znasz w porównaniu z innymi modelami.

Nieznany system operacyjny!?!?

Jednym z łatwych sposobów odróżnienia bezserwerowego od jakiejś formy fantazyjnej aranżacji chmury, takiej jak Kubernetes, jest to, że nikt w Twojej firmie nie wie, jakiego systemu operacyjnego używa serwer, na którym działa Twój kod. Możesz wierzyć, że skoro używasz jakiegoś kodu .Net, to jest to Windows, albo że ponieważ Ruby jest na Linuksie, ale ostatecznie nie jesteś pewien i nie ma to żadnego znaczenia dla twojego rozwoju.

Jesteś w stanie pisać kod w języku obsługiwanym przez dostawcę bezserwerowego i tak długo, jak pozostajesz w granicach dostarczonego przez niego pudełka, jesteś w porządku, nie mając żadnej wiedzy o tym, jaki system operacyjny, wersje itp. to napędzają.

W rzeczywistości jedną z mocnych stron bezserwerowych jest to, że w danym momencie aplikacja może działać w wielu różnych systemach operacyjnych. Wszystko to jest zarządzane i obsługiwane przez Twojego dostawcę.

Ile serwerów potrzebujesz do obsługi ruchu?

Jeśli możesz odpowiedzieć na to pytanie, domyślając się na temat serwerów X lub potrzebujemy procesorów Y, to nie robisz programowania bezserwerowego.

Umowa bezserwerowa oznacza, że ​​liczba i moc obliczeniowa potrzebna do zasilania aplikacji nie będzie miała żadnego znaczenia dla programisty. Nie oznacza to, że nie płacisz za to opłaty, po prostu nie jest to coś, czym Ty lub Twój zespół będziecie zarządzać lub o co dbać. Dobrzy dostawcy radzą sobie z automatycznym zarządzaniem Twoją usługą, aby utrzymać wysoką dostępność i responsywność.

Model rozliczeń oparty na mocy obliczeniowej, pamięci masowej i sieci. Nie serwery, procesory i dyski twarde

Widząc, że nie wiesz, jaki sprzęt działa pod Twoją aplikacją, pojawia się nowy sposób rozliczania. Dostawcy bezserwerowych platform chmurowych rozliczają się za mierzone wykorzystanie obliczeń, pamięci masowej i transferu sieciowego. Zastępuje to inne modele rozliczeń, które są naliczane według procesora, dysków i połączeń sieciowych. W świecie bezserwerowym kontrolują ten element, a Ty płacisz tylko za jego dokładne użycie w swojej aplikacji.

To sprawia, że ​​obliczenia są znacznie bliższe modelowi elektryczności. Twoja firma energetyczna rozlicza Cię według KWH, czyli opomiarowanego zużycia energii elektrycznej. Sama energia jest tworzona przez węgiel, energię jądrową, gaz, cokolwiek. Ale opłaty są wyliczane tak samo bez względu na źródło.

Bezczynny na zero

Inną poważną zmianą w bezserwerowym jest to, że gdy Twoja aplikacja nie jest używana, automatycznie skaluje się do zera. Ponieważ nie jesteś rozliczany przez procesor, ale za pomocą obliczeń, wtedy gdy go nie używasz, rachunek wynosi zero.

Dostawca jest zawsze gotowy do odmierzania obliczeń w razie potrzeby, ale nie ma potrzeby płacenia za serwer, aby był gotowy, gdy zostanie użyty. Jest to po prostu obliczenie płacenia za sekundę obliczeń faktycznie zużytych podczas wykonywania aplikacji.

Możesz myśleć o tym trochę jak o sklepie spożywczym. Ich zadaniem jest zaopatrywanie sklepu w mleko, aby gdy klient jest spragniony, może wpaść, kupić mleko do picia, a potem wyjść. Nie płacisz z góry za zapotrzebowanie na mleko i nie płacisz, jeśli mają zepsute mleko, ponieważ nikt go nie kupił. To wszystko, co zajmuje się sklep spożywczy, to upewnienie się, że mają dostępne zapasy, jednocześnie uważając, aby nie przepełnić zapasów i nie marnować zepsutego mleka. Wszystko, co wiesz, to to, że mają to, czego chcesz, kiedy tego chcesz, a reszta jest uproszczona z dala od twoich zmartwień.

Kompromisy dla serverless

Więc całe to uproszczenie brzmi całkiem nieźle. Dlaczego dana osoba nie miałaby chcieć wszystkich tych rzeczy: prostszego rozliczania, mniejszej odpowiedzialności operacyjnej, łatwego skalowania. Jak ze wszystkimi rzeczami, wiąże się to z pewnymi kompromisami. Porozmawiajmy więc o nich.

Zastąp blokadę systemu operacyjnego blokadą dostawcy chmury

W innych modelach występowały różne kompromisy i ograniczenia związane z systemami operacyjnymi lub serwerami, na których działał Twój kod. Teraz, gdy frameworki bezserwerowe przenoszą tę odpowiedzialność na dostawcę, pojawiają się nowe ograniczenia, z którymi musisz się zmierzyć.

W chwili obecnej nie ma uzgodnionego zestawu norm określających ograniczenia i gwarancje między dostawcami usług. Oznacza to, że podobnie jak w przeszłości, przenoszenie aplikacji z Windowsa na Linuksa było trudne. Teraz napotkasz to, próbując przenieść swoje aplikacje bezserwerowe z chmury Google do Amazon.

Firmy te nie zapewniają jeszcze żadnej wspólnej struktury umożliwiającej klientom łatwe przenoszenie obciążeń bezserwerowych między nimi. I szczerze mówiąc, nie jest to w ich najlepszym interesie, aby zrobić to teraz, ponieważ woleliby zamknąć cię w swoich ofertach tak bardzo, jak to możliwe. Musisz więc być bardzo świadomy, że wczesne oferty bezserwerowe mają wiele zastrzeżonych punktów zaczepienia, które utrudnią ci wyjście z nich.

Mniejsza widoczność wydajności i kosztów

Narzędzia do zagłębiania się w wydajność kodu są bardzo dobrze znane z wcześniejszych modeli programowania. Rzeczy takie jak ustalenie, ile procesora lub pamięci RAM używa dany program, są powszechne.

W modelu bezserwerowym optymalizacje zmieniają się w zależności od tego, ile obliczeń, sieci i wywołań interfejsu API wykorzystuje Twój kod. Aby być uczciwym, są one związane z procesorem i pamięcią RAM z przeszłości. Ale w miarę jak będą się jeszcze bardziej oddalać, będzie to utrudniać tym narzędziom bycie tak użytecznymi.

W pełni wierzę, że nowe narzędzia open-source do debugowania i optymalizacji wydajności pojawią się, aby obsłużyć ten rynek. Będą jednak wymagały lepszego zrozumienia, w jaki sposób dostawcy wdrażają architekturę bezserwerową. Może to oznaczać, że dostawcy chmury są jedynymi, którzy są w stanie zapewnić wystarczająco głęboki wgląd, aby narzędzia te były skuteczne. I nie jest w ich interesie, aby pomóc Ci w zużyciu mniejszej ilości zasobów, ponieważ rozliczają się za nie bez względu na to, czy wykorzystałeś je efektywnie, czy nie.

Aplikacje, które działają przez długi czas, nie są słodkim miejscem

Aby uzyskać pełną elastyczność, jaką zapewnia bezserwerowe, zazwyczaj ogranicza programistę aplikacji do ograniczeń czasowych dotyczących tych funkcji jako usługi. Oznacza to, że optymalizuje, aby umożliwić Twojemu kodowi odpowiedź na żądanie internetowe, w którym ma maksymalnie 1 minutę na odpowiedź.

Te ustalone maksymalne czasy pomagają dostawcy w spełnieniu obietnic bezserwerowych. Oczekują, że będą w stanie przenosić obciążenia między rzeczywistymi fizycznymi procesorami i lokalizacjami w razie potrzeby, aby zapewnić zespołom programistów usługę, która automatycznie skaluje się i leczy z awarii sprzętu. Długotrwałe obciążenia robocze łamią to założenie. W rzeczywistości jest to zwykle wymieniane jako jeden z wymagań ich oferty. Kod musi zostać ukończony w ciągu X czasu lub zostać zakończony.

W przypadku żądań internetowych lub interfejsów API aplikacji mobilnych te ograniczenia nie są wielkim problemem. Jednak w przypadku innych zastosowań, takich jak kodowanie wideo, obsługa serwerów gier w czasie rzeczywistym lub rozwiązania do wideokonferencji, ograniczenia te nie są możliwe. W wielu przypadkach możesz obejść te ograniczenia, twórczo wykorzystując zasoby bezserwerowe, ale zwykle szukasz rozwiązania, które będzie Cię kosztować więcej i działać znacznie wolniej. Dostawcy chmury z przyjemnością Ci w tym pomogą, ponieważ większe wykorzystanie to dla nich więcej dolarów. Dlatego upewnij się, że korzystasz z bezserwerowych aplikacji i systemów internetowych, w których najlepiej pasuje.