前言:
经验值,一般来讲,用户端接收一个请求,比较好的响应时间在30-50ms
qps在100以上的,要求响应时间小于5ms;qps在20到100之间的,响应时间小于10ms。
1.代码逻辑
2.1如果一个大业务方法中,各子业务相互独立,互不依赖,而此时业务耗时又不达标时,可以考虑使用并发处理,即多线程并发查询数据。有个前提是该接口应至少高于20ms,如果再低,线程切换等因素可能会抵消掉多线程带来的性能提高。
2.2 代码层对数据库查询方式的优化
同一个请求尽量减少对数据库的操作次数,减少io次数达到提升效率目的;数据量大时批量插入
结合数据库优化查询语句,提升查询效率
2.3 合理,高效的代理逻辑与算法应用
2.缓存
3.1 缓存热点数据,不用每次都去访问DB,减少耗时。
3.2 跨平台数据存入缓存,异步程序更新跨平台数据以保持跨平台数据的实时准确性。
3.数据库优化
- 加索引:根据查询字段常见合适的索引,提高数据库查询速率
- 避免返回不必要的数据: 不要使用select * from table1 where id >100;具体到需要的哪几列数据
- 优化sql结构:
- 分库分表:
- 读写分离:数据库集群读写分离到不同的入口
4.大数据/耗时操作考虑异步,消息队列
例如:
1.服务的接口会同时接收大量的数据写入数据库,考虑先将数据推向消息队列,再存入DB。
2.一个请求会经过几个服务的处理,取最终的结果,考虑使用MQ
5.CPU+内存
物理上的扩容
针对DJANGO工程的优化
django的部署方式对性能影响:
1. 单进程多线程:python manage.py runserver 0.0.0.0:80
2.Gunicorn部署:可选择进程与线程数
3.wsgi:
4.uwsgi部署:多进程,多线程
uWSGI 是一个Web 服务器,它实现了WSGI 协议(web服务网关接口)、uwsgi(线路协议)、http 等协议。注意uwsgi 是一种通信协议,而uWSGI 是实现uwsgi 协议和WSGI 协议的Web 服务器。uWSGI 具有超快的性能、低内存占用和多app 管理等优点,并且搭配着Nginx 就是一个生产环境了,能够将用户访问请求与应用app 隔离开,实现真正的部署。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
5.进一步提升,使用nginx负载均衡
Gunicorn,uWSGI部署参考:使用uwsgi和gunicorn部署Django项目 - 简书