跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python flask 实现 http 消息代理服务,怎么配置高并发?
未分類
4 2 月 2021

Python flask 实现 http 消息代理服务,怎么配置高并发?

Python flask 实现 http 消息代理服务,怎么配置高并发?

資深大佬 : PPTX 5

flask 实现一个 http 消息代理服务,即 客户端 A -> 代理 -> 服务器 B 。 目前方案:

  1. 代理 收到 A 的请求消息。
  2. 代理 将请求消息稍微处理,然后把请求发送给 B 。
  3. 代理 收到 B 的回复消息。
  4. 代理 将回复消息稍微处理,发给 A 回复。

请求用的 requests

目前是代理收到 A 的请求后,会等待代理请求 B 得到回复后,再把内容回复给 A 。会有等待。测试发现该方式高并发性能比较差,需要哪些优化处理?

大佬有話說 (18)

  • 資深大佬 : chroming

    主要耗时在代理等 B 的过程?用了 gunicorn+nginx 么?

  • 資深大佬 : chenqh

    改用 tornado 吧?

  • 資深大佬 : wuwukai007

    fastapi 或者 django3.1 吧

  • 資深大佬 : viiii

    有高并发需求, 直接无脑 fastapi

  • 資深大佬 : BeanYoung

    这场景适合用 openresty,没有比这个性能更好的了应该

  • 資深大佬 : plko345

    @BeanYoung 这不是 nginx 吗?

  • 資深大佬 : itdog888

    @BeanYoung 这个和 nginx 有什么分别

  • 資深大佬 : leir

    @plko345 @itdog888 主的需求用 nginx+Lua 写转发规则,改协议字段,性能最好,工作量最小
    nginx wiki 中推荐使用 openresty

    HTTP Lua Embed the power of Lua into NGINX HTTP servers (OpenResty Official)

  • 主 資深大佬 : PPTX

    @plko345 因为对数据还有一定的处理,所以不能直接用 nginx,目前用了 nginx 反向代理了。

  • 資深大佬 : Vegetable

    fastapi+httpx,采用协程方案,对代码改动最小。长得和 flask+requests 差不多,性能基本就是 python 天花板了。

  • 資深大佬 : LeeReamond

    py 的高并发的话肯定是要上 io 复用的,flask 怎么部署都不行。fastapi 我没测试过,aiohttp 的话可以上 uvloop+prefork 部署,单机可用性能达到几万 qps,很可以了

  • 資深大佬 : laminux29

    Python 的优势在于超高的开发效率,如果一定要追求运行性能,建议考虑一下 C++,或者把 Python 耗性能的部分改成 C++实现或 C++中间件。

  • 資深大佬 : abersheeran

    flask 、requests 这两个库,跟高并发这个词一点关系都没有……

    你这个需求也别用 fastapi,他那个依赖注入一上,性能哗啦啦往下滑。倒不是说依赖注入不好用,关键你这个需求用不上。 @Vegetable 天花板就省省吧……它是天花板,那我写个玩意,性能是它 1.5 倍,岂不是把炸了?

    上说的对,如果你会用 openresty,这个是最好的。如果执意用 Python,推荐 bottle/pyramid 。真正的 Python web 框架性能天花板。https://github.com/the-benchmarker/web-frameworks 以防有人说我信口开河,性能测试排名在此。

    然后请求部分,如果你上了我说的两个框架之一,requests/httpx 随便挑一个就好了。有栈协程一开,都可以的。

  • 資深大佬 : sadfQED2

    @PPTX openresty 是最好的选择了,数据处理什么的不是问题,openresty+lua 你查库写业务逻辑都没问题

  • 主 資深大佬 : PPTX

    @abersheeran
    @sadfQED2
    目前的代理消息走向:客户端 A –> 我的代理 –> 服务端 B 。
    我的代理收到 A 的请求后,会等待请求 B 得到回复后,再把内容回复给 A 。

    我的代理 在收到 客户端 A 的请求后,会访问 redis,找出请求 url 到服务端 url 的映射,也就是每条请求消息,服务端的 url 可能都是不同的,存在 redis 里。这个场景,用 openresty + lua 能实现吗? 感谢

  • 資深大佬 : abersheeran

    @PPTX 可以。Lua 操作 redis 呗,有现成的库。

  • 主 資深大佬 : PPTX

    @abersheeran 多谢

  • 資深大佬 : hushao

    tornado/aiohttp/starlette/django3 + httpx 异步请求,asgi 方式部署,其中 httpx 和 requests 的用法兼容。flask 本身就算了,确实跟并发不一条路。

    重点是异步网络请求。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具