1、单体应用垂直扩容
提高硬件配置:CPU、内存、磁盘,但不可能永无止境的提升。
2、单体应用水平扩容
搭建应用集群(tomcat集群),但入口只有一个,需配置负载均衡,需注意session共享!!!
服务器端实现:nginx、F5
客户端实现:springcloud的Ribbon、dubbo
3、应用拆分
单体应用逐步庞大,代码复杂,维护困难,按业务维度拆分应用,使用分布式开发,针对并发量高的应用进行扩容(集群)即可。
同一进程内的调用变成远程方法调用
远程调用技术:httpclient、dubbo、webservice
开源方案:SpringCloud、Dubbo
4、静态化
对于被频繁调用,更新频率较低的页面,可以采用HTML静态化技术。
5、动静分离
nginx处理静态资源,减轻后端服务器压力,tomcat处理动态资源。
6、缓存
HTTP缓存:
浏览器缓存:缓存web资源,未改变时使用缓存,降低服务器压力。
Nginx缓存:expires指令缓存静态资源,优先从缓存中找。
CDN缓存:内容分发网络,实现用户就近获取资源,主要缓存静态资源。
应用缓存:
内存缓存:速度快,效率高,应用重启丢失。
磁盘缓存:相对内存慢,应用重启不丢失。
多级缓存:浏览器->CDN->nginx->redis->DB
缓存内容:经常查询的数据、热点数据、IO瓶颈数据
7、队列
异步处理、服务解耦、流量削峰
适用于无需实时处理、返回结果的场景,只保证最终一致性。
8、池化
复用对象,减少频繁创建、销毁的消耗,提高性能。
对象池
数据库连接池:C3P0、DBCP(apache)、Druid(德鲁伊,阿里)
redis连接池
线程池
9、优化
数据库优化、索引、sql优化、jvm优化