首页 > 技术文章 > 大型分布式网站架构设计与实践4

roylamsdreamsky 2020-03-22 22:41 原文

第4章 系统稳定性

4.1 在线日志分析

4.1.1 日志分析常用命令

cat more tail head sort wc uniq(查看重复出现的行) grep find whereis expr(表达式求值) tar curl

4.1.2 日志分析脚本

1、sed编辑器
流编辑器,需要预先指定数据的编辑规则,才能修改,阶段进行重定向输出
2、awk程序
提供一种编辑语言而不仅仅是一组广西编辑的命令
3、shell脚本

4.2 集群监控

4.2.1 监控指标

1、load
通过top和uptime命令可以查看系统的load值,load被定义为特定时间间隔运行队列中的平均线程数,如果一个线程满足以下条件,该线程会处理于运行队列中:
1)没有处理I/O等待状态
2)没有主动进入等待状态,也就是没有调用wait操作
3)没有被终止
如果每个cpu当前的活动线程数不大于3,我们认为它的负载是正常的,如果每个cpu的线程数大于5,则表示当前系统的负载已经非常高了。
uptime中,load average后的三个值表示1分钟,5分钟,15分钟内系统的load值
2、CPU利用率
CPU的时间消耗主要 在这几个方面,即用户进程,内核进程,中断处理,I/O等待、Nice时间、丢失时间、空闲等几个部分。
top|grep cpu
us用户时间,通常情况下占比越高越好
sy系统时间,越低越好
niNice时间,系统在调整进程优先级的时候所花费的时间
id空闲时间,越低越好
wa等待时间,越低越好
hi硬件中断处理时间
si系统处理软件中断所占用的时间
st丢失时间
3、磁盘剩余空间
4、网络traffic
sar -n DEV 1 1
5、磁盘IO
iostat -d -k
6、内存使用
free -m
可用的=free+buffer+cache
swap使用过多,表示物理内存已经不够用了
vmstat可以查看swapIO的情况
7、qps每秒查询数。。。tps每秒事务数
8、rt响应时间
9、select/ps数据库每秒处理的select 语句的数量
10、update/ps、delete/ps
11、GC

4.2.2 心跳检测

1、ping
2、应用检测
通过curl指令定时访问应用中预留的自检url
3、业务检测

4.2.3容量评估及应用水位

通过页面大小等,访问DB次数等进行评估流量,评估机器数量

4.3 流量控制

4.3.1 流量控制实施

1、方案1:检查当间是否有请求在等待处理,有则直接返回,否则申请信号量资源,当返回后,才开始处理具体的业务逻辑,业务逻辑处理完毕后,最终需要将信号资源释放
2、方案二,通过单机内存队列来进行有限的等待
3、方案三:分布式消息队列来将用户的请求异步化

4.3.2 服务稳定性

如何控制由于第三方服务不稳定而形成的多米诺骨牌效应
1、依赖管理
最重要的意义是弄清楚谁调用了谁,谁被谁调用,调用的频次如何
2、优雅降级
设置一个阈值,如果调用超时的次数超过这个阈值,则自动将该服务降级,此时服务调用者跳过对该服务的调用,并指定一个休眠的时间点,当时间点过了以后,再次对该服务进行重试,如果服务恢复,则取消降级,否则继续保持该服务的降级状态,直到所依赖的服务故障恢复
3、服务分级
服务提供者需对服务消费者进行优先级区分。
4、开关
预先定义一些开关来控制程序的服务提供策略。
5、应急预案
应急预案中需要明确地规定服务的级别,梳理清楚核心应用的调用链路,对于每一种故障都做出合理的假设,并且要有针对性的处理方案。

4.3.3 高并发系统设计

1、操作原子性
不可分割的操作,要么执行成功,要么执行失败
2、多线程同步
多线程操作,线程锁
3、数据一致性
分布式秕,复制数据提高系统可靠性,保证一致性
4、系统可扩展性
称为可伸缩性
5、并发减库存

4.4 性能优化

4.4.1 如何寻找性能瓶颈

前端优化、服务端优化、操作系统优化、数据库查询优化、JVM调优等
1、前端优化工具-YSlow
2、页面响应时间
3、方法响应时间
4、GC日志分析
5、数据库查询

4.4.2 性能测试工具

1、ab
模拟多个并发请求来对服务器进行压力测试,得出服务器在高负载下能够支持的qps及应用的响应时间
2、Apache JMeter
3、HP LoadRunner
4、反向代理引流
修改负载均衡配置进行测试

4.4.3 性能优化措施

1、前端性能优化
1)页面的HTTP请求数量
2)是否使用CDN网络
3)是否使用压缩
2、Java程序优化
1)单例
2)Future模式
3)线程池
4)选择就绪
5)减少上下文切换
6)降低锁竞争
3、压缩
4、结果缓存
5、数据库查询性能优化
1)合理使用索引
B树、B+树
2)反范式设计
合适设计数据表,考虑经常查询的,和少查询
3)使用查询缓存
4)使用搜索引擎
5)使用key-value数据库
6、GC优化
7、硬件提升性能

4.5 java应用故障排查

4.5.1 常用工具

1、jps
查看进程
2、jstat
可以对虚拟机各种运行状态进行监控的工具,通过它可以查看到虚拟机的类加载与卸载情况,管理内存使用和垃圾收集等信息,监视JIT即时编译器的运行情况等
3、jinfo
主要用于查看应用程序的配置参数,以及打印运行JVM时所指定的JVM参数
4、jstack
用来生成虚拟机当前的线程快照信息
5、jmap
可以用来查看等待回收对象的队列,查看堆的概要信息,包括采用的是哪种GC收集器,堆空间的使用情况,以及通过jvm参数指定的各个内存空间的大小等
6、Btrace
是一个开源的java程序动态跟踪工具
7、JConsole
是一款JDK内置的图形化性能分析工具
8、Memory Analyzer
是一款功能强大的Java堆分析工具,能够快速找到占用堆内存空间最多的对象,以便程序进行优化,减少内存消耗,还能够通过进一步的分析,定位可能的内存泄漏问题
9、VisualVM
是一款功能十分强大的“All-in-One”工具,涵盖了JVM内存消耗监视、性能分析、线程,以及堆转储分析、垃圾回收监视等几科所有能包含进来的功能。

4.5.2 典型案例分析

1、内存溢出
2、线程死锁或信号量没释放
3、类加载冲突

推荐阅读