背景

线上有个使用django框架的服务,需要创建大量的django model(~25k),并且要注册到django框架。

那么启动这个服务必定耗时很久,实际测下来要40s左右。

问题

线下测试时,发现gunicorn方式启动后的前几个请求总是超时,原因是worker似乎是等到请求到来时才完整启动。

如何处理

第一种方式,改进部署脚本,在gunicorn启动后,发起一次业务无关的调用来让worker完整启动,那么后续的请求就不受影响。
不过gunicorn在运行过程中可能会kill worker,需要考虑这种情况下怎么处理。

第二种方式,性能优化,把启动耗时控制在4s左右,4s是业务方可以接受的,就能彻底解决这个问题。