Какво е без сървър? Обяснено безсървърно изчисление

Разработчиците прекарват безброй часове в решаване на бизнес проблеми с код. След това е ред на оперативния екип да прекара безброй часове, като първо измисли как да получи кода, който разработчиците записват и изпълняват на всички налични компютри, и второ, като се увери, че тези компютри работят безпроблемно. Втората част наистина е безкрайна задача. Защо не оставите тази част на някой друг?

Голяма част от иновациите в ИТ през последните две десетилетия - виртуални машини, изчислителни облаци, контейнери - бяха съсредоточени върху това да не се налага да мислите много за основната физическа машина, на която работи вашият код. Безсървърните изчисления са все по-популярна парадигма, която довежда това желание до своя логичен завършек: При безсървърните изчисления не е нужно да знаете нищо за хардуера или операционната система, на която работи вашият код, тъй като всичко се грижи за вас от доставчик на услуги .

Какво представлява изчисляването без сървър?

Безсървърните изчисления са модел за изпълнение на облака, в който доставчикът на облак динамично разпределя - и след това таксува потребителя - само изчислителните ресурси и хранилището, необходими за изпълнение на определена част от кода. Естествено все още има включени сървъри, но за тяхното осигуряване и поддръжка се грижи изцяло доставчикът. Крис Мънс, защитникът на Amazon за безсървърни, заяви на конференция през 2017 г., че от гледна точка на екипа, който пише и внедрява кода, „изобщо няма сървъри за управление или предоставяне. Това не включва нищо, което би било гол метал, нищо, което е виртуално, нищо, което е контейнер - всичко, което включва управление на хост, поправяне на хост или работа с каквото и да е на ниво операционна система, не е нещо, което трябва да направите в свят без сървъри. " 

Както обяснява разработчикът Mike Roberts, терминът някога е бил използван за така наречените back-end-as-a-a-service сценарии, при които мобилно приложение би се свързвало с back-end сървър, хостван изцяло в облака. Но днес, когато хората говорят за безсървърни изчисления или за безсървърна архитектура, те имат предвид предложения като функция като услуга , при които клиент пише код, който се справя само с бизнес логиката и го качва на доставчик. Този доставчик се грижи за цялото осигуряване на хардуер, управление на виртуални машини и контейнери и дори задачи като многопоточност, които често са вградени в кода на приложението.

Безсървърните функции се управляват от събития, което означава, че кодът се извиква само когато се задейства от заявка. Доставчикът таксува само за изчислително време, използвано от това изпълнение, а не фиксирана месечна такса за поддържане на физически или виртуален сървър. Тези функции могат да бъдат свързани заедно, за да се създаде конвейер за обработка, или те могат да служат като компоненти на по-голямо приложение, взаимодействащи с друг код, работещ в контейнери или на конвенционални сървъри.

Предимства и недостатъци на безсървърните изчисления

От това описание две от най-големите предимства на безсървърните изчисления трябва да са ясни: разработчиците могат да се съсредоточат върху бизнес целите на кода, който пишат, а не върху инфраструктурните въпроси; и организациите плащат само за изчислителните ресурси, които всъщност използват, по много подробен начин, вместо да купуват физически хардуер или да наемат облачни екземпляри, които в повечето случаи стоят без работа.

Както Bernard Golden посочва, тази последна точка е от особена полза за приложенията, управлявани от събития. Например, може да имате приложение, което през повечето време е неактивно, но при определени условия трябва да обработва много заявки за събития наведнъж. Или може да имате приложение, което обработва данни, изпратени от IoT устройства с ограничена или периодична интернет връзка. И в двата случая традиционният подход ще изисква осигуряване на силен сървър, който може да се справи с върхови работни възможности, но този сървър би бил недостатъчно използван през повечето време. С безсървърна архитектура бихте платили само за сървърните ресурси, които всъщност използвате. Безсървърните изчисления също биха били подходящи за специфични видове групова обработка.Един от каноничните примери за случай на използване на безсървърна архитектура е услуга, която качва и обработва поредица от отделни файлове с изображения и ги изпраща в друга част на приложението.

Може би най-очевидният недостатък на безсървърните функции е, че те са умишлено ефимерни и, както казва AlexSoft, „неподходящи за дългосрочни задачи“. Повечето безсървърни доставчици не позволяват на кода ви да се изпълнява за повече от няколко минути и когато завъртите функция, тя не запазва никакви данни за състоянието от предишни екземпляри. Сроден проблем е, че безсървърният код може да отнеме до няколко секунди, за да се върти - не е проблем за много случаи на употреба, но ако приложението ви изисква ниска латентност, бъдете предупредени.

Много от другите недостатъци, както изтъкнаха Рохит Акиваткар и Гари Арора, са свързани с блокирането на доставчика. Въпреки че има опции с отворен код, безсървърният пазар е доминиран от големите търговски облачни доставчици, както ще обсъдим след малко. Това означава, че разработчиците често използват инструменти от своите доставчици, което затруднява превключването, ако те станат недоволни. И тъй като толкова много безсървърни изчисления се извършват по дефиниция в инфраструктурата на доставчика, може да е трудно да се интегрира безсървърният код в вътрешните тръбопроводи за разработка и тестване.

Безсървърни доставчици: AWS Lambda, Azure Functions и Google Cloud Functions

Съвременната ера на безсървърните изчисления започна с пускането на AWS Lambda, платформа, базирана на облачната услуга на Amazon, през 2014 г. Microsoft последва примера с Azure Functions през 2016 г. Google Cloud Functions, които бяха в бета версия от 2017 г., най-накрая достигнаха до производствен статус през юли 2018 г. Трите услуги имат малко различни ограничения, предимства, поддържани езици и начини за правене на нещата. Рохит Акиваткар има добра и подробна информация за разликите между тримата. Също така работи IBM Cloud Functions, който се основава на платформата Apache OpenWhisk с отворен код.

Сред всички безсървърни изчислителни платформи AWS Lambda е най-изявената и очевидно е имала най-много време да се развива и зрее. има покритие от актуализации и нови функции, добавени към AWS Lambda през последната година.

Безсървърни стекове

Както е случаят в много сфери на софтуера, безсървърният свят е видял еволюцията на купчини софтуер, които обединяват различни компоненти, необходими за изграждането на безсървърно приложение. Всеки стек се състои от език за програмиране , в който ще пишете кода, рамка за приложения, която осигурява структура за вашия код, и набор от тригери, които платформата ще разбере и използва за иницииране на изпълнение на код.

Въпреки че можете да смесвате и съпоставяте различни конкретни предложения във всяка от тези категории, има ограничения в зависимост от това кой доставчик използвате, с някои припокривания. Например за езици можете да използвате Node.js, Java, Go, C # и Python на AWS Lambda, но само JavaScript, C # и F # работят вградени функции на Azure. Що се отнася до тригерите, AWS Lambda има най-дългия списък, но много от тях са специфични за платформата AWS, като Amazon Simple Email Service и AWS CodeCommit; Междувременно функциите на Google Cloud могат да се задействат от общи HTTP заявки. Пол Яворски има задълбочен поглед върху стековете за всяко от големите три предложения.

Безсървърни рамки

Струва си да се задържате малко върху рамковата част на уравнението, тъй като това ще определи много за това как в крайна сметка изграждате приложението си. Amazon има свое собствено предложение, модел с отворен код без сървъри (SAM), но има и други, повечето от които са междуплатформени и също с отворен код. Един от най-популярните се нарича, по-скоро общо, Без сървъри и подчертава, че предоставя еднакъв опит на всяка поддържана платформа, т.е. AWS Lambda, Azure Functions, Google Cloud Functions и IBM OpenWhisk. Друго популярно предложение е Apex, което може да помогне да се включат някои езици, които иначе не са достъпни за определени доставчици.

Бази данни без сървъри

Както отбелязахме по-горе, една странност при работа с безсървърния код е, че няма постоянно състояние, което означава, че стойностите на локалните променливи не се запазват в инстанции. Всички постоянни данни, до които вашият код трябва да има достъп, трябва да се съхраняват другаде, а тригерите, налични в стековете за основните доставчици, включват бази данни, с които вашите функции могат да взаимодействат.

Някои от тези бази данни са посочени като безсървърни. Това означава, че те се държат подобно на други безсървърни функции, които сме обсъждали в тази статия, с очевидното изключение, че данните се съхраняват за неопределено време. Но голяма част от режийните разходи, свързани с осигуряването и поддържането на база данни, се отхвърлят. Както казва разработчикът Джеръми Дейли, „Всичко, което трябва да направите, е да конфигурирате клъстер и след това цялата поддръжка, корекция, архивиране, репликация и мащабиране се обработват автоматично за вас.“ Както при предложенията за функция като услуга, вие плащате само за изчислителното време, което всъщност използвате, а ресурсите се въртят нагоре и надолу според нуждите, за да съответстват на търсенето.

Големите трима безсървърни доставчици предлагат свои собствени безсървърни бази данни: Amazon има Aurora Serverless и DynamoDB, Microsoft има Azure Cosmos DB, а Google има Cloud Firestore. Това обаче не са единствените налични бази данни. Неманя Новкович разполага с информация за повече предложения.

Безсървърни изчисления и Kubernetes

Контейнерите подпомагат захранването на безсървърна технология под капака, но режийните разходи за управлението им се грижат от доставчика и по този начин са невидими за потребителя. Мнозина виждат безсървърните изчисления като начин да получат много от предимствата на контейнеризираните микроуслуги, без да се налага да се справят с тяхната сложност, и дори започват да говорят за света след контейнери.

В действителност, контейнерите и безсървърните изчисления почти сигурно ще съществуват в продължение на много години напред и всъщност безсървърните функции могат да съществуват в същото приложение като контейнерните микроуслуги. Kubernetes, най-популярната платформа за оркестрация на контейнери, може да управлява и безсървърна инфраструктура. Всъщност с Kubernetes можете да интегрирате различни видове услуги в един клъстер.  

Без сървър офлайн

Може да ви се стори малко плашеща перспективата да започнете с безсървърните изчисления, тъй като изглежда, че ще трябва да се регистрирате при доставчик, за да играете и да видите как работи. Но не се страхувайте: Има начини да стартирате безсървърния код офлайн на вашия локален хардуер. Например, AWS SAM предоставя локална функция, която ви позволява да тествате ламбда кода офлайн. И ако използвате рамката за приложения без сървъри, разгледайте без сървър офлайн, приставка, която ви позволява да стартирате код локално. Честит експеримент!