常用的后端性能优化六大方式
01. 缓存化
缓存可以称的上是性能优化的利器, 使用缓存时需要考虑缓存命中率, 缓存更新, 数据一致性, 缓存穿透及雪崩, Value 过大等问题, 可以通过 mutiGet 将多次请求合并一次, 异步访问等方式来提升缓存读取的性能.
02. 硬件升级
硬件问题对性能的影响不容忽视.
举一个例子: 一个 DB 集群经常有慢 SQL 报警, 业务排查下来发现 SQL 都很简单, 该做的索引优化也都做了. 后来 DBA 同学帮忙定位到问题是硬件过旧导致, 将机械硬盘升级成固态硬盘之后报警立马消失了, 效果立竿见影!
03. 业务逻辑优化
业务逻辑优化经常会容易被忽略, 但效果却往往比数据库调优, JVM 调优之类的来的更明显.
举一个例子, 12306 春运抢火车票的场景, 由于访问的人多, 用户点击 "查票" 之后系统会非常卡, 进度条非常慢, 作为用户, 我们会习惯性的再去点 "查票", 可能会连续点个好几次. 假设平均一个用户点 5 次, 则后端系统负载就增加了 5 倍! 而其中 80% 的请求是重复请求. 这个时候我们可以通过产品逻辑的方式来优化, 比如, 在用户点击查询之后将 "按钮置灰", 或者通过 JS 控制 xx 秒只能只能提交一次请求等, 有效的拦截了 80% 的无效流量.
04. 服务化
做服务化最基础的是按业务做服务拆分, 避免跨业务间的互相影响, 数据和服务同时拆分. 同一个业务内部我们还按计算密集型 / IO 密集型的服务拆分, C 端 / B 端服务拆分, 核心 / 非核心服务拆分, 高频服务单独部署等原则做拆分.
05. 异步化
异步化可以利用线程池, 消息队列等方式实现.
使用线程池的时候一定要注意核心参数的设置, 可以通过监控工具去观测实际创建, 活跃, 空闲的线程数, 结合 CPU, 内存的使用率情况来做线程池调优.
另一种是通过 NIO 实现异步化, 一切网络 IO 皆可异步: RPC 框架, Servlet 3.0 提供的异步技术, Apache HttpAsyncClient, 缓存异步接口等等.
06. 利用搜索引擎
复杂查询以及一些聚合计算不适合在数据库中做, 可以利用搜索引擎来实现, 另外搜索引擎还可以帮我们很好的解决跨库, 跨数据源检索的场景.
-end-
如果觉得不错, 记得点赞, 关注, 之后小编会不断更新~
来源: http://www.jianshu.com/p/5c21518eaad2