Отключить службы реплики в веб-приложениях - PullRequest
0 голосов
/ 24 июня 2019

Я написал сервис, который читает из файловой системы, чтобы определить состояние, и некоторое время удерживает это состояние вместо постоянного обновления файловой системы.Поэтому крайне важно, чтобы был только один экземпляр этой службы.Теперь кажется, что Web Apps по умолчанию создает два экземпляра службы Flask.

Это документально подтверждено или я неправильно понял некоторые настройки?Это на самом деле реплики или какой-то другой механизм?И самое главное, как я могу отключить эту функцию?

Моя фабрика приложений:

from flask import Flask


def create():
    app = Flask(__name__)
    d = {'t': 0}

    @app.route('/', methods=['GET'])
    def main():
        d['t'] += 1
        return 'Calls: %d' % d['t'], 200

    return app

И web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
    <add key="WSGI_HANDLER" value="app.create()" />
    <add key="WSGI_LOG" value="D:\home\site\wwwroot\wsgi.log" />
  </appSettings>
  <system.webServer>
    <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
        scriptProcessor="D:\home\python364x64\python.exe|D:\home\python364x64\wfastcgi.py"
        resourceType="Unspecified" requireAccess="Script"/>
    </handlers>
  </system.webServer>
</configuration>

После запуска эти вызовы возвращают последовательность, подобную 1, 1, 2, 2, 3, 3..., которая, как мне кажется, указывает на то, что запущены два экземпляра, и балансировщик выполняет циклический перебор этих двух.Шаблон выглядит довольно регулярно, например, не пропуская другой сервис.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Ответ был простым.Приложения, созданные в рамках плана обслуживания, по умолчанию могут быть масштабированы до нескольких экземпляров.В моем случае это было действительно два.Можно просмотреть количество экземпляров в представлении приложения в разделе Scale Out.

Установка количества экземпляров обратно в один решило проблему.Но если другим службам по этому плану требуется, чтобы количество экземпляров оставалось неизменным, создание нового плана обслуживания без дополнительных экземпляров не требуется.

0 голосов
/ 24 июня 2019

Если я правильно вас понял, у каждого веб-приложения Azure есть связанный сайт службы «scm», который запускает как Kudu, так и другие расширения сайта.

Кроме того, как указано на странице GitHub, у вас есть возможность использовать один и тот же процесс для сайта пользователя и сайта scm или иным образом.

WEBSITE_DISABLE_SCM_SEPARATION = true - когда разделение включено (по умолчанию), основной сайт и сайт scm работают в разных песочницах. Некоторое результирующее поведение:

• С разделением, когда вы останавливаете сайт, сайт scm все еще работает, и вы можете продолжать использовать git и msdeploy. • С разделением каждый из сайтов Main и scm имеет свои локальные файлы. Таким образом, вы не увидите временные файлы основного сайта с консоли Kudu. Примечание. Отключение разделения считается устаревшим режимом, который больше не поддерживается полностью. Подробнее см. документ

Пожалуйста, дайте мне знать, если это то, что вы ищете или что-то еще.

...