Давайте погрузимся в некоторые выдающиеся языки для AWS.

Прошло более нескольких лет с тех пор, как партнер AWS выпустил статью о выдающихся языках, и с тех пор многое изменилось: функции Lambda, языковые версии, доступность среды выполнения в функциях Lambda, больше внимания к микросервисам ... список можно продолжать и на. Так почему бы не вернуться к этой теме? Возможно, мы сможем уделить больше внимания лямбда-функциям с помощью наших, поскольку они немного накалились с 2014 года.

Давайте посмотрим на тот же список - в том же порядке - из статьи об AWS, а затем добавим еще пару вариантов в конце для хорошей оценки.

.NET (C # / PowerShell)

.NET всегда кажется незаменимым фаворитом, по крайней мере, для присутствующих, что не должно вызывать удивления, учитывая фантастическую документацию, широкую поддержку языков и даже сейчас Xamarin - и это даже не принимает во внимание что лучше всего подходит JVM и все, что с ней связано. Хотя использование полных функций только в Windows является недостатком, который может помешать полноценной работе с .NET, его нельзя преодолеть, и он становится все проще и проще со времени появления .NET с открытым исходным кодом от Microsoft.

В то время как .NET поддерживает множество языков, наиболее распространенным (и тем, который имеет встроенную поддержку Lambda) является C #. Хотя C # пользуется большой популярностью из-за его использования в таких вещах, как Unity, Kentico и вышеупомянутый Xamarin, это не обязательно ваш лучший выбор для AWS. Само собой разумеется, что Azure предоставляет более богатый набор инструментов для разработчика C #, чем AWS, и если .NET является неотъемлемой / основной частью вашего стека, вам будет разумно вместо этого рассмотреть Azure. А что насчет лямбд? Поскольку C # является компилируемым языком на основе классов, время холодного запуска может быть не только болезненным, но и вредным. Распределенному приложению может потребоваться 10 или более секунд для завершения операции, если задействовано 5 лямбда-выражений! В то время как холодный запуск может быть уменьшен с помощью различных методов, C # упускает еще один момент, связанный с более высоким общим потреблением памяти, чем интерпретируемый язык. Поскольку вы платите больше за больше памяти, а C # будет постоянно этого требовать, ожидайте, что лямбда-функции C # будут стоить больше, чем их аналоги на Python или JS.

А что насчет PowerShell? Помимо того, что .NET поддерживает PowerShell, а C # уже используется, PowerShell может быть чрезвычайно популярным среди системных администраторов. Большинство примеров и руководств по использованию PowerShell в Lambda, которые вы можете найти, связаны с сисопами и девопами, и не зря! PowerShell был разработан для автоматизации задач, является кроссплатформенным (серьезно, он работает на macOS и Linux!), И многие сисопы и инженеры DevOps, переходящие в облачное пространство, уже знают об этом. Синтаксис и функции кажутся идеальными для этих целей.

Следует отметить, что в связи с растущей популярностью функционального программирования: AWS сообщает нам, как запустить F # в Lambda.

Java

История Java в AWS очень похожа на историю C # - конечно, без Microsoft и Oracle. Это немного «тяжеловато», чтобы считаться подходящим для функций Lambda, у него есть преданная фанатская база, а его право собственности вызывает постоянные споры. Несмотря на сомнительную жизнь функции Java Lambda, веб-сервер Java так же удобен в AWS, как и все остальное. Если вы знаете Java, вы можете оставаться в своей зоне комфорта и использовать AWS.

Что такое JVM? JVM или виртуальная машина Java, среда, поддерживающая множество языков. В общем, похоже, что они работают с лямбда-функциями без дополнительной настройки. Если вы предпочитаете Clojure, Groovy, Scala или Kotlin, вы можете просто добавить их в среду выполнения Java Lambda и начать работу. В зависимости от вашего варианта использования это может перевесить медленный холодный запуск и высокое использование памяти JVM.

Python

Поскольку интерфейс командной строки AWS написан на Python, было бы легко предположить, что союз вашего кода Python и AWS будет удачным. И это предположение было бы абсолютно правильным. Рекомендации по стилю кода Python, которые часто используются как ответ святого Грааля на вопрос какой язык мне следует выучить в первую очередь?, Дают ему преимущество перед разработчиком и помогают облегчить боль, связанную с общим кодом. В Интернете достаточно руководств по изучению Python, и вы, вероятно, могли бы найти комбинацию, которая позволила бы рыбе выучить язык, и, тем не менее, она также способна поддерживать некоторые из самых сложных и тяжелых приложений. Поддержка версий 2.6, 3.6 и 3.7 (уважаемое сообщество Python: выберите одну и придерживайтесь ее!) Означает, что даже если вы не можете использовать новейшую версию Python, вы все равно можете использовать функции Lambda. И боже, Python - отличный выбор для Lambda! Это, безусловно, самый быстрый вариант с холодным запуском на всех уровнях памяти, имеет фантастическую поддержку SDK, согласованную документацию и широкое распространение, что делает его легким выбором для широкого круга разработчиков.

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

Рубин

Руби хорошо любят, даже если часто думают, что она умерла. Практически любой разработчик, который работал с ним, может по крайней мере найти что-нибудь хорошее, чтобы сказать об этом. Многие не могут перестать говорить об этом хорошие вещи после того, как начали. Во многом эта лояльность исходит от фреймворка Rails - да, верно, Ruby - это не Rails - фреймворка, который, вероятно, нетрудно найти для использования на EC2 здесь или там. Поскольку Rails всегда был одной из основных частей Ruby, можно ожидать, что его использование в функциях Lambda будет минимальным. И не пренебрегая Ruby-разработчиками… да, вы правы. Принятие настолько низкое, что трудно найти даже бенчмаркинг, хотя, насколько я могу судить, он опережает .NET и Java, но отстает от Node.js и Python. По-видимому, в этом году ожидается несколько крупных выпусков Ruby, включая JIT-компилятор, так что, может быть, в будущем мы увидим нового лидера?

PHP

PHP - это… ну, это PHP. С выпуском PHP 7 многие люди, которые раньше жили с приклеенными пальцами к глазным яблокам, теперь могут использовать обе руки и видеть обоими глазами при написании кода. И поскольку 80% Интернета работает на PHP, это, вероятно, хорошо. Несмотря на ненависть, которую он вызывает, PHP распространен повсеместно, и кому-то нужно знать его в тот неизбежный день, когда вам понадобится обновить WordPress. Вероятно, можно с уверенностью сказать, что PHP является претендентом на звание наиболее часто используемого языка в AWS, если мы считаем LightSail. Неудивительно, что PHP SDK является полнофункциональным и может выполнять те же функции, что и SDK любого другого языка. PHP никогда не исчезнет, ​​сколько бы мемов мы ни создавали.

Можете ли вы использовать это в лямбде? Если нужно, я полагаю.

Node.js

Node.js прошел долгий путь с 2014 года, чему способствовал тот факт, что JavaScript в целом прошел довольно большой путь. Принятие JS не вызывает затруднений: каждый современный веб-браузер поддерживает все, кроме самых передовых функций, язык продолжает адаптироваться и развиваться благодаря участию сообщества, а его динамическая типизация и интерпретируемый характер делают его очень удобным для новичков. Node.js дает нам возможность иметь все те же функции в полной среде выполнения, при этом браузер не требуется. JavaScript начинает вытеснять Python в потоках «рекомендации первого языка», поскольку знание JS означает, что вы способны писать код практически для чего угодно. И AWS не разочаровывает в этом, делая Node.js первоклассным гражданином (обычно… если вы не просматриваете документацию, где вы с большей вероятностью найдете примеры на PHP или Ruby, чем на Node.js). Вероятно, вы найдете больше серверов, использующих Node.js с чем-то вроде Express, чем сейчас, когда вы используете Ruby on Rails.

Поддержка Lambda - A +, хотя Amazon (и все облачные провайдеры, если на то пошло) имеет плохую репутацию, когда дело доходит до скачков версий. Все платформы поддерживают 6.1 - что заметно на грани завершения жизненного цикла на момент написания этой статьи - и все также имеют, по крайней мере, бета-поддержку 8.1 и ОГРОМНЫЕ преимущества в производительности, которые двигатель V8 получил в этом цикле выпуска. . Экспериментальную поддержку 10.1 можно найти в Azure, а технически любую версию можно в AWS с помощью настраиваемых сред выполнения или уровней, если вы чувствуете себя резвым.

Еще‽

Создание сценариев оболочки

AKA Bashzshfish / чем бы ни занимались в наши дни дети.

Не подходит для Lambda, но если вы имеете дело с Linux EC2 или используете macOS или Linux, вам будет полезно изучить хотя бы основы. Развертывайте Lambdas через интерфейс командной строки, перемещайте файлы, SSH в тот EC2, который вы только что создали ... Bash является обязательным для всех, кроме нескольких избранных (основанных на Windows) разработчиков облачных вычислений.

Язык Amazon States

JSON-подобный язык, используемый для работы Step Functions (да благословит его имя). Если вы не используете пошаговые функции, вам, вероятно, следует, и вам обязательно нужно познакомиться с этим странно не доменным сайтом.

JSON

На самом деле это не «языки», но вы увидите МНОГО JSON (объектная нотация JavaScript) - в конце концов, на нем работает большая часть Интернета!

YAML

Если вам действительно повезет, вас порадует YAML (YAML Ain’t Markup Language), ориентированный на отступы, в таких вещах, как шаблоны CloudFormation и конфигурация Serverless Framework. Ознакомьтесь с ограничениями и ожиданиями этих стандартов, и вам будет намного легче справляться практически со всем.

Заключительное примечание

Лучший язык для использования? Тот, который вы, наверное, уже знаете. Несмотря на отставание в некоторых аспектах, C # и Java по-прежнему являются сильными соперниками во многих отношениях. Стоимость переоснащения и изучения новой экосистемы может перевесить увеличение стоимости времени выполнения Lambda. Есть множество факторов. Если вы должны, то Python и Node.js почти наверняка должны быть в верхней части вашего списка. И те, и другие продолжают набирать популярность и поддержку, а также превосходят многие стандартные операции в бессерверной архитектуре. Оба они поддерживаются в GCP, Azure и AWS, а также во многих других облачных провайдерах.

Совсем недавно AWS выпустила настраиваемые среды выполнения Lambda и Lambda Layers. Это позволяет выполнять лямбда-функцию, используя практически любую среду выполнения или язык, который вы хотите. Производительность не гарантируется и может варьироваться от реализации к реализации. По этой причине будьте осторожны при просмотре показателей эффективности, которые вы найдете в Интернете. Вероятно, безопаснее придерживаться официальных сроков выполнения важного кода, пока вы не получите собственные данные о том, насколько хорошо он работает. В остальном: удачного взлома!

Дополнительная информация

Лямбда холодный старт и т. Д. Сравнения из:

Дополнительный контент:

Что делает Serverless Guru?

Serverless Guru помогает компаниям создавать масштабируемые и экономичные приложения в облаке. Мы помогаем обучать компании тому, как использовать IAC, бессерверные и облачные сервисы. Мы помогаем перенести существующие приложения в облако и оптимизировать существующие приложения в облаке, чтобы сделать их более рентабельными. Мы являемся партнером по бессерверной разработке и партнером-консультантом AWS.

Что мы упустили?

Когда вы оставляете свой ответ, обязательно оставьте комментарий ниже или напишите свой ответ @serverlessgurux в Twitter.

Даллас Слотер

Старший облачный архитектор - Serverless Guru

LinkedIn

Увидимся в следующий раз! 😃

Если вы хотите узнать больше о Serverless Guru, подпишитесь на нас в Medium, Twitter, Instagram, Facebook или LinkedIn!