SlideShare a Scribd company logo
Serverless Azure Editon
Михайло Чалий
SoftServe
Mike Chaliy
mike@chaliy.name
@chaliy
Abstract
I would like to give an overview of the Serverless architectures
with examples using Azure. We will explore strong and weak
parts of the architecture. Take a look at use cases and scenarios.
And see some practical demos: Azure Functions, Azure Logic
Apps and some other services.
Я розкажу про Serverless архітектури на прикладі Azure. Ми
разом пройдемось по перевагам і недолікам цієї архітектури
в порівнянні з іншими. Розглянемо потенційні сценарії
використання і декілька практичних демонстрації: Azure
Functions, Azure Logic Apps та інші сервіси.
Звідки це все
пішло?
Історія,відon-premises дофункцій
ЗasaService
І як той ваш
serverless
виглядає?
Цедійснофункція
Це точно
serverless?
FaaS
Function as a
Service
BaaS
Backend as a
Service
Тож що це
насправді?
Новий рівень
абстракції
Новий рівень
абстракції
Реактивність
Новий рівень
абстракції
Реактивність
Оплата по факту
роботи
Хм, виглядає
непотрібним…
Обробкакартиноквмікроскопічномудодатку
$40.5
$80
$40
Маленька апплікушкаМаленька апплікушка
Велика апплікушкаВелика апплікушка
Маленька апплікушкаМаленька апплікушка Спеціальна функціяСпеціальна функція
NERmicroservice дляLang-UK
C++MITIELib +Python2.7+350МБмодель+малозапитів
$0.5$10
NER FunctionNER FunctionWeb AppWeb App
Автономні ізольовані сервіси
1.Обробка картинок, чи відео
2.Фрауд детекшен
3.Розсилка спаму
4.Що завгодно…
Сервіси з спеціальними
потребами
1.Написане криворукими баранами
2.Нестандартні залежності
3.Ресурсоємні операції
4.…
Реакція на зовнішні події
1.Реакція на події в клауді
2.Робота по графіку
3.Ресурсоємні операції
4.…
Ще варіанти…
1.GraphQL ендпоінт
2.Обробка команд в CQRS
3.SPA Backend
4.Realtime analytics
5.…
Шаблони
Microservices
Однафункція–багатофункцій
Nanoservices
Багатофункцій
Практика!
AWS
Lambda
Azure
Functions
Google Cloud
Functions Auth0 Tasks
IBM
OpenWhisk
Azure Functions
Демо
Щось занадто все
добре…
Нелінійна складність
1.Каскадні виклики функцій
2.Складність індивідуального
розгортання
3.Складність версіонування
4.Складність забезпечення безпеки
Непророблені практики
розробки
1.Якщо код використовується між
двома функціями, як його
первикористовувати?
2.Локальна розробка?
3.Тестування?
4.Vendor Lock-in?
Azure Functions
1.Дуже не вистачає підтримки path,
в HTTP Trigger
Ресурси
1. http://martinfowler.com/bliki/Serverless.html
2. https://www.troyhunt.com/azure-functions-in-practice/
3. https://myignite.microsoft.com/videos/3174
4. https://github.com/chaliy/play-azure-serverless

More Related Content

PDF
Антон Бойко "Azure Web Apps deep dive"
PPTX
Денис Резник "Relational Database Design. Normalize till it hurts, then Denor...
PDF
"Backbone React Flux" Артем Тритяк
PDF
Андрей Уманский и Дмитрий Горин "Нет скучным ретроспективам! Создаём эффектив...
PDF
"The Grail: React based Isomorph apps framework" Эльдар Джафаров
PDF
Александр Корниенко "Как реально построить Dream-team?"
PDF
"Хероковая жизнь" Юрий Литвиненко
PDF
Павел Тайкало: "Apple watch first steps"
Антон Бойко "Azure Web Apps deep dive"
Денис Резник "Relational Database Design. Normalize till it hurts, then Denor...
"Backbone React Flux" Артем Тритяк
Андрей Уманский и Дмитрий Горин "Нет скучным ретроспективам! Создаём эффектив...
"The Grail: React based Isomorph apps framework" Эльдар Джафаров
Александр Корниенко "Как реально построить Dream-team?"
"Хероковая жизнь" Юрий Литвиненко
Павел Тайкало: "Apple watch first steps"

Viewers also liked (19)

PDF
Анна Лаврова "When Fairy Tale meets Reality: Точность-надежность-дизайн"
PDF
Алексей Демедецкий | Unit testing in swift
PDF
"Fun with JavaScript and sensors" by Jan Jongboom
PDF
Максим Климишин "Борьба с асинхронностью в JS"
PDF
"Посмотрим на Акку-Джаву" Дмитрий Мантула
PDF
Ruby w/o Rails (Олександр Сімонов)
PPT
"От разработчика в консультанты - история одного тренера" Александр Баглай
PPTX
"Walk in a distributed systems park with Orleans" Евгений Бобров
PDF
"Выучить язык программирования за 25 минут" Дмитрий Мантула
PDF
"From CRUD to Hypermedia APIs with Spring" Владимир Цукур
PPTX
Маргарита Остапчук "Що нового в Windows 10 для розробників"
PPTX
"Эффективность и оптимизация кода в Java 8" Сергей Моренец
PPTX
Сергей Больщиков "Angular Components: все уже за, а вы еще нет?"
PDF
"Avoiding memory leaks in Android" Денис Жучинский
PDF
Николай Паламарчук "Управление зависимостями в больших проектах"
PDF
"Reducers in Action" Антон Молдован
PPTX
"Война типов: сильные против слабых" Виктор Полищук
PDF
Роман Сахаров "Stakeholders and expectations, или когда проекты успешны?"
PDF
Владислав Грязнов "Многозадачность в PHP"
Анна Лаврова "When Fairy Tale meets Reality: Точность-надежность-дизайн"
Алексей Демедецкий | Unit testing in swift
"Fun with JavaScript and sensors" by Jan Jongboom
Максим Климишин "Борьба с асинхронностью в JS"
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Ruby w/o Rails (Олександр Сімонов)
"От разработчика в консультанты - история одного тренера" Александр Баглай
"Walk in a distributed systems park with Orleans" Евгений Бобров
"Выучить язык программирования за 25 минут" Дмитрий Мантула
"From CRUD to Hypermedia APIs with Spring" Владимир Цукур
Маргарита Остапчук "Що нового в Windows 10 для розробників"
"Эффективность и оптимизация кода в Java 8" Сергей Моренец
Сергей Больщиков "Angular Components: все уже за, а вы еще нет?"
"Avoiding memory leaks in Android" Денис Жучинский
Николай Паламарчук "Управление зависимостями в больших проектах"
"Reducers in Action" Антон Молдован
"Война типов: сильные против слабых" Виктор Полищук
Роман Сахаров "Stakeholders and expectations, или когда проекты успешны?"
Владислав Грязнов "Многозадачность в PHP"
Ad

More from Fwdays (20)

PDF
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
PDF
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
PPTX
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
"Як ми переписали Сільпо на Angular", Євген Русаков
"AI Transformation: Directions and Challenges", Pavlo Shaternik
"Validation and Observability of AI Agents", Oleksandr Denisyuk
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
"AI is already here. What will happen to your team (and your role) tomorrow?"...
"Is it worth investing in AI in 2025?", Alexander Sharko
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Database isolation: how we deal with hundreds of direct connections to the d...
"Scaling in space and time with Temporal", Andriy Lupa .pdf
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Ad

Михаил Чалый "Serverless Architectures using .NET and Azure"

Editor's Notes

  • #4: Я сьогодні розповім про новий бузворд serverless причому як зазвичай буває в Інтернетах кожен трактує нові базворди як йому вигідніше. Приблизно так само і з бузвордом serverless. І я тут не виключення . Отже моя презентація фактично складається з двох частин, я спрочатку введу в курс справи хто тільки чув про serverless потім десь з середни розкажу з практичної точки зору на прикладах Azure І для того щоб було легше зрозуміти, спробую розповісти звідки це все пішло.
  • #5: Почалось давно, нас цікавить час від он-премісів 1. Он-преміси це коли всі ваші тачки стоять десь поруч. Іноді гоолвняк навіть просто щоб знайти потрібний комп’ютерв. В мене була історія коли ми просто загубили CI сервер. 2. Далі були клауди. Спочатку IaaS в якому були всі ті самі проблеми що і в on-premises , але хоча б компи не губились. Потім був PaaS. Тут вже прикольніше. 3. Куди розвиватись далі? Адже замахує кожен раз налаштовувати Web Site, default page, роути і всяке таке. Тим паче з розвитком SPA, коли аппа реально може хоститсь де завгодно, головне щоб був доступ до АПІ 4. Очевидно, що ми можемо піти далі. Провайдер може запропонувати хостити для вас просто кусок коду. І якраз це і є Serverless, і ось саме про цю штуку ми з вами сьогодні і поговоримо. 5. Звісно що це не межа. Я так пербачаю що через рік-два ми побачимо щось типу валью аз сервіс.
  • #6: Проки я хотів помріяти про наступні кроки ровитку, я наткнувся на такий пакет. Це жарт.
  • #7: Отже повертаємось з невпевненого майбутнього, в наш час до serverless. Як я вже казав це кусок коду. Функція.
  • #8: Це дійсно функція. Може бути синхронною, може бути асинхронною, може бути на C#, а може бути на чомусь іншому. Може бути навіть просто exe файлик. Пізніше я покажу як воно реально проацює, і навіть якщо все буде добре то пару демок. Але головне розуміти, ми говоримо про ізольований кусок коду, який має вхід, щось робить і виходить. Якщо хтось вчився років 20 тому, то мабуть пам’ятає qbasic, там програмка могла складатись з декількох методів. Так і тут.
  • #9: Якщо хтось вже чув, читав, колупав serverless, то могло стати питання чи саме це serverless. І так і ні. Залежить від трактовки.
  • #10: Ви мабуть не чули прикол про два Львови? Схожа ситуація з і терміном serverless. Є два serverless. Спрочатку був BaaS . Це фактично концепція, коли замість того щоб писати свій бекенд, як ми завжди робимо стоврюючи АПІ, підключаючи ліби. Ми беремо існуючі бекенди (як наприклад парс.ком), робимо більшість бізнес логіки прямо на клієнті, ну а те те що критично робити на сервері, робимо якимось хуками. Ви почули слово хуки? Ось тут якраз і вийшов прикол. В BaaS все просто ідеально, поки не потрібно писати щось своє на сервері. Для цьго споачтку всі почали клепати свої костилі у вигляді можливості виклику наприклад джаваскрипта. А потім костиль перкували на фітчу. Так і з’явився FaaS. І так FaaS, це і є наш кусок коду аз а сервіс. Зараз більшість коли каже serverless мають на увазі FaaS, тож і ми так будеом робити.
  • #11: Отже функції це зрозуміло. Але чом це важливо? Якщо не брати до уваги сценарієв з хуками? Фактично сервердесс має дікілька дуже важливих осбливостей.
  • #12: Головне, це новий рівень абстракції. Фактично деплоймент юніт тепер функція. Маючи чітку асбстракцію, і беручи обмеження цієї абстракції стає легко вирішити багато питаннь Наприклад: Я функція – рантайм будь ласка прибери все що я тут насмітив Або я функція – рантайм викликай мене скільки і як і де хочеш, це взагалі твої проблеми мене викликати А рантайм може спокійно собі скейлити лінійно до безмежності. Або навпаки, упаковвати багато функцій на шарені ресурси. Або ще щосб робити що прийде в голову Скоту Гурт’є.
  • #13: Друга штука це реактивність. Насправді вона випливає з першої. Якщо я функція, за яку райнтам вирішує коли і як мене викликати. Це приводить до того що фактично я як функція завжди працюю як результат якоїсь події. ШТТП реквест, нова месага в черзі, або якісь специфічні для клауд провайдера штуки, як то запис в Blob, або в DocumentDb. А може бути по годиннику. Фактично платформа serverless, це якраз рантайм який декларативно зв’язує різні події і функцію. І опціонально повертає результат.
  • #14: Ще одна сокріше вже традиціяна особливість, ніж суто технічна. Це спосіб оплати виконання функції. Я думаю це і є те в чому заключається serverless, оплачується тільки час і ресурси роботи функції. Тобто на відміну наприклад від більшоісті PaaS де ви платите за весь час існування коду, як то WebApp в який не прийшо жодного запиту, в FaaS ви платите тільки за час роботи і використані ресурси. 18 хвилин.
  • #15: Ок, це все добре, кльово що ми не платимо, всякі там необмежені скалабіліті, моніторінг. Але все одно «функції»? Реалі? Це ж як аплікація на stored procedures в sql server! Насправді так теж можна, AWS Aurora додала можливість викликати функції в треггерах, тож я думаю скоро щось таке буде і для Azure SQL . Але я краще приведу декілька реальніших юз кейсів.
  • #16: Для іллюстрації, я розкажу мій реальний приклад, після якого я зацікавився темою серверлесс. Невеличка монолітна аплікація для дитячих садочків Мантесоррі. Реально невеличка. Без особливих навантажень, тому вона спокійно працює на мінімальних нодах. Одна з задач цієї апплікації, це обробка картинок. Також нічого воєнного, але існючого сервісу для того не знайшлось. І от якраз обробка картинок не влазить на мінімальну ноду. Десь за годину часу, функціонал перенісся в функцію, функція отримала потрібні їх ресурси, а основна аппа так і залишилась обробляти тисячі невеличких текстових запитів. Це до речі чудовий приклад для однієї з помилок адопатції serverless, коли цю архітектуру застосовують замість інших архітектур для всієї апплікації. Іноді це працює, особливо з BaaS, але в більшості випадків це оверкіл. Ось наприклад ви маєте якесь монолітний додаток, або мікросервіс. З точки зору серверлесс, це будуть тисячі функцій. Здоровий глузд підказує, що воно так не працює.
  • #17: У LangUK проекта є ідея, створити набір мікросервісів для роботи з українськими текстами. Токенізація, Named Entity Extraction, тощо. Я взявся за частину NER, технічно це така собі біліотека, MITIE, яка розповсджується як С++ код, і має біндінги під Python 2.7. Представьте що вам потрібно мати NER в вашому додатку, а Azure Cogniteve Services вам не підходить. Хочте залежність на Python2.7? А на білд процес MITIE? Не хочете. Так от хлопці натренували її для української мови, це модель в 350МБ, яка має бути вся в пам’яті. Жах. Рішення мега очевидне. Виділяємо то все як функцію. Налаштовуємо HTTP Trigger, і вуаля, всі жахливі залежності ізольовані.
  • #20: Наприклад обробка фотографій з першого прикладу, зроблена як підписка на блоб. Як тільки картинка з’являється в контенері, виконується функція, і результат збрегається в інший контейнер достпний для скачування апплікушкою. Робота по графіку це також реакція на подію. Просто події генерується за допомгою scheduler.
  • #21: З рахунок обмежень функції, набирає популярність використання функції як GraphQL ендпоінтів, там якраз одна точка доступу. Для .NET світу, майже аналог це Odata, але я якщо чесно не дуже бачу в цьому сенс. Маюучи таку абстаракцію як інструмент, можна пробувати вирішувати дуже різні задачі. Можливо обробляти команди в CQRS, можливо денормалізовувати евенти в евент сорсінгу. В цілому доволі багато задач для яких ця архітектура має реальний сенс.
  • #22: Поговорили про юзкейси, тепер припустимо що ми вирішили робити серверлесс відносно стандарту апплікацію. З чого почати? З декомпозиції. І тут є два піходи.
  • #23: Мабуть перше що пробують робити починаючи копати серверлесс, це переносити сервіси та мікросервіси на функції. Виходить щось типу одна функція яка насправді виконує декілька функцій. Це і називають мікросервісом в серверлесс. Як на мене це скоріше антипаттерн, але коли не можна, але дуже хочеться, то можна. Гловне потрібно розуміти. Це функція, вона вам не допоможе з роутінгом, паралельним виконанням, тощо.
  • #24: Другий варіант це на кожну операцію по функції. Це більше схоже на те як має бути. І це як буде пропонувати робити Azure Portal, GET, POST, DELETE – все окремі ізольовані функції. Головна проблема – неможливо керувати такою кількістю функцій. Так виглядає, що жоден з двох варіантів не ідеальний, і так і є.
  • #25: Все з теор частиною закінчили, переходимо до більш прагматичної частини.
  • #26: Я точно не знаю хто перший все це придумав. Думаю Amazon, але на поточний момент майже всі провайдери в підтримують так чи інакше serverless. AWS Lambda - мабуть найкрутіший він задає моду. Якщо AWS Lambda зробили підтримку в stored procedures, то можна очікувати що і інші провайдери скоро підтягнуться. AWS Lambda вміє тільки Linux , підтримує NodeJS і ще щось. Але через NodeJS запускаються будь що, тому комуніті нафігачила просто нереальну кількість фреймоврків і підтримок. Наприклад фремворк serverless якраз для AWS Lambda . Крім AWS Lambda, у Amazonа ще круто підтримується BaaS. Когніто для данних і аутентифікації. Всі інші сервіси також достпні. Події можеуть генерувати майже всі сервіси. Приклади, це класичні події з S3, SES. SNS, DynamoDb, Aurora, CloudWatch. IBM OpenWhisk в IBM BlueMix. Швидше за все також тільки Лінукс. Також NodeJS. Забув додати, NodeJS це як де факто стандарт. Цікава подробиця це підтримка Docker. Теортетично підтримує багато чого з CloudFoundry та OpenStack. Google Cloud Functions, це типу, а давайте і ми зробимо. Швидше за все тільки Лінукс. Працює як хуки для Firebase. Auth0 WebTasks – це цікавий феномен, це єдиний активний гравець на цьому ринку що не є клайд провайдером. Я точно не знаю де саме вони виконують свої перйлоади, але сам Auth0 для файловера знаходиться в Azure і в AWS. І нарешті Azure Functions. Windows, NodeJS, C#. Підтримка свого клауда добра. Менше ніж в AWS, але багато речей можна робити. Далі я зконцентруюсь на Azure Functions.
  • #29: Всі плюшки з App Service
  • #32: Моноліти писати легко, до якогось часу. Мікросервіси писати складніше з початку, більш менш норм і потім. Пару функцій написати дуже легко. 10 дуже легко. Далі я собі то не уявляю. На поточний момент єдиний спосіб групування, це аплікація. Якщо хстоь бачив як виглядає Management Studio з логікою в stored procedures, це туди. Функції можуть розгоратитись всі разом, а можуть поокремо. Всі разом втрачається частина гнучкості. Поокремо тяжко не провтикати і не зрозуміло якщо CI робити. Функції підтримують вресіонування, але проблема та сама що і з розгортанням. Незрозуміло що робити коли функцій багато.