牛逼了!Python Web 接口优化,性能提升25倍!

背景

我们负责的一个业务平台,有次在发现设置页面的加载特别特别地慢,简直就是令人发指

图片

让用户等待 36s 肯定是不可能的,于是我们就要开启优化之旅了。

投石问路

既然是网站的响应问题,可以通过 Chrome 这个强大的工具帮助我们快速找到优化方向。

通过 Chrome 的 Network 除了可以看到接口请求耗时之外,还能看到一个时间的分配情况,选择一个配置没有那么多的项目,简单请求看看:

图片

虽然只是一个只有三条记录的项目,加载项目设置都需要 17s,通过 Timing, 可以看到总的请求共耗时 17.67s ,但有 17.57s 是在 Waiting(TTFB) 状态。

TTFB 是 Time to First Byte 的缩写,指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要指标。

Profile 火焰图 + 代码调优

那么大概可以知道优化的大方向是在后端接口处理上面,后端代码是 Python + Flask 实现的,先不盲猜,直接上 Profile:

图片

第一波优化:功能交互重新设计

说实话看到这段代码是绝望的:完全看不出什么?只是看到很多 gevent 和 Threading,因为太多协程或者线程?

这时候一定要结合代码来分析(为了简短篇幅,参数部分用 “...” 代替):

def get_max_cpus(project_code, gids):
    """
    """
    ...
    # 再定义一个获取 cpu 的函数
    def get_max_cpu(project_setting, gid, token, headers):
        group_with_machines = utils.get_groups(...)
        hostnames = get_info_from_machines_info(...)
        res = fetchers.MonitorAPIFetcher.get(...)
        vals = [
            round(100 - val, 4)
            for ts, val in res['series'][0]['data']
            if not utils.is_nan(val)
        ]
        max_val = max(vals) if vals else float('nan')
        max_cpus[gid] = max_val
       
    #  启动线程批量请求
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值