Я обычно на питоне, край на NodeJS, а тут столкнулся с проектом, где это всё на .NET Core + EF. Причём задача там в 99% одна и та же, выбрать из базы нечто и отдать json в веб-морду.
Сразу полезли проблемы:
a) Лямбды умирают после некоего времени (не раскрываемого AWS)
б) Запуск лямбды и получение данных занимает 4-12 секунд.
в) AWS RDS Proxy (для доступа в Постгрес) недоступна из-да неподдерживаемой версии и механизма auth
Народ первым делом советует 1) сменить язык (на питон или яву-скрипт) 2) Подключить RDS Proxy (тут с этим сложности см. выше) и постоянно обращаться к лаямбде (каждые 5-10 минут), чтобы она не убивалась.
Насколько 1) поможет? Может лучше EF выкинуть к чертям?
Вообще, на каких языках вы пишете лямбды (или в Azure — функции).
Здравствуйте, Ватакуси, Вы писали:
В>Насколько 1) поможет? Может лучше EF выкинуть к чертям?
Неплохая идея.
В>Вообще, на каких языках вы пишете лямбды (или в Azure — функции).
1) Для постоянной нагрузки лямбды не предназначены, это дорого. Основная функция лямбд — это сделать так, чтобы разработчик мог разрабатывать, не привлекая ансамбль из сисадминов и девопсов. Если вам нужна постоянная нагрузка, то есть Fargate Autoscale и Application Load Balancer / API Gateway.
2) Я пишу на C# Core. Запуск лямбды занимает меньше времени, чем 4-12 секунд, но если наворачивать туда 100500 сервисов в DI, то можно и дольше запускать. А вы не наворачивайте.
3) Сейчас я проверил "холодный запуск", у меня оно заняло 1296мс, последующие ответы занимают 366мс, и надо учесть, что мой сервис обращается к стороннему сервису, то есть здесь и запрос, и ответ. В моём проекте есть и EF Core, и linq2db.
4) Вроде бы у лямбд теперь имеется некий lifecycle management, я туда не лез, но насколько я понимаю, это как раз то самое управление засыпанием-пробуждением.
5) При сборке лямбды на линуксе можно сделать ready-to-run, то есть сделать из IL настоящий машинный код на стадии сборки, а не в момент запуска. Это должно ускорить работу. Насколько я понимаю, этого можно достичь и без линукса на собственном десктопе, через через AWS CodePipeline.
6) У людей, которые на Rust пишут, лямбда отрабатывает меньше чем за 100мс.
Теперь по вашим вопросам. Я не знаю, какая у вас версия Постгреса, возможно шибко новая. А зачем вам такая новая версия? Может вы более старой обойдётесь? То же касается и "механизма auth". А вообще для serverless лучше использовать AWS Aurora.
Здравствуйте, Ватакуси, Вы писали:
В>Вообще, на каких языках вы пишете лямбды (или в Azure — функции).
Обычно на Python или JS. Довольно хорошо выходит на Go, но это если что-то более фундаментальное и я не очень уверен что такое в Лямбде вообще стоит размещать.
Ради эксперимента я как-то затолкал в Лямбду приложение на Clojure, эксперимент удался, но для прода я бы ни кому так не посоветовал делать
С>2) Я пишу на C# Core.
и это все(все пункты, не только 2) удаленно? как вообще удаленно люди попадают туда, где все это используется, если не секрет? С>6) У людей, которые на Rust пишут, лямбда отрабатывает меньше чем за 100мс.
о, спасибо, интересно
Здравствуйте, Слава, Вы писали:
С>4) Вроде бы у лямбд теперь имеется некий lifecycle management, я туда не лез, но насколько я понимаю, это как раз то самое управление засыпанием-пробуждением.
Здравствуйте, Je suis Mamut, Вы писали:
С>>2) Я пишу на C# Core. JSM>и это все(все пункты, не только 2) удаленно? как вообще удаленно люди попадают туда, где все это используется, если не секрет?
Извиняюсь за поздний ответ.
Да, всё удалённо.
У нас нечто вроде программистской артели. Заказчики — американцы, сфера деятельности — выдача ипотеки. Как я попал — да просто через знакомых. Сперва вместе работали. потом я человека пригласил в другую организацию, где я сам работал, а туда меня позвал ещё один знакомый, потом он меня пригласил в новый проект и такое вот перекрёстное опыление.
У Яндекса вроде сейчас есть аналоги, яндексоиды вообще откровенно копируют AWS.