Платформа
Среда выполнения
Инстанс — обычный Linux-процесс в изолированном пространстве имён. Ниже — границы, внутри которых он живёт.
Файловая система
/app— код ревизии, доступен только на чтение./tmp— запись разрешена, до 512 МБ, очищается при перезапуске./var/run/vlone— сокет телеметрии и метаданные инстанса.
Локальный диск эфемерен и не общий между инстансами. Для постоянных данных используйте объектное хранилище или внешнюю БД.
Сеть
Входящий трафик приходит только на порт из переменной PORT.
Исходящие соединения разрешены без ограничений, но проходят через NAT региона
с фиксированным пулом адресов — их можно добавить в allowlist у партнёров.
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, "ok")
})
http.ListenAndServe(":"+port, nil)
}Переменные окружения
| Переменная | Пример | Описание |
|---|---|---|
PORT | 8080 | Порт, который обязан слушать сервис |
VLONE_REGION | msk1 | Регион инстанса |
VLONE_REVISION | r184 | Текущая ревизия |
VLONE_INSTANCE_ID | msk1-a7f3 | Идентификатор инстанса |
VLONE_ENV | production | Имя окружения |
Сигналы и завершение
При выводе инстанса из ротации процесс получает SIGTERM.
У него есть drain_timeout (по умолчанию 30 секунд), чтобы
закрыть соединения. После этого приходит SIGKILL.
const server = app.listen(process.env.PORT);
process.on('SIGTERM', () => {
server.close(async () => {
await db.pool.end();
process.exit(0);
});
// страховка: не висеть дольше окна drain
setTimeout(() => process.exit(1), 25_000).unref();
});Лимиты инстанса
| Размер | vCPU | Память | Соединений |
|---|---|---|---|
micro | 0.25 | 256 МБ | 200 |
small | 0.5 | 512 МБ | 500 |
medium | 1 | 1 ГБ | 1 000 |
large | 2 | 4 ГБ | 4 000 |
xlarge | 4 | 8 ГБ | 8 000 |
Холодный старт
При scale.min = 0 инстанс останавливается после 5 минут без
запросов. Первый запрос после простоя ждёт запуска: 120–400 мс для Go и Rust,
300–900 мс для Node.js и Python. Чтобы холодных стартов не было совсем,
поставьте scale.min = 1.