写文章

大型网站稳定性技术建设

2019-06-19 23:34:02

502 | 1 | 1

稳定性技术策略

什么是稳定性

对于大型微服务系统,在错综复杂的服务逻辑各种交互情景下,面对各种未知的条件变化,整体系统依旧能够正常平稳的提供服务,这便是稳定性。


影响稳定性的因素

系统稳定性影响因素非常多,举例来说:

  1. 服务间的依赖:某个服务 BUG 造成其他依赖服务的不可用;
  2. 业务逻辑变更:业务逻辑不断迭代演变,新老服务的不兼容;
  3. 访问流量激增:流量突然增加,比如我们进行促销活动期间,导致服务压力过大 ,达到服务能力上限,从而导致服务崩溃;
  4. 机器老化异常:任何机器和人一样,都有生老病死,随着长时间的运行,也会有磨损,因此某个机器故障,也是可能的异常。

还有其他各方面的因素,在这里就不进行穷尽了,大家可以思考一下,还有那些经典的影响因素。


稳定性的衡量标准

稳定性衡量标准一般用 N 个 9 来衡量。如表格所示:



比如说某个系统网站全年稳定性达到 4 个 9 ,意味着全年服务不可用的时间小于等于 53 分钟。

稳定性技术策略

稳定性的技术策略,是我们本文介绍的重点,从大的方面来说,稳定性技术策略包含:监控,冗余,限流,降级,回滚,重试


在这里重点介绍监控相关的内容。

监控

监控是指对整个系统服务进行实时的监控操作,准确反馈系统运行状态,能够做到及时发现异常故障,记录详细日志与数据,提高故障发现,定位,解决的效率。从而提高系统服务整体稳定性。


监控是保证稳定性最基础工作。我们将重点介绍监控需要从几个方面考虑? 有哪些监控方向?

监控可以分为以下几类来进行:

流量监控

流量监控包括:PV、 UV、 IP,热门页面,用户响应时间。

这些基本的流量指标就不在这里向大家详细说明了,如果有不太清楚的同学可以自己搜索一下。

在流量监控这块,我们需要注意的是:流量毛刺。流量毛刺往往代表了系统某个风险点或者异常情况的发生。


一个正常业务的流量趋势具备周期一致性特征。比如说,一个业务每天的流量峰值一般在中午 12:00 和下午 18:00,那么这种峰值在没有特殊情况出现的前提下,应该会遵循该峰值时间规律。 那么流量毛刺是啥呢? 如下图所示:


从图中左侧部分可以看到,8 点钟有流量的突增,这时候我们需要确认为什么会有流量的突增。是业务的正常表现,还是有其他的异常流量进入。


从图中右侧部分可以看到,每条曲线代表了每一天的流量统计,红色曲线相对于其他几天的流量曲线在凌晨 3:00 和早上 8:00 的时候有明显的流量毛刺,这时候我们就需要确认是什么因素造成流量数据的突变。


通过对于流量毛刺的观察,能够让我们及时了解业务中的风险,及时做好预警与准备。


业务监控

业务监控是根据业务属性来定义监控指标,可以用于判定整体业务的运转是否正常。不同业务类型监控的指标肯定有所不同,比如电商场景、物流场景、游戏场景是完全不同的监控方向。


我们拿一个电商交易业务系统来举例,看看有哪些监控指标?大家可以参考着思考自己目前负责的业务指标。举例来说针对一个电商交易系统我们可以监控的业务指标有:

  • 用户下单监控:秒/分/时 用户下单统计 ;
  • 用户支付监控:秒/分/时 用户支付统计;
  • 用户退款情况:秒/分/时 用户退款统计;
  • 商品库存状态:库存消耗/剩余统计;
  • 业务 GMV 监控:业务整体销售额统计;
  • 商家在线状态:监控商家在线状态;
  • 促销运营监控:监控促销金额与数量。


在业务监控中,还需要重点关注业务转化漏斗概念。流量漏斗可以看出业务转化率以及用户的访问深度。它是业务健康程度的监控,也是部分需求效果的衡量标准。如下图所示:



机器监控

机器监控需要关注的内容,应该是后台研发比较熟悉的部分。 主要监控方向包含下面几个部分:

当然在 linux 系统中,也有各种常用指令,来进行该类数据的收集:top、free、ping、iostat、netstat。


对于 Java 系统来说,需要进行 JVM 层面的监控内容,比如说:gc 的情况,线程创建销毁情况,full gc 情况,内存不同模块使用情况等。 JVM 同样也提供了指令集,方便我们进行信息的查找:jstat、jps、stack、jmap、jhat 等。


日志记录

在日志的打印过程中,我们需要注意日志的打印规范,日志打印内容应该包含对于问题排查有益的信息,并且日志格式清晰,可解析性高。日志一般是打印到服务器磁盘上面,但是由于单机磁盘能力有限,并且对于大型分布式系统来说需要整体收集不同服务器模块的日志,进行统一分析,提高问题排查效率。这时候就需要一个集中式的日志中心。


日志中心的核心能力一般包含:获取日志、存储日志、展示日志、分析日志、报警服务。

相对比较简单的实现方式可以采用ELK快速搭建自己的日志中心。


enter image description here

我们利用 kafka 将日志信息,进行异步广播,然后进行日志的解析,存储到 ES 检索系统中,利用 kibana 来进行日志的检索、查看等。进一步提升日志的有效管理。


总结

上面是监控相关内用,希望对大家有所帮助。


更多关于大型网站稳定性建设的内容,请参考课程: https://www.roncoo.com/view/1070493514408189953




1

收藏
分享
全部评论1

152****8996 2019-06-20 01:50:22

更加详细的学习内容请参考课程:https://www.roncoo.com/view/1070493514408189953
没有更多了