前言:

经验值,一般来讲,用户端接收一个请求,比较好的响应时间在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项目 - 简书