EnterpriseTales Маленький, Менший, AWS Лямбда

З тих пір, як стало сучасним розділяти моноліти на акуратні, невеликі модулі - вони ж мікропослуги - ми звикли до того, що традиційний сервер додатків вважається списаним. Замість того, щоб покладатися на важку середовище виконання, в наш час необхідні фрагменти серверів комплектуються безпосередньо до технічного коду, надаючи йому своєрідне інтегроване середовище виконання. Все це упаковано в кілька контейнерів, забезпечено трохи функцій управління та моніторингу, і програма готова.
Як би цього було недостатньо, термін безсерверні програми з’являється дедалі частіше в недалекому минулому. Знову ж таки, Amazon є піонером з AWS Lambda. Але конкуренти, такі як IBM з openWhisk, Google з хмарними функціями або Microsoft з функціями Azure, є початковими блоками. Тож чи неможливо повністю позбавитись серверів та інфраструктури в майбутньому? Якщо так, то як це має працювати? А кому це взагалі цікаво? Пояснення потрібно. Справа для Enterprise Tales!
Що таке безсерверне додаток?
Термін безсерверне додаток трохи дратує, оскільки передбачає, що ви можете обійтися без середовища виконання для власного коду програми. Це не так. Швидше, цей термін хоче виразити, що безсерверні програми інтенсивно використовують сторонні служби, такі як хмарні бази даних, файлові системи та шлюзи API (серверний сервіс як послуга або коротше BaaS) або власний код програми на нестабільному зовнішньому комп'ютері Термін дії контейнера закінчується (функція як послуга, скорочено FaaS). Звичайно, також дозволено поєднання обох підходів. Google пише: "Функції - це легке асинхронне обчислювальне рішення на основі подій, що дозволяє створювати невеликі одноцільові функції, що реагують на хмарні події без необхідності керування сервером або середовищем виконання".
Безсерверний фокус
Поточний журнал Java широко займається безсерверним програмуванням.
Програми без дотику нічого: Безсерверна архітектура
Ми супроводжуємо фокус випуску на JAXenter подальшими статтями на цю тему.
Опубліковано до цього часу:
PaaS, BaaS або FaaS?
З багатьма скороченнями ви можете заплутатися. Хоча PaaS (Платформа як послуга) слід розуміти більше як платформу для розробки та розгортання, тобто вона відповідає за управління, виконання та моніторинг програм та їх коду, BaaS забезпечує корисні серверні системи, такі як бази даних, файлові системи або аутентифікацію Послуги, до яких розробники можуть звертатися безпосередньо з їх додатків.
Але як FaaS вписується в картину? Ідея FaaS полягає в тому, що розробник додатків реалізує серверний код (функції), але жоден сервер додатків або вбудований сервер не використовується як час виконання, а хмарний "обчислювальний контейнер без стану". Іншими словами, розробник просто розгортає свою функцію, завантажуючи відповідний код безпосередньо в хмару та визначаючи тригер, тобто подію, яка ініціює виконання коду. Така подія може напр. Б. зберігання файлу у хмарній файловій системі, додавання запису даних у хмарну базу даних або запит до хмарного шлюзу API. Як тільки ініціюється відповідна подія, функція FaaS запускається і виконується в окремому процесі. Таким чином, ресурси виконання, такі як центральний процесор або пам'ять, використовуються лише тоді, коли існує реальна потреба.
Основна унікальна точка продажу FaaS полягає в тому, що ви можете виконати внутрішній код без необхідності керувати власними серверами програм або серверними програмами. Також немає потреби керувати контейнерами. Масштабування надає постачальник FaaS. Безкоштовно? Ну, не зовсім так. Як правило, рахунки базуються на дзвінках або на час процесора - з AWS Lambda з кроком 100 мс. Чим більше або більше обчислювальних вимог, тим дорожче функція під час виконання.
Приклад, будь ласка?
Типовим прикладом функції FaaS є послуга внутрішньої обробки для обробки ресурсів, наприклад Б. Картинки. Якщо користувач завантажує зображення в хмару, подія може бути ініційована шляхом збереження зображення у хмарній файловій системі, яка запускає функцію FaaS, яка потім автоматично генерує ескізи чи альтернативні формати зображень. Вони, в свою чергу, також зберігаються у хмарній файловій системі.
Але як щодо програм, керованих інтерфейсом, наприклад B. Інтернет-магазин? Тут також можлива безсерверна програма. Припустимо, що відправним пунктом є те, що користувальницький інтерфейс веб-магазину був реалізований як односторінковий додаток (SPA), тобто частина бізнес-логіки знаходиться в клієнті. Аутентифікацію можна здійснити за допомогою хмарної служби BaaS; прості, також читайте запити в базі даних, напр. Б. для переліку доступних продуктів. Ми могли б реалізувати більш складні дії, такі як параметризуваний пошук, використовуючи функцію FaaS, яка інкапсулює доступ до базової хмарної бази даних. Але як це активується? Тут вступає в дію шлюз API, тобто свого роду настроюваний HTTP-сервер, який отримує наш пошуковий запит як http-запит, трансформує передані параметри у вхідні параметри нашої функції і пізніше повертає результат у вигляді аналогічно трансформованої відповіді HTTP. Сам шлюз API, звичайно, також хмарний компонент, який потрібно лише налаштувати.
Для реалізації функцій FaaS Amazon Lambda пропонує підтримку мов програмування JavaScript, Python та Java. Подальші мови плануються. З іншого боку, Google Functions підтримує лише JavaScript, JavaScript OpenWhisk JavaScript та Swift. Наразі найширшу підтримку надають функції Microsoft Azure з JavaScript, C #, Python та PHP.
Стан та результати діяльності
За визначенням, функції FaaS не використовують спільну пам’ять і, отже, мають бути без громадянства. Ви або виконуєте лише перетворення або обчислення переданих параметрів, або отримуєте стан, необхідний для обчислення, з баз даних на базі хмарних технологій, файлових систем або кеш-пам’яті додатків.
Функція FaaS запускається, виконується, а потім знову припиняється, коли це потрібно. Залежно від обраної мови програмування або основного середовища виконання, може бути певна затримка запуску. Для JavaScript або Python це навряд чи є суттєвим стосовно фактичного коду. Це виглядає трохи інакше, коли код виконується в JVM. У несприятливих сузір'ях це може призвести до значних затримок запуску. Це завжди так, коли між двома дзвінками проходить багато часу або піки призводять до значно більшої кількості дзвінків, ніж зазвичай. Однак, як правило, цією проблемою можна знехтувати, якщо не потрібно реалізовувати додаток із вимогами в режимі реального часу.
Функції FaaS, як правило, обмежені за часом виконання. Amazon Lambda має обмеження в 300 секунд. Якщо ви хочете змоделювати тривалі процеси, вам потрібно розробити відповідну архітектуру, яка розділяє їх на кілька функцій FaaS.
Як працює тестування з безсерверними?
Оскільки код функції FaaS, як правило, не потребує стану або отримує його із сторонніх систем, що легко висміюються, модульні тести дуже легко здійснити. Але як щодо інтеграційних тестів? Тут стає трохи складніше, оскільки вони сильно залежать від різних хмарних служб. Тож виникає питання про те, наскільки ці сторонні системи придатні для тестових сценаріїв. Він взагалі призначений для використання в тестах? Чи існують тестові заглушки, проти яких можна розробити? Наскільки легко системи можуть бути наповнені значущими тестовими даними? І яку стратегію використовує постачальник для тестування рахунків у хмарі? Безумовно, у дуже невеликих випадках можна буде провести інтеграційні або приймальні тести повністю на своєму локальному комп'ютері або на комп'ютері, не підключеному до хмари.
Розкажіть у колонці Enterprise Tales Ларс Ревекамп, Свен Келпін та Арне Лімбург (відкриті знання) цікаві історії та дає інформативну інформацію про Java EE та барвистий світ Enterprise Java.
Висновок
Надзвичайно проста модель має бути оцінена позитивно. Як розробнику, мені не доведеться турбуватися ні про що, крім коду програми. Немає необхідності керувати серверами або контейнерами. Витрати виникають лише тоді, коли додаток генерує навантаження, яке масштабується автоматично. Це особливо помітно у випадку піків, до яких, як правило, потрібно було б підтримувати додаткову інфраструктуру. Розгортання нової версії функції FaaS також дуже просто. Просто завантажте код або, у випадку Java, запакуйте його заздалегідь, і нова версія стане доступною.
Блокування продавця, безумовно, слід розглядати як недолік. Функції FaaS можна писати стандартними мовами, такими як Java або JS, але все інше залежить від виробника, наприклад B. тригери та підключений BaaS. Перенесення програми з Amazon на Google було б неможливим без подальших роздумів. Зокрема, цей крок означав би, що підключені системи, такі як хмарні файлові системи або хмарні бази даних, також повинні бути перенесені. Тут бажані локальні рішення та системи абстракції для підвищення портативності.
Зміни API, нові основні випуски або змінена модель ціноутворення можуть стати реальним ризиком. Іншим недоліком може стати результат перенесення бізнес-логіки на клієнта. Якщо вам потрібні кілька різних клієнтів, вам доведеться впровадити цей код кілька разів. Поточні SLA різних постачальників також можуть виявитись недоліком в окремих випадках. Amazon дозволяє максимум 1000 паралельних страт лямбда. Спочатку це звучить як багато, але відповідно до поточної моделі це можна розглядати як максимум для всіх лямбда-функцій. Інтенсивне випробування може паралізувати виробниче середовище.
Справедливості заради слід сказати, що ми все ще перебуваємо на дуже ранній стадії, і тому можна припустити, що багато згаданих проблем уже є на порядку денному постачальників. Маючи це на увазі: стежте за оновленнями ...!