# Размеры приложения

> Eco и High: чем они отличаются гарантией процессора, как выбрать размер и сменить его.

Раздел: Приложение
Источник: https://nodbox.ru/docs/apps/sizes/

---
Размер определяет, сколько процессора и памяти получает приложение, и он же задаёт цену. Размеров шесть: Eco и High, у каждого по 256 МБ, 512 МБ или 1 ГБ памяти. Меняется размер в настройках приложения и применяется со следующей версией.

## Шесть размеров и их цены

Цена названа за месяц круглосуточной работы. Месяц здесь равен 30 суткам, а списание идёт по минутам: приложение, которое работает не круглые сутки, стоит меньше. Минуты сна не тарифицируются, об этом - страница [Сон и пробуждение](/docs/apps/sleep/).

| Размер | Имя в API | Процессор | Память | Цена за месяц |
| --- | --- | --- | --- | --- |
| Eco, 256 МБ | `eco-256` | 0,25 ядра | 256 МБ | 190 ₽ |
| Eco, 512 МБ | `eco-512` | 0,5 ядра | 512 МБ | 380 ₽ |
| Eco, 1 ГБ | `eco-1024` | 1 ядро | 1 ГБ | 760 ₽ |
| High, 256 МБ | `high-256` | 0,25 ядра | 256 МБ | 590 ₽ |
| High, 512 МБ | `high-512` | 0,5 ядра | 512 МБ | 1 190 ₽ |
| High, 1 ГБ | `high-1024` | 1 ядро | 1 ГБ | 2 380 ₽ |

Процессор и память растут вместе: отдельно докупить память к маленькому процессору нельзя, размеров ровно шесть. Каталог с актуальными ценами отдаёт `GET /api/v1/presets`, цена в нём названа в копейках. Если не выбрать размер, приложение получает Eco, 512 МБ.

Размер есть и у веб-приложения, и у воркера. Воркер не засыпает, поэтому платит за все минуты своей работы. Чем они отличаются, разбирает страница [Веб-приложения и воркеры](/docs/apps/types/).

## Eco и High отличаются гарантией процессора

В паре Eco и High одного объёма процессор и память одинаковые, а цена различается чуть больше чем втрое. Разница в том, чем платформа ручается.

- **Eco.** Процессор делится с соседями. За приложением закреплена четверть его доли, остальное оно берёт, пока соседи её не заняли. Под общей нагрузкой время ответа может плавать.
- **High.** Процессор закреплён за приложением целиком, соседи на него не влияют. Время ответа ровное.

Память в обоих видах закреплена полностью и ни с кем не делится. High не быстрее Eco того же объёма: потолок у них один, High держит его стабильно.

Панель подсказывает, что для чего подходит:

| Размер | Для чего |
| --- | --- |
| Eco, 256 МБ | бот или маленький сервис |
| Eco, 512 МБ | сайт и небольшое API |
| Eco, 1 ГБ | приложение с базой |
| High, 256 МБ | небольшой сервис с ровным ответом |
| High, 512 МБ | продакшн без всплесков |
| High, 1 ГБ | магазин, оплата, API |

## Приложение получает купленное

Размер - потолок: приложение работает в границах купленных процессора и памяти. Что происходит у границы, зависит от ресурса.

- **Процессор.** Приложение не падает. Оно получает меньше процессорного времени и отвечает медленнее.
- **Память.** Платформа останавливает процесс приложения и запускает его заново. Всё, что процесс держал в памяти, теряется.

Потолок немного выше купленного: платформа оставляет небольшую долю для своих служебных нужд, и приложение иногда может в неё зайти. Опираться на неё нельзя, размер выбирай по купленному. Поэтому проценты в метриках могут быть больше ста: это правда о приложении, и платформа их не обрезает.

## Нехватку размера видно в панели

Размер мал, когда приложение упирается в потолок. Признаки собраны в разделе «Наблюдаемость»:

- **Метрики.** Процессор и память показаны в процентах от купленного размера. Рядом считаются перезапуски приложения. Подробности - [Метрики приложения](/docs/observability/metrics/).
- **Состояние.** Если приложение падает снова и снова, его состояние меняется на «Упало», когда платформа видит сбой. Слова разобраны на странице [Состояния приложения](/docs/observability/states/).
- **Логи.** Процесс, остановленный за память, не успевает ничего написать: лог обрывается на моменте остановки. Где смотреть строки, написано в разделе [Логи приложения](/docs/observability/logs/).
- **Деплой.** Если приложению не хватило памяти ещё на запуске, версия не выкатывается. Причина - `out_of_memory`, а панель пишет: «Приложению не хватило памяти, и его процесс был остановлен. Возьми размер побольше». Отказ приходит примерно через минуту после запуска, а не по истечении всего срока деплоя. Другие причины отказа собраны в разделе [Версии и откат](/docs/deploy/versions/).

## Как выбрать размер

Начни с Eco, 512 МБ и посмотри на метрики за сутки.

1. Память близка к 100% или есть перезапуски: возьми размер побольше. Память не сжимается, поэтому приложению, которому её не хватило, помогает только больший размер.
2. Процессор стоит около 100%, а ответы медленные: возьми размер побольше.
3. Метрики спокойные, но время ответа скачет, когда на платформе шумно: переходи с Eco на High того же объёма.
4. Запас большой: размер можно снизить, и ты заплатишь меньше.

Приложению с редкими запросами High обычно не нужен: Eco хватает, пока ровное время ответа не требуется. Продакшн с оплатой и API под нагрузкой - случай для High.

## Как сменить размер

Размер меняется в любой момент, пересоздавать приложение не нужно. Правка сама ничего не деплоит: каждая версия снимает настройки в момент заказа, поэтому новый размер доезжает со следующим деплоем. Пока он идёт, работающая версия отвечает на прежнем размере.

В панели:

1. Открой приложение и перейди на вкладку «Настройки».
2. В карточке «Мощность» выбери вид, Eco или High, и размер. Панель показывает цену выбранного размера и сколько места он займёт в проекте.
3. Отметь «Задеплоить после сохранения» и нажми «Сохранить и задеплоить». Без отметки «Сохранить» только запишет размер, и он подхватится ближайшей версией.

У приложения из репозитория деплой собирает код заново, поэтому вместе с размером выкатится и свежее состояние ветки. У приложения из архива отметки в настройках нет: каждой версии нужен свой архив, и новый размер приедет с ним. У приложения из готового образа версия возьмёт ссылку на образ, записанную в приложении.

По API размер меняет `PATCH /api/v1/applications/{id}` с полем `preset`, а версию заказывает `POST /api/v1/applications/{id}/revisions`:

```json
{ "preset": "high-512" }
```

Токену для `PATCH` нужны два права сразу: «деплоить» и «менять мощность». Для заказа версии хватает «деплоить». Права разобраны в разделе [Токены и права](/docs/automation/tokens/).

Откат на прежнюю версию возвращает и её размер. Сегодняшние настройки приложения откат не подхватывает: их снимет следующий деплой.

## Что бывает с деньгами при смене

Цена идёт за размером работающей версии, а не за размером в настройках. Сохранённый, но не выкаченный размер цену не меняет. Новая цена начинает действовать после выката: платформа сверяет цену раз в пять минут, поэтому смена может запоздать на несколько минут, и это время считается по прежней цене. Уже списанное не пересчитывается.

Сколько денег нужно на балансе, зависит от направления:

- **Размер больше.** Для заказа версии нужны деньги на неделю содержания прироста цены. Если их не хватает, заказ отвечает `402`.
- **Размер меньше и повторный деплой того же размера.** Они проходят, даже если денег на нынешний размер уже не хватает: проект от них не дорожает.

Проект, заблокированный за долг, новую версию не закажет, а значит и размер не сменит.

## Размер занимает место в проекте

У проекта есть лимиты на процессор и память. Приложение держит в них свой размер, умноженный на максимум экземпляров, и держит даже спящим или остановленным. По умолчанию лимиты проекта - 6 ядер и 6 ГБ на все приложения, из них выходит, например, шесть приложений Eco, 1 ГБ по одному экземпляру.

Проверка идёт в момент сохранения. Если размер больше и места нет, `PATCH` отвечает `403`, а в ответе стоят занятое, лимит и запрошенное. Понижение место освобождает только после деплоя, пока работает экземпляр прежнего размера. Лимиты и как их поднять - в разделе [Лимиты и квоты](/docs/project/limits/).

## Что дальше

- [Сон и пробуждение](/docs/apps/sleep/) - когда приложение засыпает и почему минуты сна не тарифицируются
- [Автомасштабирование](/docs/apps/scaling/) - сколько экземпляров поднимает платформа под нагрузку
- [Метрики приложения](/docs/observability/metrics/) - процессор и память в процентах от купленного
- [Состояния приложения](/docs/observability/states/) - что значит «Упало» и как платформа его определяет
- [Тарификация](/docs/project/billing/) - как списываются деньги и что видно в балансе
- [Лимиты и квоты](/docs/project/limits/) - сколько процессора и памяти доступно проекту
