目录
性能测试层面了解架构设计 分布式项目实施过程中的常见难点,从架构层面思考性能测试应该如何做?发现问题后应该怎么解决?
列举一个生活场景:People去体检或检查后得出检查报告,报告标注异常指标箭头,医生会根据超出正常范围值的大小,再得出结论可能会是什么问题对症下药直至药到病除,遇到疑难杂症当然一次检查也不一定能准确定位到问题原因,再者就是论经验……
思考:何为指标?指标的正常与异常范围怎么界定或制定。
既然需要得出报告后分析指标,那么必了解其项目的架构层设计。





> ip层,负载均衡策略
> 三种模式:LVS/NAT、LVS-DR、LVS/TUN




1、zookeeper注册中心(这一个服务),中心常规理解所有的东西都到集中管理分发,A请求中心,中心告诉A请求应该到B服务器
> zookeeper服务
2、B生产服务器开发和定义具体方法和Java Bean后连接并注册到zookeeper上
> zookeeper客户端,注册服务
3、A消费者通过连接zookeeper上实例化Java Bean获取到B生产服务的实现远程调用并执行B生产服务的功能逻辑。
> zookeeper客户端,调用服务
PS:dubboAdmin后台管理服务,Zookeeper也可实现负载均衡调度
> kafaka 流式处理
发布订阅:客户端将消息发送主题,消息队列存放主题,订阅者消费主题消息,消息持久化到队尾,消费通过客户端指针,吞吐量高


RocketMQ:继承Kafafa,消息队列维护高可用,并支持事务回溯机制



减少系统消耗、提示系统性能
> 对象池,利用复用对象来减少创建对象,垃圾回收的开销。如线程池复用线程提升性能
> 连接池,数据库连接池、Redis、Http,复用TCP连接来减少创建和释放连接的时间

常见连接及对象池
1、Java线程池
2、数据库连接池
3、HttpClient连接池
4、Redis连接池
5、Tomcat连接及线程池
6、Dubbo连接及线程池

1、CDN缓存(CDN服务器)
2、反向代理缓存
3、分布式Cache(Redis)
4、本地应用缓存(JVM Guava)
1、实时写入,异步写入
2、读取时实时写入,读取时异步写入

固定时间
相对时间

缓存不一致,容忍性,异步更新性
1、硬件隔离(虚拟机)
> 不同的服务部署在不同的主机上
2、操作系统隔离(容器虚拟化)> 主系统 + 虚拟机 + docker虚拟化
3、进程隔离(系统拆分)
4、线程隔离(线程池独立)
> 线程隔离 + 调用隔离
5、读写隔离(读写分离)
6、动静隔离(动态资源静态资源分离)
7、热点隔离(热点账户,热点数据等)



队列在数据结构中是一种线性表,从一段插入数据,然后从另一端删除数据

排队有时候比并发效率更高
排队可以控制并发流量涌入


通过MyCat代理实现查询不同时间走不同的数据库,从而达到水平分库分表
/*hint-master*/ 注释不被Mysql识别,但是可被mycat解析




硬件指标 - Cpu idel Time、Free Memory、IO Wait、NetWork Free
> Zabbix监控
软件指标 - Cpu load Averag、ParNewCount、ParNewTime、Old GC Count、Old GC Count
>Cat heart beat监控
接口指标 - url/dubbo failure times、url/dubbo 95,99.9,99.99 lines
> Cat transaction监控
异常指标 - Exception times and content
> Cat exception监控
大盘指标 - 基线成功率、基线失败率、总体响应时间指标
> 关键业务的实时数据,往日数据基线实时对比,判断业务异常率


“走马观花”的了解常见大型分布式项目的架构,从架构层面分析不同层级的具体作用与对应应对方法,分布式架构最终目的为了实现提供更高性能的访问和响应速度。
性能测试仅是项目中的一环,测试攻城狮是否有相对全面了解呢?知道了然后呢?……