高并发-高可用-高性能概述高并发QPS/TPS来衡量系统的对任务的处理能力TPS每秒事务数可以是一个接口多个接口一个业务流程包括增删改查QPS每秒查询数指一台服务器每秒能够响应的查询次数高可用SLA衡量一个系统可用性有多高目标是7*24小时不间断服务大厂在宣传自己产品的时候都会说SLA有多少个9时间维度分类系统可以正常使用时间占总时间占比。如99.987601年有8760小时*0.1%8.76小时请求次数维度请求总次数和失败的占比。如系统可用性99%1000个请求中允许1000*1-99%10个请求出错9越多代表全年服务可用时间越长更可靠停机时间越短但往往存在网络/机房问题应用更新发版导致服务不可用大厂多数业务4个9是刚需5个9是目标6个9是理想高性能RT来衡量系统的响应速度程序处理速度非常快延迟低Latency所占内存少cpu占用率低比如系统处理一个HPPT请求需要100ms这个100ms就是系统的响应时间三高不是孤立的而是相互支撑的影响的高并发方面要求Throughput大于10万高性能方面要求请求延迟Latency小于100ms高可用方面要求系统可用性SLA高于99.99%但随着并发量上来请求延迟肯定增大处理不过来则可用性会下降高并发-高性能技术方案多大并发才算高并发1万QPS的商品列表查询不属于高并发 稍微使用一些缓存即可解决4千TPS的下单接口属于高并发链路复杂需要结合具体场景和资源投入系统架构无状态业务-水平扩展只要增加服务器数量就能线性扩充系统性能架构的难点是难做到全链路的水平扩展负载均衡思想节点轮询随机加权轮询节点固定Hash应用网络DNS解析轮询网关分发请求后端服务应用服务内部PRC负载均衡应用服务内部RPC负载均衡数据存储-分库分表-负载分发缓存思想本地存储分布式存储应用前端浏览器缓存静态资源网络DNS解析缓存应用程序内存缓存分布式缓存数据库MySQL Query Cache池化复用思想线程池对象池连接池内存池应用Java线程池技术jdbc/Redis/HttpClient连接池SpringIOC容器对象池异步思想多线程消息队列应用前端ajax异步请求RocketMQKafka同步双写-异步刷盘应用程序多线程异步处理预处理-惰性更新思想定时任务懒加载应用运营后台报表数据定时任务提取计算好MyBatis懒加载分而治之思想Mater-worker应用Hadoop中的MapReduceJDK.Fork/Join Framework消息队列的广播消息归并排序算法高可用技术方案集群架构将多个相同的应用程序集中起来提供同一种服务某个节点故障不影响系统可以横向扩展性增加节点提高并发处理能力应用微服务集群Redis/Kafka/Nginx/Nacos/MySQL/ZK集群熔断降级保险丝熔断服务为了防止整个系统故障抛弃一些非核心的接口和数据返回兜底数据限流当前访问频率或者并发请求超过其承受范围的时候考虑限流保证接口的可用性漏洞模型不管流量多大均匀的流入容器令牌算法漏桶算法隔离服务和资源相互隔离比如网络资源机器资源线程资源等不会因为某个服务的资源不足而抢占其他服务的资源多活架构同城双活-双机房两个机房都在同城物理距离短两个机房用专线网络连接比单机房延迟大一些但整体延迟可以接受异地多活-两地三中心两地指2个城市三中心指3个机房2个机房在同一个城市第3个机房部署在异地只做数据灾备