高并发的目标
高性能:快速访问
高可用:服务能一直正常使用
高可扩展:流量高峰能否
安全性:提供安全访问和数据加密、安全存储的策略
高性能架构:
性能指标:响应时间或吞吐量
从IO和计算两个角度:
预处理:1.预计算,比如抢红包场景,可以提前计算好红包金额缓存起来,发红包时直接使用即可
2.缓存预热:通过异步任务提前预热数据到本地缓存或者分布式缓存中。
3.各种池化技术的使用,包括HTTP请求池、线程池、数据库和Redis连接池等。
输入:1.集群部署,通过负载均衡减轻单机压力。
2.限流,前端限流、Nginx接入层的限流、服务端的限流
3.削峰,对流量进行削峰填谷,通过MQ承接流量
处理:1.多线程并发处理
2.JVM优化,包括新生代和老年代的大小、GC算法的选择
3.锁选择,读多写少的场景用乐观锁,或者考虑通过分段锁的方式减少锁冲突
存储:1.多级缓存,包括静态热点数据使用CDN(内容分发网络)、动态热点数据用jvm缓存、
redis分布式缓存等,以及对缓存场景中的热点key、缓存穿透、数据一致性等问题的处理。
2.分库分表和索引优化,以及借助搜索引擎解决复杂查询问题。
返回:1.异步化:将次要流程通过多线程、MQ、甚至延时任务进行异步处理。
从IO角度:
1.减少IO次数,比如数据库和缓存的批量读写、RPC的批量接口支持、或者通过冗余数据的 方式干掉RPC调用
2.减少IO时的数据包大小,包括采用轻量级的通信协议、合适的数据结构、去掉接口中的多 余字段、减少缓存key的大小、压缩缓存value等
高可用
指标:可用性 = 正常运行时间 / 系统总运行时间
搭建集群:如Ngnix集群、kafka集群、Redis集群
限流:1.接口限流:Sentinel-阿里巴巴提供的分布式服务架构的流量控制组件
2.验证码
流量削峰:消息队列进行削峰
服务降级:关闭非核心功能
熔断:若大流量活动(如秒杀)位于服务器A上,而商品管理功能也在服务A上,则其它服务不再请求商品管理功能,一面服务被拖慢。
高可扩展
指标:扩展性=性能提升比例/机器增加比例
存储层拆分:分库分表
业务层拆分:按照业务拆分多个微服务