我的技术堆栈是Redis作为通道后端,Postgresql作为数据库,Daphne作为ASGI服务器,Nginx作为整个应用程序.使用Docker Swarm部署所有内容,只有Redis和数据库外部.我有大约20个虚拟主机,20个接口服务器,40个http工作者和20个websocket工作者.使用Ingress覆盖Docker网络完成负载平衡.
问题是,有时在性能上会发生非常奇怪的事情.大多数请求的处理时间不到400毫秒,但有时请求可能需要2-3秒,即使在非常小的负载下也是如此.使用Django调试工具栏或基于中间件的分析器的分析工作程序什么都不显示(时间0.01s左右)
我的问题:有什么好方法可以用django-channels分析整个请求路径吗?我希望每个阶段花费多少时间,即当Daphne处理请求时,当工作者开始处理时,当它完成时,当接口服务器向客户端发送响应时.目前,我不知道如何解决这个问题.
我用swarm中的一个网站创建了docker swarm,在外面发布端口8080.我想使用在端口80上运行外部群集的Nginx来使用该端口,这将执行服务器名称解析和主机静态文件.
问题是,swarm使用iptables自动将端口8080发布到Internet,我不知道是否可以只允许本地nginx实例使用它?因为当前用户可以访问80和8080端口上的站点,而第二个端口被破坏(没有图像).
尝试玩ufw,但它不起作用.手动更改iptables也是一场噩梦,因为我必须在每次更新后在每个swarm节点上执行此操作.有解决方案吗
编辑:我不能使用相同的网络swarm和nginx swarm,因为覆盖网络与普通的单主机容器不兼容.从理论上讲,我可以将nginx放到swarm中,但我更喜欢将它保持在包含静态文件的同一主机上.
我正在寻找一种使用 Flask 和Pjax渲染部分模板的便捷方法。我想出了这样的事情:
# utils.py
def render_pjax(base, view, **kwargs):
is_pijax = "X-PJAX" in flask.request.headers
return flask.render_template(
'pjax_wrapper.html', is_pjax=is_pijax, extends=base, view=view, **kwargs)
# pjax_wrapper.html
{% if not is_pjax %}
{% extends extends %}
{% block pjax_content %}
{% include view %}
{% endblock %}
{% else %}
{% include view %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
这样我就可以定义这样的模板:
# without_pjax.html
<div>
<h1>Search</h1>
(...some static content..)
<div class="content" id="search-results">
{% block pjax_content %}
{% endblock %}
</div>
</div>
# with_pjax.html
<ul>
<li>entry1</li>
<li>entry2</li>
... …
Run Code Online (Sandbox Code Playgroud)