凌晨四点被公司的监控告警叫醒了,告警的原因是生产环境跑批任务发生故障。即刻起床处理故障,但还是花了不少时间才解决。
这次故障是一次数据校验的跑批任务,校验前面跑批任务的数据是否正确。幸运的是,之前的核心任务已经完成,并没有影响到生产上的交易系统工作。
为什么我这里提到了交易工作呢?因为交易系统是整个系统业务流量的入口,如果交易系统发生故障,那会给公司带来直接的收入损失。
今天我们聊的话题是服务治理,服务治理最终达到的结果就是系统 「7 * 24」 小时不间断服务。
公司的这次生产告警很准确,找到系统的直接维护人,并且通知到是哪个跑批任务出了故障。这次告警是通过监控跑批任务中间件的任务执行结果来触发的。
一般情况下,告警有哪些类型呢?我们看下图:
❝多数情况下批处理任务是不阻碍业务入口的,所以不需要监控。
❞
在阻碍业务入口的情况下,批处理任务必须要监控。我举两个业务场景:
这些场景下批处理效率是非常重要的一个监控指标,必须配置超时阈值并进行监控。
常用的限流的指标如下图: 流量监控我们需要注意几点:
redis
,可以用QPS
指标,对于交易系统,可以用TPS
异常监控对于系统来说非常重要。在生产环境中很难保证程序不发生异常,配置合理的异常报警对快速定位和解决问题至关重要。比如开篇提到的跑批告警,告警信息中带着异常,让我很快就定位到了问题。
异常监控需要注意下面几个方面:
read timeout
,这时要尽快从服务端找出原因1
秒,超出后触发告警生产环境配置系统资源时,一般要对系统资源的使用率有一个预测。比如redis
在当前的内存增长速率下,多久会耗尽内存,数据库在当前的增长速率下多久会用光磁盘。
系统资源需要设置一个阈值,比如70%
,超过这个限制就要触发告警。因为资源使用快要饱和时,处理效率也会严重下降。
配置资源使用率的阈值时,一定要考虑突增流量和突发业务的情况,提前预留额外的资源来应对。
对核心服务要做好限流措施,防止突增流量把系统压垮。
请求延迟并不是一个很容易统计的指标,下图是一个电商购物系统:
这个图中,我们假设组合服务会并发地调用下面的订单、库存和账户服务。客户端发出请求后,组合服务处理请求需要花费2
秒的处理时间,账户服务需要花费3
秒的处理时间,那客户端配置的read timeout
最小是5
秒。
监控系统需要设置一个阈值来监控,比如1
秒内如果有100
个请求延迟都大于了5
秒就触发报警,让系统维护人员去查找问题。
❝客户端设置的
read timeout
不能太大,如果因为服务端故障导致延迟,要保证fail-fast
,防止因为资源不能释放造成系统性能大服务降低。❞
监控是为了能让系统维护人员快速发现生产问题并定位到原因,不过监控系统也有几个指标需要考虑:
❝可以采用按照区间分组的方式,比如延迟1秒以内的请求数量,1-2秒的请求数量,2-3秒的请求数量分组进行统计,按照指数级增长的方式来配置监控阈值。
❞
故障发生的原因五花八门,但常见的无非下面几种:
应对故障,我们分两步走:
升级带来的故障,有的是上线后能很快暴露的。有的是上线很长时间才会暴露,比如有的业务代码可能之前一直执行不到。
对于第一种情况,可以采用灰度发布的方式进行验证解决。
对于第二种情况,完全避免是很难的,我们只能最大限度的提高测试用例覆盖率。
这类故障主要分为两类:
对于第一种故障一般用监控告警的方式来通知责任人处理,处理的方式主要是增加资源,找出消耗资源严重的程序进行优化。
对于第二种故障需要运维人员对硬件资源进行记录和监控,对于老化的资源及时进行更换。
系统过载可能是遇到秒杀之类的突增流量,也可能是随着业务发展慢慢地超过系统承受能力,可以使用增加资源或者限流的方式来应对。
恶意攻击的类型非常多,比如DDOS攻击、恶意软件、浏览器攻击等。
针对恶意攻击,防止手段也很多,比如对请求报文进行加密、引入专业的网络安全防火墙、定期安全扫描、核心服务部署在非默认端口等。
如下图所示,除了业务服务外每个组件都是基础软件,都需要考虑高可用。
发布通常指软硬件的升级,包括业务系统版本升级、基础软件升级、硬件环境升级等。作为程序员,本文讲的升级是针对业务系统的升级。
一般情况下,业务系统升级流程如下:
发布到生产环境,验证没有问题表示发布成功。
在升级软件的时候,发布质量非常重要,为保证发布质量需要注意下面这些问题。
为了保证发布质量,发布前维护一份CheckList
,并且开发团队对所有的问题进行确认。等这份清单都确认完成后进行构建发布。下面是一些比较典型的问题:
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。如下图:
升级时采用金丝雀部署的方式,先把其中一个server
作为金丝雀进行发布升级,这个server
在生产环境运行后没有问题,再升级其他的server
。有问题则进行回滚。
蓝绿部署的方式如下图: 升级之前客户端的请求发送到绿色服务上,升级发布之后,通过负载均衡把请求转到蓝色系统,绿色系统暂时不下线,如果生产测试没有问题,则下线绿色系统,否则切回绿色系统。
❝蓝绿部署跟金丝雀部署的区别是,金丝雀部署不用增加新的机器,而蓝绿部署相当于是增加了一套新机器,需要额外的资源成本。
❞
ab
测试是指在生产环境发布多个版本,主要目的是测试不同版本的不同效果。比如页面样式不一样,操作流程不一样,这样可以让用户选择一个最喜欢的版本作为最终版本。如下图:
三个颜色的服务部署了,客户端的请求分部发送到跟自己颜色一样的服务上。
❝ab测试的版本都是已经是验证没有问题的,这点不同于灰度发布。
❞
好多时候我们把配置写在代码里,比如yaml
文件。这样我们修改配置后就需要重新发布新版本。如果配置修改频繁,可以考虑下面两种方法:
在2.3节中讲到系统过载导致的系统故障。容量管理是保证系统上线后稳定运行的一个重要环节,主要是保证系统流量不超过系统能承受的阈值,防止系统奔溃。一般情况下,系统容量超载的原因如下:
对于一些失败的请求进行重试,能够很好地增加系统的用户体验。重试一般分为两类,一类是对连接超时的请求,一类是对响应超时的请求。
对于连接超时的请求,可能是网络瞬时故障造成的,这种情况下重试并不会对服务端造成压力,因为失败的请求压根就没有到达服务端。
但是对于响应超时的请求,如果进行重试,可能会给服务端带来额外的压力。如下图:
正常情况下,客户端先调用服务A
,服务A
再调用服务B
,服务B
只被调用了一次。
如果服务B
响应慢导致超时,客户端配置了失败重试2
次,服务A
也配置了失败重试2
次,在服务B
最终不能响应的情况下,服务B
最终被调了9
次。
在大型分布式系统中,如果调用链很长,每个服务都配置了重试,那重试会给调用链下游服务造成巨大的压力甚至让系统奔溃。可见重试不是越多越好,合理的设置重试对系统有保护作用。
对于重试,有如下3
个建议:
对于突增流量,是很难提前规划到的。
遇到突增的流量时,我们可以先考虑增加资源。以K8S
为例,如果原来有2
个pod
,使用deploy
编排扩容到4
个pod
。命令如下:
kubectl scale deployment springboot-deployment --replicas=4
如果资源已经用完了,那就得考虑限流了。推荐几个限流框架:
系统建设初期做好容量规划是非常重要的。
可以根据业务量来估算系统的QPS
,基于QPS
进行压力测试。针对压力测试的结果估算的容量,并不一定能应对生产环境的真实场景和突发情况,可以根据预估容量给出预留资源,比如2
倍容量。
服务降级对于服务端来说,可以有三种方式:
1
分钟,如果服务端对1000
个请求,拒绝了100
个,客户端可以作为参考,以后每分钟超过90
个,就直接拒绝。微服务化的架构给系统带来了很多好处,但同时也带来了一些技术上的挑战。这些挑战包括服务注册与发现、负载均衡、监控管理、发布升级、访问控制等。而服务治理就是对这些问题进行管理和预防,保证系统持续平稳地运行。
本文所讲的服务治理方案,也算是传统意义上的方案,有时会有一些代码的侵入,而框架的选择也会对编程语言有限制。
在云原生时代,Service Mesh
的出现又把服务治理的话题带入一个新的阶段。后续再做分享。
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/Q8-QCSqyjLCykdHn-h3oDw
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。