Типы записей Lua
Типы записей Lua
Заголовок раздела «Типы записей Lua»Конфигурация Lua-записей: функций, процессов, workflows и библиотек.
Типы записей
Заголовок раздела «Типы записей»| Тип | Описание |
|---|---|
function.lua | Функция без состояния, запускается по запросу |
process.lua | Долгоживущий актор с состоянием |
workflow.lua | Устойчивый workflow (Temporal) |
library.lua | Разделяемый код, импортируемый другими записями |
module.lua | Модульная поверхность (библиотека с несколькими методами) |
Каждый тип имеет предкомпилированный аналог в виде байткода (function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc), который создаётся wippy pack --bytecode. Авторы пишут .lua-записи; типы байткода создаются автоматически при упаковке.
Общие поля
Заголовок раздела «Общие поля»Все Lua-записи имеют эти поля:
| Поле | Обязательно | Описание |
|---|---|---|
name | да | Уникальное имя в пространстве имён |
kind | да | Один из Lua-типов выше |
source | да | Путь к Lua-файлу (file://path.lua) |
method | function/process/workflow | Экспортируемая функция (библиотеки её не используют) |
modules | нет | Разрешённые модули для require() |
imports | нет | Другие записи как локальные модули |
meta | нет | Поисковые метаданные |
function.lua
Заголовок раздела «function.lua»Функция без состояния, вызываемая по запросу. Каждый вызов независим.
- name: handler kind: function.lua source: file://handler.lua method: main modules: - http - jsonИспользуйте для: HTTP-обработчиков, трансформаций данных, утилит.
process.lua
Заголовок раздела «process.lua»Долгоживущий актор, хранящий состояние между сообщениями. Общается через передачу сообщений.
- name: worker kind: process.lua source: file://worker.lua method: main modules: - process - sqlИспользуйте для: фоновых воркеров, сервисных демонов, акторов с состоянием.
Для запуска как супервизируемого сервиса:
- name: worker_service kind: process.service process: app:worker host: app:processes lifecycle: auto_start: true restart: max_attempts: 10workflow.lua
Заголовок раздела «workflow.lua»Устойчивый workflow, переживающий перезапуски. Состояние сохраняется в Temporal.
- name: order_processor kind: workflow.lua source: file://order_workflow.lua method: main modules: - workflow - timeИспользуйте для: многошаговых бизнес-процессов, длительных оркестраций.
library.lua
Заголовок раздела «library.lua»Разделяемый код, импортируемый другими записями.
- name: helpers kind: library.lua source: file://helpers.lua modules: - json - base64Другие записи ссылаются через imports:
- name: handler kind: function.lua source: file://handler.lua method: main imports: helpers: app.lib:helpersВ Lua-коде:
local helpers = require("helpers")helpers.format_date(timestamp)Поле modules контролирует, какие модули загружаются через require():
modules: - http - json - sql - processchannel, print, subscribe и unsubscribe загружаются как Lua-глобалы — их не нужно указывать в modules:.
Доступны только перечисленные модули. Это обеспечивает:
- Безопасность: запрет доступа к системным модулям
- Явные зависимости: понятно, что нужно коду
- Детерминизм: workflows получают только детерминированные модули
См. Lua Runtime для доступных модулей.
Импорты
Заголовок раздела «Импорты»Импорт других записей как локальных модулей:
imports: utils: app.lib:utils # require("utils") auth: app.auth:helpers # require("auth")Ключ становится именем модуля в Lua-коде. Значение — ID записи (namespace:name).
Конфигурация пула
Заголовок раздела «Конфигурация пула»Настройка пула выполнения для функций:
- name: handler kind: function.lua source: file://handler.lua method: main pool: type: adaptive # по умолчанию size: 4 # начальное число воркеров max_size: 16 # верхний предел для эластичных пулов| Поле | Пулы | Описание |
|---|---|---|
type | все | Реализация планировщика (см. таблицу ниже) |
size | static, lazy, adaptive | Начальное число воркеров |
workers | engine v2 | Число рабочих потоков |
buffer | static, adaptive | Размер очереди задач (по умолчанию workers * 64) |
warm_start | adaptive | Прекомпиляция записей при старте |
max_size | lazy, adaptive | Верхний предел эластичного роста (по умолчанию 16) |
| Тип | Поведение |
|---|---|
inline | Синхронное выполнение в горутине вызывающего. Минимальная задержка, без изоляции между вызовами. |
lazy | Нет idle-воркеров, создаются по требованию, удаляются в простое. |
static | Пул фиксированного размера на каналах. Предсказуем при стабильной нагрузке. |
adaptive | Самомасштабирующийся пул — растёт под нагрузкой, сжимается в простое. По умолчанию. |
Метаданные
Заголовок раздела «Метаданные»Используйте meta для маршрутизации и обнаружения:
- name: api_handler kind: function.lua meta: type: handler version: "2.0" tags: [api, users] source: file://api.lua method: handle modules: - http - jsonМетаданные доступны для поиска через реестр:
local registry = require("registry")local handlers = registry.find({type = "handler"})См. также
Заголовок раздела «См. также»- Типы записей — справочник всех типов
- Вычислительные единицы — функции vs процессы vs workflows
- Lua Runtime — доступные модули