Стало хуже, переписал на Go/Rust/Java свои лямбды (AWS Lambda)
Стало хуже, переписал на Go/Rust/Java свои лямбды (AWS Lambda)Описание смысла мема с картинки: обычно первые квесты/уровни в играх простые, и идет сравнение с языком С++, где даже в самом простом можно сделать ошибку и не сразу понятно почему не работает, Rust мне напомнил С++, это как на первом уровне в играх можно было бы сразу погибнутьвот тут начало , я хотел посмотреть что если свои лямбда переписать на языки с которыми я еще не работал, тем более что с ai это можно сделать очень быстрои вот что вышлоесли вы вдруг не знаете что такое AWS Lambdaто по сути это где лежит ваш бекенд, файлов может быть много разных, и разного назначения,от сходить в базу дернуть что-то и вернуть в json формате, до запустить мини браузер и что то им поделать типа тестирования, очень удобно, называется такое serverless, но есть ограничения которые я описывал в начале по ссылке вышеу меня было все на Python и Node.js я попробовал посмотреть что будет если перенести на Go/Rust/Java👉и СТАЛО ХУЖЕДело в том что у меня в основном функциональность если прям упростить упростить, это дергать разную подготовленную информацию из баз и отдавать в json, иногда сходить на разные API, разного назначения, 👉технические это выглядит так Для Node.js (и для Python)[Запрос от пользователя] -> [Lambda запускается] -> [Node.js/Python runtime уже готов] -> [Загружается handler (код)] -> [Handler исполняется] -> [Ответ от Lambda]И занимает это 100-300мс (почти моментально) А вот для Go это уже выглядит так[Запрос от пользователя] -> [Lambda запускается] -> [Создаётся новая среда] -> [Загружается скомпилированный Go-бинарник] -> [Handler исполняется] -> [Ответ от Lambda]И занимает это 300-500мс, все еще быстро но когда это было почти моментально это более заметноНо вот для Java это вот так[Запрос от пользователя] -> [Lambda запускается] -> [Создаётся новая среда] -> [Загружается Java Runtime (JVM)] -> [Загружается и инициализируется приложение (например, Spring Boot)] -> [Handler исполняется] -> [Ответ от Lambda]И занимает это…. до 2 секунд! а это уже сильно “бросается в глаза”—👉Дело в том что после исполнения, и простоя больше 15 минут, лямбда засыпает, и чтобы стартануть опять, это занимает время, для более-менее нагруженных проектов, наверное такие старты не сильно заметны так как постоянно пользуется, а когда у меня 2-3 пользователя в день, то это заметноНу на самом деле я прост оне умел их готовить, правильная схема была бы такая. Гибрид[Запрос от пользователя] -> [Lambda на Python/Node.js] -> [Запрос на сервер где сервис постоянно запущенный на одном из компилируемых языков Go/Rust/Java/.Net] -> [Код исполняется] -> [Ответ в лямбду] -> [Ответ от Lambda]В таком случае максимальный профит, холодный старт от Python/Node.js и быстрое выполнение кода типа: запрос к бд, обработка (json,map и тд), сериализация в Райнтаме компилируемых языков Go/Rust/Java/.Net, которые уже постоянно живут (подняты) и ожидают запросов.Java мне показался довольно громоздким но надежным, в том плане что прям подробно надо написать что запрашиваешь, что ожидаешь и тдRust постоянно что-то хочет во время билда, чем то напоминает C++ который не прощает ошибки, было много это самое, я бы сказал не для новичков, надо понимать - зачема вот Go мне понравился, мне чем то напомнил Swift, в том плане, что сахарок есть и такой он как бы весь понятный, баланс простоты и производительности, думаю останавлюсь на нем для своих сервисов, для схемыХолодный старт на Python/Nodejs -> запрос в сервис на Go Всем := 🙌А для холодного старта какой лучше выбрать?👍 - Python ❤️ - Node.js (Typescript)🔥 - Не знаю#программирование | @andreyposnov