在 Web 应用程序中禁用副本服务

Disable replica services in Web Apps

我编写了一个从文件系统读取以确定状态的服务,并保持该状态一段时间而不是不断更新文件系统。因此,最重要的是该服务只有一个实例。现在 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>

启动后,这些调用 return 一个像 1, 1, 2, 2, 3, 3... 这样的序列,对我来说这表明有两个实例 运行 和一个平衡器轮询这两个实例。该模式似乎相当规则,例如没有跳过其他服务。

如果我没理解错的话,每个 Azure WebApp 都有一个关联的 'scm' 服务站点,运行 包括 Kudu 和其他站点扩展。

此外,如 GitHub 页面所述,您可以选择对用户站点和 scm 站点或其他站点使用相同的过程。

WEBSITE_DISABLE_SCM_SEPARATION=true - 启用分离时(默认),主站点和 scm 站点 运行 在不同的沙箱中。一些结果行为:

• 有了分离,当你停止站点时,scm站点仍然是运行ning,你可以继续使用git和msdeploy。 • 通过分离,Main 站点和scm 站点各有自己的本地文件。因此,您不会从 Kudu 控制台看到主站点的临时文件。 注意:关闭分离被认为是不再完全支持的旧模式。有关详细信息,请参阅 doc

请告诉我这是您要查找的内容还是其他内容。

答案很简单。默认情况下,根据服务计划创建的应用程序可能会扩展到多个实例。就我而言,它确实设置为两个。可以在 Scale Out.

下的应用程序视图中查看实例数

将实例数重新设置为一个解决了问题。但如果该计划下的其他服务要求实例数量保持不变, 需要创建一个没有额外实例的新服务计划。