Термин start в английском языке означает начало или запуск действия. В контексте разработки это «запустить» код без необходимости управлять серверной инфраструктурой. Бессерверные (serverless) функции позволяют сосредоточиться на бизнес‑логике, а облако берёт на себя масштабирование, мониторинг и оплату только за фактическое время выполнения.
Что такое бессерверные функции?
Бессерверные функции – это небольшие независимые куски кода, которые вызываются в ответ на событие (HTTP‑запрос, запись в очередь, изменение в базе данных и т.д.). Платформы автоматически выделяют ресурсы, исполняют функцию и освобождают их сразу после завершения.
Ключевые платформы для PHP и Python
- AWS Lambda – поддерживает PHP через слой Bref и нативно Python.
- Google Cloud Functions – нативный Python, PHP через контейнеры.
- Azure Functions – поддерживает Python, PHP можно запустить в Linux‑контейнере.
- Cloudflare Workers – ориентированы на JavaScript, но позволяют запускать WASM‑модули, что открывает путь для PHP‑runtime.
Как подготовить PHP‑функцию для AWS Lambda (пример с Bref)
Самый популярный способ – использовать Bref, который упаковывает ваш код в Docker‑образ совместимый с Lambda.
# composer.json
{
"require": {
"bref/bref": "^2.0",
"laminas/laminas-diactoros": "^2.13"
}
}
Создаём обработчик:
// src/Handler.php
getQueryParams()['name'] ?? 'World';
$body = "Hello, {$name}!";
return new Response('php://memory', 200, ['Content-Type' => 'text/plain'])
->withBody(
(new \Laminas\Diactoros\Stream('php://temp', 'r+'))
->write($body)
);
};
Файл serverless.yml для деплоя:
service: php-start
provider:
name: aws
runtime: provided.al2
plugins:
- ./vendor/bref/bref
functions:
hello:
handler: src/Handler.php
events:
- httpApi:
path: /hello
method: GET
Деплой командой sls deploy. После публикации вы получаете URL, по которому функция доступна сразу же – без настройки EC2‑инстансов.
Сравнительный пример: Python‑функция в AWS Lambda
# handler.py
import json
def lambda_handler(event, context):
name = event.get('queryStringParameters', {}).get('name', 'World')
return {
'statusCode': 200,
'headers': {'Content-Type': 'text/plain'},
'body': f'Hello, {name}!'
}
Для Python достаточно разместить файл handler.py и указать в конфигурации handler: handler.lambda_handler. Сравнительно простая настройка, но в случае PHP требуется дополнительный слой (Bref), что подчёркивает важность выбора правильного инструмента.
Архитектурные паттерны для бессерверных функций
- Event‑driven (событийно‑ориентированная) – функции реагируют на SNS/SQS, CloudWatch Events, Pub/Sub.
- API‑gateway – функции выступают как микросервисы, обслуживая REST/GraphQL запросы.
- Batch processing – обработка файлов из S3, трансформирование данных в Athena/BigQuery.
- Background jobs – запуск длительных задач через Step Functions или Cloud Tasks.
Плюсы и минусы использования PHP в serverless
| Плюсы | Минусы |
|---|---|
| ‑ Возможность использовать существующий код‑базу на PHP. ‑ Хорошая поддержка Composer и автолоадеров. ‑ Библиотеки Bref упрощают деплой. |
‑ Холодный старт (cold start) выше, чем у нативных рантаймов. ‑ Требуется слой/контейнер, что увеличивает размер артефакта. ‑ Ограниченная поддержка некоторых расширений. |
Лучшие практики
- Минимизируйте размер зависимостей – используйте
composer install --no-dev --optimize-autoloader. - Разделяйте функции по ответственности (single‑purpose).
- Внедряйте логирование через
stderrили сервисы CloudWatch/Stackdriver. - Обрабатывайте ошибки и тайм‑ауты – возвращайте корректные HTTP‑коды.
- Тестируйте локально с
sam local invoke(для AWS) илиfunctions-framework(для GCP).
Отладка и мониторинг
Для PHP‑функций Bref автоматически интегрируется с CloudWatch Logs. Для более глубокого анализа используйте X‑Ray (AWS) или OpenTelemetry. В Python‑окружении аналогичные инструменты доступны из коробки.
Когда стоит выбирать серверный подход вместо бессерверного
Если ваш код требует длительного выполнения (>15 минут), сложных сетевых соединений или специфических системных библиотек, традиционный сервер (Docker, Kubernetes) будет более надёжным.
Заключение
Бессерверные функции позволяют быстро «запустить» (start) новые возможности без лишних затрат на инфраструктуру. PHP, хотя и не является нативным рантаймом, успешно интегрируется через инструменты вроде Bref, открывая путь к модернизации существующих проектов. Python остаётся самым простым вариантом для новых serverless‑сервисов, но правильный выбор зависит от вашего стека и бизнес‑требований.
Услуги RybinskLab
RybinskLab предлагает полный спектр разработки и поддержки бессерверных решений: от архитектурного проектирования и миграции legacy‑кода на PHP‑serverless до создания масштабируемых микросервисов на Python. Свяжитесь с нами, чтобы ускорить вывод продукта на рынок и снизить операционные расходы.