微服务架构下业务单机QPS跑不上去应从哪些角度分析

这是做应用运维老生常谈的一个事儿,经常做,今天把他总结一下。

不管什么性质的业务,吞吐量的本质是木桶原理,能跑多大量取决于木桶最短的那个板,脑袋里是不是立刻可以出现木桶的那个模型,哈哈!!换句话说,当有能力提高短板的高度时,业务的吞吐量就会有所上升,但同样有个边际效应,经过多次的优化后,当再次提高短板的成本非常非常大,而付出后提高的量很低时,那就不要较劲了,直接加服务器吧。

言归正传,先解释一下单机QPS跑不上去的现象,具体表现就是高过一个点后错误率增加、时延增大,很显然遇到短板了,那么这个短板在哪呢,开发过来二话不说要求加服务器,难道作为应用运维就直接向老板要么?服务器或许已经够多了,用户总量你心中知道没有多少,用户增量也没多加多少,用户体验没增加多少,但业务上服务器成本却像一个无底洞一样,需要不停的增加扩容,那么这个时候就该静下心分析一下了,到底是什么原因导致业务跑不上去?负责任的说,运维这个职务给公司省钱就是给公司挣钱了,这个数字还特别可观。

一、系统本身

分析的整体方法是由浅入深、层层深入,先看服务器本身的指标有没有遇到短板,这个层面的分析也是相对最容易的,在配置层面(ulimit相关例如fd等)检查没有问题后,从下面四个方面进行分析。

1、cpu

cpu粗面上看有两个指标,当前使用率和负载,使用率反应的是当前cpu使用的情况,而负载反应的是cpu任务的队列情况,也就是说任务排队情况。一般cpu使用率在70%一下,负载在0.7*核心数以下,cpu的指标就算正常。

也有例外情况,得详细分析cpu细致使用指标,恰巧被我遇到过,阿里云的ecs,整体cpu利用率不高,但业务不上量,和晓峰查后cpu0的软中断极高,单核经常到100%,继续查后发现网络中断都在cpu0上,无法自动负载,网卡不支持多队列,cpu0的单核瓶颈造成了业务整体瓶颈。

cpu用满的解决办法很简单,查程序没有bug、无大的优化空间后,那就是加机器或者换cpu类型的机器,cpu我好像没有单加过。

2、内存

内存常规看的是使用率。这个在做cdn的小文件缓存时遇到过,当时用的是ats,发现程序经常重启,业务跟着抖动,后查日志发现OOM,当内存快要被占满的时候,kernel直接把ats的进程给杀掉了,然后out of socket memory,当时留的截图如下

同样,在应用程序层面没有大的优化空间,那就加内存吧!!

3、IO

IO主要指的是硬盘IO,我一般用iostat -kdx 1看后面的比率,当一只超过50%,且偶发到100%,这说明磁盘肯定是到瓶颈了。

这个在新浪做图片业务时遇到过,是一个源站的裁图业务,在设计上为了避免重复裁图,在本地硬盘上还存了一份近7天的图,由于用python写的,没有像JVM那种管理内存的机制,所有的IO都在硬盘上。有一天业务突然挂了,和开发查了2个多小时未果,中间调整了各种参数,紧急扩容了两台机器依然不起作用,服务的IO高我们是知道的,查看IO粗数据和历史差不多,就没往那方面深考虑,艳波后来请来另外一个业务的开发徐焱同学,经验颇多,查后当机立断使用挂载内存的方式替换掉硬盘的IO操作,IO立马下来了,服务恢复。

IO问题也得综合的解决,一般从程序逻辑到服务器都要改造,程序上把重IO的逻辑放在内存,服务器上加SSD吧。

4、网络

网络主要是看出、入口流量,要做好监控,当有一天网络千兆网卡流量曲线跑平了,那么业务就出问题了。

之前在运维图片业务时遇到过网卡跑满的情况,是一个图片(小文件)的源站存储业务,突然就开始告警,各种5XX,查后5XX并无规律,后看网卡发现出流量跑满了,虽然网卡是千兆不是万兆,但按道理就cdn的几个边缘节点过来回个源,不至于跑满,将文件拿出来分析后发现问题,开发的同学为了使用方便,将新闻app的apk升级包的大文件放到这个业务上了,很坑!!

网卡的解决方式很多,做bond和换万兆(交换机要支持),当前的情况我们后来改了业务逻辑,大于多少M上传时自动去大文件服务了。

二、程序代码

当查了cpu、内存、IO、网络都没什么问题时,就可以和开发好好掰扯掰扯了,为什么服务器本身没什么压力,量却跑不上去,不要以为开发写的程序都很优良,人无完人何况是人写出来的程序呢?很多时候就是程序或技术架构本身的问题跑不上去量,这个过程我们还是要协助开发分析技术架构的,是不是程序cpu和内存使用的不合理,是不是可以跑一下多实例,把某些逻辑比较重的点做下埋点日志,把执行的全过程apm数据跑出来进行分析,等等。

三、服务架构、业务逻辑

发展至今,微服务架构设计已成为大型互联网应用的标配,各模块间通过HTTP、RPC等相互依赖、相互调用,如果查完服务器、程序依然没有问题,再往深处走就得协同开发分析逻辑、架构了,这也是微服务架构下的一个特色,不是因为服务器的某个短板造成了业务瓶颈,而是某个模块的短板造成了整个业务吞吐量上不去,这个很好理解,甚至有很多接口用的是公网公共服务的接口。

在操作上,从一次完整请求的角度,从头到尾理一遍外部依赖的上下游资源和调用关系,外部资源包括api接口、DB等,然后在每个点做埋点日志,将数据进行分析,我们在线上用这种方法不知道分析出了多少瓶颈,如果程序没有做很好的降级熔断,由于程序本身的执行是堵塞的,一个接口慢影响到整个请求,进而QPS上来后请求变慢错误数增高的例子很多,在这种情况下,如果瓶颈的接口是别的部门或公网资源,加多少服务器都解决不了问题,进行结构改造吧。

好了,写到这,希望对遇到问题不知如何下手的你有所帮助!!

查看更多请到博主原创站:运维网咖社(www.net-add.com)

原文地址:http://blog.51cto.com/benpaozhe/2121710

时间: 2024-10-08 21:13:06

微服务架构下业务单机QPS跑不上去应从哪些角度分析的相关文章

微服务架构下的数据一致性:概念及相关模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:概念及相关模式 从2014年开始,微服务逐渐进入大家的实现,被认为是下一代实现信息化的有效手段.设计到系统,其中绕不开的就是数据一致性,从本地事务,到后来的分布式事务,都能够有效的保证数据一致性.但是在微服务架构中,这两种方式都不是最好的选择. 1. 使用本地事务和分布式事务保证一致性 在传统的单击应用中,最简单.最直接.最普遍的会使用一个关系型数据库,通过关系型数据库的事务保证数据的一致性.这种事务有四个基

微服务架构下,解决数据一致性问题的实践

随着业务的快速发展,应用单体架构暴露出代码可维护性差.容错率低.测试难度大和敏捷交付能力差等诸多问题,微服务应运而生.微服务的诞生一方面解决了上述问题,但是另一方面却引入新的问题,其中主要问题之一就是:如何保证微服务间的业务数据一致性.本文将通过一个商品采购的业务,来看看在Dubbo的微服务架构下,如何通过Fescar来保障业务的数据一致性.本文所述的例子中,Dubbo 和 Fescar 的注册配置服务中心均使用 Nacos.Fescar 0.2.1+ 开始支持 Nacos 注册配置服务中心.业

微服务架构下的数据一致性:可靠事件模式

主页:http://www.howardliu.cn/ 博客:微服务架构下的数据一致性:可靠事件模式 在<微服务架构下的数据一致性:概念及相关模式>中介绍了在微服务中实现数据一致性的三种方式,包括可靠事件模式.业务补偿模式.TCC模式.本文重点说一下可靠事件投递. 1. 可靠事件模式 可靠事件模式属于事件驱动架构,微服务完成操作后向消息代理发布事件,关联的微服务从消息代理订阅到该事件从而完成相应的业务操作,关键在于可靠事件投递和避免事件重复消费. 可靠事件投递有两个特性:1)每个服务原子性的完

Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的,微服务架构为业务开发带来了诸多好处的同时,例如单一职责.独立开发部署.功能复用和系统容错等等,也带来一些问题. 例如上手难度变大,运维变得更复杂,模块之间的依赖关系更复杂,数据一致性难以保证,等等.但是办法总是比问题多,本篇文章就来介绍一下我们是如何保障微服务架构的数据一致性的. 微服务架构的数据一

从 0 开始的微服务架构:(四)如何保障微服务架构下的数据一致性

虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题"Re:从 0 开始

如何保障微服务架构下的数据一致性

1.微服务架构的数据一致性问题 以电商平台为例,当用户下单并支付后,系统需要修改订单的状态并且增加用户积分.由于系统采用的是微服务架构,分离出了支付服务.订单服务和积分服务,每个服务都有独立数据库做数据存储.当用户支付成功后,无论是修改订单状态失败还是增加积分失败,都会造成数据的不一致. 为了解决例子中的数据一致性问题,一个最直接的办法就是考虑数据的强一致性.那么如何保证数据的强一致性呢?我们从关系型数据库的 ACID 理论说起. 关系型数据库具有解决复杂事务场景的能力,关系型数据库的事务满足

微服务架构下分布式事务解决方案——阿里云GTS

https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务的讨论和实践.Hailo有160个不同服务构成,NetFlix有大约600个服务.国内方面,阿里巴巴.腾讯.360.京东.58同城等很多互联网公司都进行了微服务化实践.当前微服务的开

微服务架构下分布式事务方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务的讨论和实践.Hailo有160个不同服务构成,NetFlix有大约600个服务.国内方面,阿里巴巴.腾讯.360.京东.58同城等很多互联网公司都进行了微服务化实践.当前微服务的开发框架也非常多,比较著名的有Dubbo.SpringCloud.thrift .grpc等. 2 微服务落地存在的问题

微服务架构下的身份认证

从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验.为了适应架构的变化.需求的变化,身份认证与鉴权方案也在不断的变革.面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证?面对外部的服务访问,该如何提供细粒度的鉴权方案?本文将会为大家阐述微服务架构下的安全认证与鉴权方案. 单体应用 VS 微服务 随着微服务架构的兴起,传统的单体应用场景下的身份认证和鉴权面临的挑战越来越大.单体应用体系下,应用是一个整体,一般针对所有的请求都会进行权限校验.请求一般会通过一个