54 lines
5.6 KiB
Markdown
Raw Normal View History

2024-12-11 20:30:18 +03:00
---
aliases:
tags:
- maturity/🌱
date: 2024-12-08
---
**Serverless-архитектура** — это модель разработки приложений, при которой серверы все еще существуют, но управление ими полностью скрыто от разработчиков. Вместо этого, разработчики пишут небольшие, автономные функции, которые исполняются в облачной среде. Инфраструктурой управляет провайдер (например, AWS, Azure, Google Cloud).
Несмотря на название, серверы в Serverless есть, но разработчики:
- Не управляют серверами напрямую.
- Не занимаются их настройкой, мониторингом или масштабированием.
- Платят только за фактическое время выполнения кода (pay-as-you-go).
**Основные принципы**
- **Вызов на основе событий**. Код (функция) запускается в ответ на событие: HTTP-запрос, запись в базу данных, загрузка файла и т. д. Пример: загрузка изображения в облако запускает функцию для изменения его размера.
- **Автоматическое масштабирование**. Серверная инфраструктура автоматически увеличивает или уменьшает количество ресурсов в зависимости от нагрузки. Пример: при росте числа запросов добавляются новые инстансы функции.
- **Оплата за использование**. Вы платите только за фактическое время выполнения кода, а не за простаивающие серверы. Пример: если функция исполняется 200 мс, вы платите только за эти миллисекунды.
- **Фокус на коде**. Разработчики сосредотачиваются на написании бизнес-логики, а не на настройке инфраструктуры.
**Преимущества Serverless**
- **Снижение затрат**. Отсутствие расходов на простаивающие ресурсы. Вы платите только за выполнение кода.
- **Автоматическое масштабирование**. Приложение автоматически адаптируется к изменяющимся нагрузкам.
- **Быстрота разработки**. Упрощённое управление инфраструктурой позволяет сосредоточиться на бизнес-логике.
- **Упрощённое развертывание**. Разработчики могут быстро выкатывать изменения, так как управление серверами осуществляется провайдером.
**Недостатки**
- **Задержки холодного старта**. При запуске функции, которая долгое время не использовалась, может возникнуть задержка из-за необходимости инициализации контейнера.
- **Ограниченная гибкость**. Провайдеры накладывают ограничения на использование определённых языков, библиотек и объёма ресурсов.
- **Трудности отладки**. Локальное тестирование может быть сложным из-за особенностей облачных платформ.
- **Зависимость от провайдера**. Использование специфичных для платформы инструментов может усложнить переносимость приложения.
- **Высокая стоимость при больших нагрузках**. Для очень нагруженных систем Serverless может оказаться дороже традиционной модели.
Serverless подходит, если:
- Вы разрабатываете приложения с переменной нагрузкой.
- Вам нужна быстрая обработка событий (ETL, IoT, уведомления).
- Вы хотите минимизировать управление инфраструктурой.
Serverless может быть не лучшим выбором, если:
- Требуется минимальная задержка (например, в высоконагруженных системах реального времени).
- Вы работаете с задачами, требующими долгого выполнения или сложных вычислений.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
**Родитель**:: [[Архитектурный паттерн]]
**Источник**::
**Создана**:: [[2024-12-08]]
**Автор**::
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->