在 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
.
下的应用程序视图中查看实例数
将实例数重新设置为一个解决了问题。但如果该计划下的其他服务要求实例数量保持不变,
需要创建一个没有额外实例的新服务计划。
我编写了一个从文件系统读取以确定状态的服务,并保持该状态一段时间而不是不断更新文件系统。因此,最重要的是该服务只有一个实例。现在 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
.
将实例数重新设置为一个解决了问题。但如果该计划下的其他服务要求实例数量保持不变, 需要创建一个没有额外实例的新服务计划。