服务治理治什么,10张图告诉你答案

凌晨四点被公司的监控告警叫醒了,告警的原因是生产环境跑批任务发生故障。即刻起床处理故障,但还是花了不少时间才解决。

这次故障是一次数据校验的跑批任务,校验前面跑批任务的数据是否正确。幸运的是,之前的核心任务已经完成,并没有影响到生产上的交易系统工作。

为什么我这里提到了交易工作呢?因为交易系统是整个系统业务流量的入口,如果交易系统发生故障,那会给公司带来直接的收入损失。

今天我们聊的话题是服务治理,服务治理最终达到的结果就是系统 「7 * 24」 小时不间断服务。

1 监控告警

公司的这次生产告警很准确,找到系统的直接维护人,并且通知到是哪个跑批任务出了故障。这次告警是通过监控跑批任务中间件的任务执行结果来触发的。

一般情况下,告警有哪些类型呢?我们看下图:

1.1 批处理效率

多数情况下批处理任务是不阻碍业务入口的,所以不需要监控。

在阻碍业务入口的情况下,批处理任务必须要监控。我举两个业务场景:

  • 域名系统要通过dns信息和数据库记录来找出脏数据进行交易补偿,这期间客户查询域名信息可能是脏数据

  • 银行日终跑批期间是不允许实时交易的,这个「7 * 24」小时不间断服务相违背

这些场景下批处理效率是非常重要的一个监控指标,必须配置超时阈值并进行监控。

1.2 流量监控

常用的限流的指标如下图:流量监控我们需要注意几点:

  • 不同的系统,使用的监控指标是不同的,比如redis,可以用QPS指标,对于交易系统,可以用TPS

  • 通过测试和业务量的预估来配置合适的监控阈值

  • 监控阈值需要考虑突发情况,比如秒杀、抢券等场景

1.3 异常监控

异常监控对于系统来说非常重要。在生产环境中很难保证程序不发生异常,配置合理的异常报警对快速定位和解决问题至关重要。比如开篇提到的跑批告警,告警信息中带着异常,让我很快就定位到了问题。

异常监控需要注意下面几个方面:

  • 客户端read timeout,这时要尽快从服务端找出原因

  • 对客户端收到响应的时间设置一个阈值,比如1秒,超出后触发告警

  • 对业务异常一定要监控,比如失败响应码

1.4 资源使用率

生产环境配置系统资源时,一般要对系统资源的使用率有一个预测。比如redis在当前的内存增长速率下,多久会耗尽内存,数据库在当前的增长速率下多久会用光磁盘。

系统资源需要设置一个阈值,比如70%,超过这个限制就要触发告警。因为资源使用快要饱和时,处理效率也会严重下降。

配置资源使用率的阈值时,一定要考虑突增流量和突发业务的情况,提前预留额外的资源来应对。

对核心服务要做好限流措施,防止突增流量把系统压垮。

1.5 请求延迟

请求延迟并不是一个很容易统计的指标,下图是一个电商购物系统:这个图中,我们假设组合服务会并发地调用下面的订单、库存和账户服务。客户端发出请求后,组合服务处理请求需要花费2秒的处理时间,账户服务需要花费3秒的处理时间,那客户端配置的read timeout最小是5秒。

监控系统需要设置一个阈值来监控,比如1秒内如果有100个请求延迟都大于了5秒就触发报警,让系统维护人员去查找问题。

客户端设置的read timeout不能太大,如果因为服务端故障导致延迟,要保证fail-fast,防止因为资源不能释放造成系统性能大服务降低。

1.6 监控注意事项

监控是为了能让系统维护人员快速发现生产问题并定位到原因,不过监控系统也有几个指标需要考虑:

  • 根据监控目标来指定监控指标采样频率,频率太高会增加监控成本。

  • 监控覆盖率,最好能够覆盖到所有核心的系统指标。

  • 监控有效性,监控指标不是越多越好,太多会给分辨报警有效性带来额外工作量,也会让开发人员习以为常。

  • 告警时效,对于跑批任务这种非实时交易类系统,可以不用实时告警,记录事件后定一个时间,比如早晨8点触发告警,责任人到公司后处理。

  • 为避免长尾效应,最好不要使用平均值。如下图:10个请求,有9个延迟都是1秒,但有1个延迟是10秒,所以平均值参考意义并不大。

可以采用按照区间分组的方式,比如延迟1秒以内的请求数量,1-2秒的请求数量,2-3秒的请求数量分组进行统计,按照指数级增长的方式来配置监控阈值。

2 故障管理

2.1 常见故障原因

故障发生的原因五花八门,但常见的无非下面几种:

  • 发布升级带来的故障

  • 硬件资源故障

  • 系统过载

  • 恶意攻击

  • 基础服务故障

2.2 应对策略

应对故障,我们分两步走:

  • 立即解决故障,比如因为数据问题引起的故障,修改问题数据即可。

  • 找出故障原因,可以通过查找日志或者调用链追踪系统来定位问题并解决

2.2.1 软件升级故障

升级带来的故障,有的是上线后能很快暴露的。有的是上线很长时间才会暴露,比如有的业务代码可能之前一直执行不到。

对于第一种情况,可以采用灰度发布的方式进行验证解决。

对于第二种情况,完全避免是很难的,我们只能最大限度的提高测试用例覆盖率。

2.2.2 硬件资源故障

这类故障主要分为两类:

  • 硬件资源超载,比如内存不够

  • 硬件资源老化

对于第一种故障一般用监控告警的方式来通知责任人处理,处理的方式主要是增加资源,找出消耗资源严重的程序进行优化。

对于第二种故障需要运维人员对硬件资源进行记录和监控,对于老化的资源及时进行更换。

2.3 系统过载

系统过载可能是遇到秒杀之类的突增流量,也可能是随着业务发展慢慢地超过系统承受能力,可以使用增加资源或者限流的方式来应对。

2.4 恶意攻击

恶意攻击的类型非常多,比如DDOS攻击、恶意软件、浏览器攻击等。

针对恶意攻击,防止手段也很多,比如对请求报文进行加密、引入专业的网络安全防火墙、定期安全扫描、核心服务部署在非默认端口等。

2.5 基础软件故障

如下图所示,除了业务服务外每个组件都是基础软件,都需要考虑高可用。

3 发布管理

发布通常指软硬件的升级,包括业务系统版本升级、基础软件升级、硬件环境升级等。作为程序员,本文讲的升级是针对业务系统的升级。

3.1 发布流程

一般情况下,业务系统升级流程如下:发布到生产环境,验证没有问题表示发布成功。

3.2 发布质量

在升级软件的时候,发布质量非常重要,为保证发布质量需要注意下面这些问题。

3.2.1 CheckList

为了保证发布质量,发布前维护一份CheckList,并且开发团队对所有的问题进行确认。等这份清单都确认完成后进行构建发布。下面是一些比较典型的问题:

  • 上线sql是否正确

  • 生产配置文件配置项是否完备

  • 外部依赖的服务是否已经发布并验证完成

  • 新机器路由权限是否已经开通

  • 多个服务的发布顺序是否已经明确

  • 如果上线后发生故障怎么应对

3.2.2 灰度发布

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。如下图:升级时采用金丝雀部署的方式,先把其中一个server作为金丝雀进行发布升级,这个server在生产环境运行后没有问题,再升级其他的server。有问题则进行回滚。

3.2.2 蓝绿部署

蓝绿部署的方式如下图:升级之前客户端的请求发送到绿色服务上,升级发布之后,通过负载均衡把请求转到蓝色系统,绿色系统暂时不下线,如果生产测试没有问题,则下线绿色系统,否则切回绿色系统。

蓝绿部署跟金丝雀部署的区别是,金丝雀部署不用增加新的机器,而蓝绿部署相当于是增加了一套新机器,需要额外的资源成本。

3.2.4 ab测试

ab测试是指在生产环境发布多个版本,主要目的是测试不同版本的不同效果。比如页面样式不一样,操作流程不一样,这样可以让用户选择一个最喜欢的版本作为最终版本。如下图:三个颜色的服务部署了,客户端的请求分部发送到跟自己颜色一样的服务上。

ab测试的版本都是已经是验证没有问题的,这点不同于灰度发布。

3.2.4 配置变更

好多时候我们把配置写在代码里,比如yaml文件。这样我们修改配置后就需要重新发布新版本。如果配置修改频繁,可以考虑下面两种方法:

  • 引入配置中心

  • 使用外部系统保存配置

4 容量管理

在2.3节中讲到系统过载导致的系统故障。容量管理是保证系统上线后稳定运行的一个重要环节,主要是保证系统流量不超过系统能承受的阈值,防止系统奔溃。一般情况下,系统容量超载的原因如下:

  • 业务持续增加给系统带来的流量不断增加

  • 系统资源收缩,比如一台机器上新部署了一个应用,占用了一些资源

  • 系统处理请求变慢,比如因为数据量变大,数据库响应变慢,导致单个请求处理时间变长,资源不能释放

  • 重试导致的请求增加

  • 突增流量,比如微博系统遇到明星离婚案之类的新闻。

4.1 重试

对于一些失败的请求进行重试,能够很好地增加系统的用户体验。重试一般分为两类,一类是对连接超时的请求,一类是对响应超时的请求。

对于连接超时的请求,可能是网络瞬时故障造成的,这种情况下重试并不会对服务端造成压力,因为失败的请求压根就没有到达服务端。

但是对于响应超时的请求,如果进行重试,可能会给服务端带来额外的压力。如下图:正常情况下,客户端先调用服务A,服务A再调用服务B,服务B只被调用了一次。

如果服务B响应慢导致超时,客户端配置了失败重试2次,服务A也配置了失败重试2次,在服务B最终不能响应的情况下,服务B最终被调了9次。

在大型分布式系统中,如果调用链很长,每个服务都配置了重试,那重试会给调用链下游服务造成巨大的压力甚至让系统奔溃。可见重试不是越多越好,合理的设置重试对系统有保护作用。

对于重试,有如下3个建议:

  • 非核心业务不重试,如果重试,必须限定次数

  • 重试时间间隔要指数增加

  • 根据返回失败的状态进行重试,比如服务端定义一个拒绝码,客户端就不重试了

4.2 突增流量

对于突增流量,是很难提前规划到的。

遇到突增的流量时,我们可以先考虑增加资源。以K8S为例,如果原来有2pod,使用deploy编排扩容到4pod。命令如下:

kubectl scale deployment springboot-deployment --replicas=4

如果资源已经用完了,那就得考虑限流了。推荐几个限流框架:

  • google guava

  • netflix/concurrency-limits

  • sentinel

4.3 容量规划

系统建设初期做好容量规划是非常重要的。

可以根据业务量来估算系统的QPS,基于QPS进行压力测试。针对压力测试的结果估算的容量,并不一定能应对生产环境的真实场景和突发情况,可以根据预估容量给出预留资源,比如2倍容量。

4.4 服务降级

服务降级对于服务端来说,可以有三种方式:

  • 服务端容量超载后,直接拒绝新的请求

  • 非核心服务暂停,预留资源给核心服务用

  • 客户端可以根据服务端拒绝的请求比例来进行降级处理,比如观察1分钟,如果服务端对1000个请求,拒绝了100个,客户端可以作为参考,以后每分钟超过90个,就直接拒绝。

5 总结

微服务化的架构给系统带来了很多好处,但同时也带来了一些技术上的挑战。这些挑战包括服务注册与发现、负载均衡、监控管理、发布升级、访问控制等。而服务治理就是对这些问题进行管理和预防,保证系统持续平稳地运行。

本文所讲的服务治理方案,也算是传统意义上的方案,有时会有一些代码的侵入,而框架的选择也会对编程语言有限制。

在云原生时代,Service Mesh的出现又把服务治理的话题带入一个新的阶段。后续再做分享。

「原创不易,点个“再看”就是对我最大的支持,转发一下那就是真爱了。」

「欢迎加我微信:zhujinjun86,拉你加入技术群。」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mapgis6.7 林相图自动注记 .

林业行业制作林相图是一件比较复杂的事。Mapgis注释和子图分别对应arcmap中的标注和符号,区文件填充颜色对应arcmap中的渲染。由于mapgis中上注释文本和子图号都只能手工一个个去上。如果能结合arcmap出图的强大功能,由arcmap负责制图,mapgis…

在linux文件共享接口,入坑Linux-day13(使用vsftpd服务传输文件、使用Samba或NFS实现文件共享)...

一、文件传输协议#ftp是一种在互联网中进行的文件传输协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接收客户端发出的相关FTP命令与参数。#FTP工作的两种模式主动…

大数据分析了50万条拼多多商品数据, 得出了这样的结论

一、缘起我在杭州有位朋友,提到有家做社交的电商很火,叫拼多多,我没有在意,直到有一天,我居然在电视上看到了它的广告,广告画面活蹦乱跳,余音绕梁,我惊呆了,想知道这是何…

CentOS 7 安装 Greenplum6 (附 dotNET Core 示例)

Mysql 在面对大数据量的时候,还是表现有些吃力,所以产品中需要扩展能支持海量数据的数据库,这里选择的数据库为 Greenplum6 ,Greenplum 底层使用的是开源数据库 PostgreSQL 。本文会介绍怎样在 CentOS 7 中安装 Greenplum6&#x…

linux系统故障实验,Linux常见系统故障排除

导读: 前言 运维人员经常会遇到各式各样的系统故障,如何根据故障特征锁定问题根源,需要的不仅仅是技巧,还有遇到故障时的思路,和对系统内部的理解,本文列出了一些常见的系统故障和处理方法,在那…

MIT正式发布编程语言Julia 1.0:Python、R、C++三合一

MIT 开发的 Julia 语言是全球热度上升最快的编程语言之一,下载量超过 200 万次,下载者包括谷歌、Facebook、FAA 和美国能源部等各个部门的开发者。近日,MIT CSAIL 实验室正式发布了 Julia 1.0,该语言期望结合 C 的速度、Matlab 的…

EFCore3.1+编写自定义的EF.Functions扩展方法

前言本文主要是讲解EF Core3.0 如何实现自定义的数据库扩展函数,虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密..。这样的话 我们就需要自己扩展这些数据库函数 从而达到调用的目的.本文以达梦数据库为例(其他数据库都一样)..上篇文章推荐: EF …

WSUS2.0数据导入、导出(备份、还原)

以前我们做的WSUS实验都是让WSUS服务器通过互联网连接到微软网站去下 载更新补丁,但是现实的生活中有些网络是与互联网隔绝的,这种情况下可以采用导入导出WSUS数据的方法来解决WSUS的更新问题。先在一台能联网的 WSUS服务器上下载所需更新,然…

linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本?如果要用Perl脚本…

借助TensorFlow框架,到底能做什么?

谷歌在七月份正式推出了深度学习框架TensorFlow 1.9 版本,那么TensorFlow框架到底是什么?TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。最初由Google大脑小组的研究员和工程师们开发…

在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法

TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到来…

CCNP课堂练习四:frame-relay traffic-shaping(帧中继流量×××)

帧中继(Frame Relay)是一种网络与数据终端设备(DTE)接口标准。它可以减少结点的处理时间,提高网络的吞吐量。帧中继提供的是数据链路层和物理层的协议规范,任何高层协议都独立于帧中继协议,因此,大大地简化了帧中继的实现。目前帧中继的主要应用之一是局域网互联,特别是在局域网…

百度内部培训PPT流出:数据分析的道与术

这是一份来自百度内部的数据分析学习PPT,非常经典的入门教材。主要内容1、什么是数据分析(道)1.1 数据分析是什么?1.2 什么是做好数据分析的关键?1.3 分析要思考业务,尤其是接地气1.4 分析要言之有物&#…

VS2010 C++下编译调试MongoDB“.NET研究”源码

考虑到mongodb使用了boost库源码,参考mongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本:boost版本1.42:http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download 下载boost源码之后…

有了这15款编程游戏,谁都可以学编程!

1、Coding Games一边玩游戏,一边挑战编程难题。Coding games支持包括PHP、C、JavaScript在内的20多种编程语言。用户界面功能强大,可以定制。例如,你可以选择你的代码编辑器的风格: Emacs、Vim、Classic。如果你想提升编程技能&am…

毕业的那天,程序员师兄竟然让我去做这一行

给大家看一份最新的数据:(薪资表)2018年最新数据:python、大数据、人工智能从业者工资为什么人工智能行业的工资那么高?无论是科研院所,商业巨头还是初创企业,各行各业都在大力开发或者引进人工…

Python 分析《爱情公寓》电影,让我十年情怀一瞬间都喂了狗

深陷抄袭之名、诉讼纠纷的《爱情公寓》终于上映了。情怀粉们的力量不容小觑,截止到8月12,《爱情公寓》票房已经突破3.72亿大关,稳坐票房冠军的宝座,院线排片占比高达40.0%。和超高票房背道而驰的,是各大社交平台上一边…

银行背景下分库分表技术选型

业务持续增长带来的单表数据量过大,必然影响到数据库的读写性能,那到底要不要分库分表呢?阿里巴巴P3C规范给出一个推荐:【推荐】单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。说明:如果预计…

单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码

芯片是采用的stc89c51单片机.下面是矩阵键盘的电路图,矩阵键盘是接在p2口的.下面是单片机部分的图,数码管显示等完整的原理图可以从http://www.51hei.com/f/ks51.pdf 这里下载本文引用地址:http://www.eepw.com.cn/article/201612/324612.htm下面是程序源…

资料分享 | R语言资料分享来袭

小编从大学开始,便开启资料收集功能。R作为一种统计分析软件,广泛应用于生物、医学、电商、新闻等数据相关行业,并已成为主流数据应用软件之一,经过近几年的积累和沉淀,再加上日常的深入研究,小编收集整理了…