Appengine - ограничить количество экземпляров
Там действительно должна быть возможность ограничить определенное количество экземпляров, несмотря ни на что. В меню настроек приложения все, что вы можете сделать, это ограничить максимальное количество экземпляров IDLE, что, я не уверен, работает ли оно так, как задумано. Я имею в виду, что я установил для Max Idle Instances значение 1, а для Min Pending Latency - 15 секунд, но я по-прежнему вижу 2 экземпляра, работающие время от времени, в течение длительного периода времени без запросов. Разве они не должны закрываться через 15 минут простоя? И почему он даже запускает экземпляр секунд с этими настройками, учитывая, что ни один запрос не достиг 15-секундной задержки?
Я запускаю простое Python-приложение "Какой у меня IP", которое действительно не требует высокой производительности. Я имею в виду, что на самом деле не имеет значения, если ответ идет через 100 мс или 5 секунд, все, что имеет значение, это то, что работает только один экземпляр, так что эти ежедневные 28 часов экземпляра никогда не заканчиваются.
2 ответа
Мое приложение в настоящее время имеет только небольшое количество трафика, поэтому мне нужно платить даже маленький доллар. После изучения и проб столько вариантов о том, как оптимизировать класс экземпляра. Я нашел следующую настройку, которая дает мне самые низкие тарифы на оплату при запуске приложения с включенным статусом оплаты в Google Appengine.
Я использую F1 Class, чтобы установить экземпляр Frontend.
Здесь я код в версии yaml.
instance_class: F1
automatic_scaling:
max_idle_instances: 1 # default value
min_pending_latency: automatic # default value
max_pending_latency: 30ms
Я использую класс B1 для установки экземпляра Backend.
Здесь я код в версии yaml.
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 10m
А вот код для добавления в appeengine.web.xml (если компилируется Java с Maven)
<threadsafe>true</threadsafe>
<instance-class>B1</instance-class>
<basic-scaling>
<max-instances>1</max-instances>
<idle-timeout>10m</idle-timeout>
</basic-scaling>
Обычно я использую 4 модуля, 2 модуля в классе F1 и 2 модуля в классе B1. Они стоят мне 0 в день. Однако, когда мой сайт загружается из-за трафика, я поднимаю класс до F2 и B2, и общая ежедневная стоимость составляет менее 0,50 доллара США.
Вот несколько советов, чтобы уменьшить оплачиваемый экземпляр:
- Если ваш модуль класса F работает более 28 часов в сутки, рассмотрите возможность создания другого модуля с классом B. Таким образом, вы получаете еще 9 бесплатных экземпляров часов. Вы можете использовать его для запуска любой другой работы, например cron, task или background. Убедитесь, что автоматическое отключение /_ah/stop работает правильно. Не позволяйте долгому простаивающему экземпляру считаться.
- Упростите свою домашнюю страницу или целевую страницу, чтобы запустить с минимальным количеством экземпляров. По возможности не более одного экземпляра. Пусть он запускается в большем количестве экземпляров только тогда, когда ваш посетитель что-то делает на вашей странице. Подумайте об оптимизации своего сайта, воспользовавшись бесплатной квотой для хранилища BLOB-объектов, хранилища данных и хранилища данных. Вы также можете использовать скрипт в Google Hosted Libraries, чтобы минимизировать исходящую пропускную способность.
- Всякий раз, когда запрос трафика передается обработчику модуля, он обязательно запускает экземпляр. Поэтому, помимо установки срока действия статического кэша, желательно, чтобы статические файлы, такие как html, images, js и css, подавались из вашего хранилища с помощью клиентской библиотеки Google Cloud Storage (GCS) и gsutil.
Установите его как публичное чтение. С этой схемой ваш экземпляр будет значительно сокращен, так как он не влияет на запрос. Возможно, вы считаете, что ежемесячные цены GCS намного дешевле по сравнению с ежемесячным счетом, поднятым общей совокупной стоимостью почасового экземпляра.
Узнайте, как настроить ведро в качестве веб-сайта с использованием поддоменов (включая www), как описано здесь. Кроме того, если вы хотите использовать свой пустой домен, вы можете либо перенаправить его на www, задав A (Host) и AAAA, либо вы даже можете сделать его полностью независимым, если ваш голый домен может быть установлен как Alias /AName напрямую в GCS (c.storage.googleapis.com). - Если ваше приложение работает динамически на основе операций с данными, вам нужно знать, что каждый тип базы данных, такой как MySQL, Cloud Storage и т. Д., Также будет запускать экземпляр или счетчик операций. Убедитесь, что вы блокируете нежелательный трафик ботов и не обслуживаете их динамическую страницу. Я предлагаю вам также рассмотреть возможность использования " Datastore Small Operations ". По сравнению с другими операциями с базой данных такая операция с данными обойдется вам бесплатно. Конечно, вам нужно будет оптимизировать свой код, чтобы использовать его как Quercus. Здесь есть хорошая дискуссия, здесь и здесь.
Я изменил свой блок yaml Automatic_scale на это, и теперь у меня всегда работает максимум только один экземпляр. С этой конфигурацией вы никогда не сможете превысить бесплатную квоту.
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: 1
min_pending_latency: automatic
max_pending_latency: 0.030s
max_instances: 1