本文结合项目经验,整理一份大纲,供参考。 常用指标RT(Response Time):响应时间。可能会衍生出 TP999、TP99、TP95、TP90等指标。一般在几毫秒到几百毫秒之间。 QPS(Query Per Second):每秒查询量。这是我们最常说的一个指标了。视业务复杂度不同而不同,轻量级的可能单机上万,重量级的可能就几百,这是主要依靠水平扩容来解决。 TPS(Transaction per second):每秒事务量。主要衡量数据库性能,一般比 QPS 低 1~3 个数量级。 吞吐量(Throughput):单位时间内处理的请求数量。该指标概念比较宽泛:
PV(Page View):页面浏览量。一般用于统计页面访问频次,每次刷新页面即被计算一次。高并发系统的单日 PV 基本上会超过千万。 UV(Unique Visitor):独立访客量。用于统计单位时间内页面访问的用户数,同一个用户多次刷新页面只会被算做一次。高并发系统的单日 UV 基本上会过万。
提升系统性能的两个维度
灾备管理多区域部署机房,通常存在冷备、热备、双活等几种形式。主要用于流量分摊和故障转移。
故障处理Failover 失败自动切换:当出现失败,重试其它服务器,通常用于读操作。一般核心服务会使用该策略。 Failfast 快速失败:只发起一次调用,失败立即报错,通常用于非幂等性的读写操作。多数场景均有重试机制。 Failsafe 失败安全:出现异常时,直接忽略。通常用于写入日志等操作。 Failback 失败自动恢复:后台记录失败请求,定时重发。通常用于消息通知等操作。 Forking 并行调用多个服务方:其中一个成功即可返回,通常用于实时性要求较高的读操作。 Broadcast广播调用:所有提供方逐个调用,任意一台报错则报错。主要用于RPC框架注册节点使用(更新提供方本地状态),应用型服务基本不会使用。
负载均衡
区分服务等级
使用缓存主要针对不易变化的数据,可能是多级缓存,可能横跨客户端和多个服务端。
异步操作
批量执行
池化技术线程池:常用如 ThreadPoolExecutor。 连接池:常用如 HikariCP、Druid、c3p0、DBCP。 对象池:常用如 Apache Commons Pool2。另外,如 Integer 等包装类针对(-127~128)的对象缓存,其实也是一种对象池的体现。
限流处理
防刷分流搭建两套服务集群,将存在爬虫标记(依赖于专业的爬虫识别算法)的流量分流到另一套集群,甚至可以返回假数据,做蜜罐处理。
静态资源分发主要依赖 CDN 技术进行资源的就近部署,可提前预热。常见如html、js、css、image等资源。
数据库并发
压力测试 /性能测试
日常巡检/故障演练用于提前发现问题,如接口扫描、混沌工程就是做这些事情的。
|