年末需要在微信公众平台上搞一波活动,对于每个参加活动的微信公众号粉丝,服务器需要依次进行下面一些操作:
- <=1 次 get 请求,获取获取个人信息
- 一次 get 请求获取微信头像,用 pillow 处理合成一张海报图片大约 0.03s 每次
- 1 次 post 上传这张大约 500KB 的图片到微信公众平台的临时素材(最耗时的一步)
- 1~2 次 post 请求发送给对应的用户消息
目前使用的软件和硬件
- django+celery: broker 和 result backend 用的都是 redis 。我测试的时候开了 2 个 celery worker , gevent pool , concurrency 10 。
- 阿里云配置: 2GB 内存+双核 CPU ,带宽的话可以临时提高比较大的。
期望
- 能应对高峰期每秒 30 人的处理
最开始的时候跑 5 个 worker ,没几分钟服务器直接挂了,在阿里云控制台重启都花了 10 几分钟。。。后面改成 2 个 worker 在测试每秒 10 人的处理时, cpu 占用 100%,内存大约用去 1GB ,而且大约需要近 2s 才能完成,时间久了队列会一直增长,但要是加上 timelimit 的话会导致一些任务失败。
大家有什么方案建议,能让每个参加活动的用户得到尽量短的时间反馈呢?