大型网站稳定性技术建设

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 作为应用后台系统,随着业务发展阶段不断演进。 从小型服务到大型微服务架构服务, 稳定性越来越重要。 稳定性技术也是作为技术人员必备的技术知识点。

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

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

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

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

稳定性的衡量标准
稳定性衡量标准一般用 N 个 9 来衡量。如表格所示:
1
比如说某个系统网站全年稳定性达到 4 个 9 ,意味着全年服务不可用的时间小于等于 53 分钟。

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

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

监控

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

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

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

流量监控

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

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

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

一个正常业务的流量趋势具备周期一致性特征。比如说,一个业务每天的流量峰值一般在中午 12:00 和下午 18:00,那么这种峰值在没有特殊情况出现的前提下,应该会遵循该峰值时间规律。 那么流量毛刺是啥呢? 如下图所示:
2
从图中左侧部分可以看到,8 点钟有流量的突增,这时候我们需要确认为什么会有流量的突增。是业务的正常表现,还是有其他的异常流量进入。

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

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

业务监控

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

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

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

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

机器监控

机器监控需要关注的内容,应该是后台研发比较熟悉的部分。 主要监控方向包含下面几个部分:
4
当然在 linux 系统中,也有各种常用指令,来进行该类数据的收集:top、free、ping、iostat、netstat。

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

日志记录

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

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

相对比较简单的实现方式可以采用ELK快速搭建自己的日志中心。
5
我们利用 kafka 将日志信息,进行异步广播,然后进行日志的解析,存储到 ES 检索系统中,利用 kibana 来进行日志的检索、查看等。进一步提升日志的有效管理。

总结

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

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
消息中间件 缓存 监控
系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性。恰逢年终月份,正好梳理总结下自己的系统稳定性建设经验和思考。
系统稳定性建设实践总结
|
Java Apache 数据格式
httpclient 解决 connection reset 问题
  httpclient 解决 connection reset 问题   错误如下:   java.net.SocketException: Connection reset at java.
9029 0
|
8月前
|
人工智能 Python
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
ImBD是一款由复旦大学、华南理工大学等机构联合推出的AI内容检测器,能够快速识别机器修订文本,适用于多种场景,显著提升检测性能。
602 8
ImBD:复旦联合华南理工推出 AI 内容检测模型,快速辨别文本内容是否为 AI 生成
|
前端开发 JavaScript API
用的前端框架都有什么
【8月更文挑战第26天】用的前端框架都有什么
972 2
|
10月前
|
SQL 关系型数据库 MySQL
MySQL性能探究:count(*)与count(1)的性能对决
在MySQL数据库的性能优化中,对查询语句的细微差别有着深入的理解是非常重要的。`count(*)`和`count(1)`是两种常用的聚合函数,用于计算行数。在面试中,面试官经常会问到这两种函数的性能差异。本文将探讨`count(*)`与`count(1)`的性能对比,并整理十道经典的MySQL面试题,帮助你在面试中游刃有余。
290 3
|
10月前
|
C++
vs code常见的查找快捷键大全
【11月更文挑战第1天】本文介绍了 VS Code 中的基本查找和替换操作,包括在当前文件中查找(Ctrl + F)、查找替换(Ctrl + H)、查找下一个(F3)和查找上一个(Shift + F3)。还涵盖了在多个文件中查找(Ctrl + Shift + F)和查找替换(Ctrl + Shift + H),以及符号查找相关操作,如转到符号(Ctrl + T)和在文件中查找符号(Ctrl + Shift + O)。这些快捷键和功能帮助用户高效地管理和编辑代码。
1546 2
|
存储 网络协议 网络性能优化
一文详细理解计算机网络体系结构(考试和面试必备)
这篇文章提供了C++基础知识的快速概述,包括C++的特点、面向对象设计、组成部分、标准、学习建议、应用领域、源文件、编译器、类与对象、编译执行步骤、分号与块、标识符、基本数据类型、typedef、枚举类型、变量定义与声明等。
395 0
一文详细理解计算机网络体系结构(考试和面试必备)
|
算法 API 数据库
30分钟,通过ModelScope平台和开源LLM打造个人知识库 QA Bot(2)
30分钟,通过ModelScope平台和开源LLM打造个人知识库 QA Bot
|
数据采集 JSON 测试技术
抖音视频爬取项目:Dusk库的使用示例
抖音视频爬取项目:Dusk库的使用示例

热门文章

最新文章