0 两个大点:减少交互,提高接口并发
前端
1 移动端还是web端,静态资源,使用cdn
2 图片,短视频,放在第三方存储上
3 精灵图,好多小图片做成一个图,在前端通过定位
4 使用前端存储
5 前端缓存:响应头中有Cache-Control:max-age=xxx
后端部署
6 使用nginx转发(不是直接使用uwsgi接收http请求,使用uwsgi协议)
7 使用性能高的wsgi服务器部署项目(uwsgi,gunicorn)
8 起多个uwsgi+django服务,监听多个端口
9 nginx做负载均衡
10 多台机器上启动多个uwsgi+django服务,nginx做负载均衡
11 动静分离,uwsgi只负责处理动态请求,静态请求直接用nginx去取
12 静态资源(头像,图片),cdn,放到第三方云平台,oss,七牛云,公司自己搭建存储服务器(fastdfs,ceph)
13 页面静态化(首页,秒杀场景秒杀页面),数据同步问题,只要数据库变更了(管理员新增了一个轮播图),静态化的页面需要重新生成(celery使用场景)
13.1 单台nginx顶不住,高可用keepalive,nginx做集群,F5的硬件负载均衡器,dns负载均衡
代码层面
14 使用异步,使用多线程,用协程
15 使用异步任务框架celery,使用消息队列(rabbitmq),把任务做成异步
16 数据库查询语句优化,sql索引的创建,尽量不要在for循环中执行sql,常慢sql, 读写分离,集群,分库分表
17 使用缓存,接口缓存,redis,主从,哨兵,集群,6台机器
18 个别接口全用缓存(qps高的接口)
19 搜索场景使用全文检索es,集群
20 代码逻辑层面
21 考虑换语言,写成一个个服务,一点点替换