前言
在电商大促、春运抢票等大流量降临前,开发人员须要对系统进行梳理,发现零碎的性能瓶颈,而后通过调优等伎俩晋升零碎的可用性。个别可通过全链路压测伎俩找到零碎的瓶颈,而后针对性地进行零碎调优,如 JVM 调优,SQL 调优,线程池参数调优等。但即便咱们将调优做到极致了,也存在一些不可预知的因素,如网络的不稳地性,这就须要咱们做应急预案,在呈现这些问题时,及时将申请进行路由切换或者降级解决。换句话说,在这种大促流动前,咱们须要对系统做全方位的压测和预案演练。
零碎压测
压测指的是性能压力测试,较常见的压测工具有 JMeter、Apache ab 等。压测数据能够用来评估零碎的稳定性和性能,咱们也能通过它进行零碎容量评估,从而依据理论状况决定是否须要扩容或缩容。
压测之前可制订相应的压测计划,如压测接口、并发量、压测策略(突发、逐渐加压)、压测指标(如 QPS/TPS/RT 等),压测实现后要出压测报告,报告下面要蕴含机器负载(CPU、内存使用率等)、峰值 TPS/QPS、响应工夫(均匀 / 最大 / 最小)、TP99/TP999 等数据。拿到压测报告后,咱们可做相应的系统优化和应急预案。
压测分类有很多,如读压测、写压测、单机压测、集群压测,仿真压测。
读压测和写压测很好了解,不多形容,但有一点须要留神,实在线上环境通常是读写操作混合的,因而不能仅仅做离开的读压测和写压测,也须要混合进行。
单机压测指的是对集群中的单台机器做压测,从而评估出单机服务的极限解决能力,找到单机的瓶颈,并将单机性能优化到极致。
集群压测指的是对分布式集群服务依赖的资源做压测,如数据库、分布式缓存等。
仿真压测指的是通过模仿实在流量进行零碎压测,模仿的数据能够是人工结构,用程序结构,也能够应用 TCPCopy 复制线上的实在流量,而后引流到压测集群服务器进行压测。
系统优化和容灾
拿到压测报告后,接下来能够针对性的对系统做优化,比方硬件降级、机器扩容、架构优化(如加缓存、读写拆散、音讯队列等)、参数调优(如 JVM)、Sql 慢查问优化、代码优化(如同步改为异步)。在代码优化的过程中,能够审查有无不合理的参数配置,如超时工夫、重试次数、降级策略、缓存工夫等。在思考是否须要扩容时,能够依据今年的流量、业务的发展趋势等因素来判断,预估出峰值流量,当然这不能保障准确性,所以还须要有应答突发状况的能力,如疾速扩容。
零碎应急预案
在实现系统优化和扩容后,还是会有一些不稳地因素,如网络抖动,某台机器负载过高,数据库宕机等状况,为了避免这些不可预知的因素导致系统不可用,咱们须要提前做故障演练,并制订相应的应急预案,从而晋升零碎的可用性。
零碎的每个档次每个链路,都有可能产生故障,因而咱们可依照上面的表格对它们采取相应的措施。
网关接入层
利用接入层
Web 应用层和服务层
数据层
系统监控
对要害资源和指标做监控报警是十分有必要的,包含服务器监控(CPU、内存、磁盘使用率等)、JVM 监控(堆内存应用状况、GC 频率 / 工夫、线程数等)、接口监控(接口调用量(QPS/TPS 等)、均匀响应工夫 RT(TP999、TP9999 等))。而后配置报警阈值、报警策略、告诉形式,这样可能及时的发现故障并告诉到相干负责人,并疾速解决问题,必要时可先做应急解决,如限流降级。
参考资料:
《亿级流量网站架构核心技术》