加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

大规模微服务场景下的十大痛点问题定位与优化

发布时间:2019-09-18 05:05:48 所属栏目:外闻 来源:云技术
导读:副标题#e# 今天我的主题是在微服务场景下的一个性能问题的定位优化,那么今天会讲一个我们其实出现的一个真实的一个场景,然后其实还是花了蛮长时间,然后把这个东西才定位到一个具体的问题。 现在云原生微服务架构特别的火,有非常多的优势,比如说这里面

接下来,我们来解析一个微服务场景下的问题定位过程。

大规模微服务场景下的十大痛点问题定位与优化

为什么说在微服务场景下,我们发现定位问题的时候,我们会觉得它特别的复杂,往往需要架构师牵头协调各个部门一块去定位某个问题。

首先第一个复杂度就是,从顶层到底层这个层次是实在是太多了,我们能想到就是任何一个比如说我们发现请求比较慢的时候,我们首先会想到整个层次中,最上面的应用是不是出了问题,应用这一层本身就比较复杂,图中密密麻麻的线是double服务之间的一个调用关系,它的复杂度已经十分高了,然后中间一旦出现了慢请求,这时候其实很难定位到一哪一个点,哪个服务集群调用哪个服务集群。

应用层下面这就是容器层,容器下面其实是openstack的云网络,我们采取方式是kubernetes和openstack整合的一个方式。因为kubernetes对于容器的发布,运行十分友好,对于网络尤其是多机房高可用横向扩展的vpc网络特性相对弱一些,那么正好云在VPC这方面相对比较强一些,例如浮动ip,跨机房高科用,专线等。容器层或者云网络层,都可能产生问题,例如容器网卡吞吐量受限制,或者ovs吞吐量受限制,都会造成性能问题。

再往下是物理网络,因为牵扯到多机房了,那么可能每机房还有多高可用区,那么整个机房的拓扑结构逻辑也会很复杂。

这时候就可以想象说当一个服务的多个副本构成一个业务集群,当从一个业务集群到另一个业务集群时延高,每个层次都其实都有可能出现问题是吧?然后我们就需要层层的去排查这个事情。

大规模微服务场景下的十大痛点问题定位与优化

另外一个相对比较头疼的一个事,是从前端到后端的层级也是挺多的。问题往往是在压测的时候会发现,那么压测的时候,我们是在我们公有云上去压真实线上的业务,所以其实是走公有网络的。

我们可以想象,从前端到后端经历的环节实在是太多了,你比较难判断他会慢在什么地方。

一开始进入机房,有边界路由器,然后有核心汇聚交换机,这是网管部去管的。

接下来就进入了虚拟的云网络网关,由云计算部门维护。

云网关进来后,会有一层负载均衡,这个负载均衡是可以适配多机房的负载均衡,可以做跨机房浮动IP漂移。

再往里面会有个API网关作为接入层,然后再往后就是服务层了。服务层分业务服务层和基础服务层,之间会引入注册发现机制,比如说用dubbo管理他们之间的相互调用。由于微服务规模比较大,就像刚才图中展示的一样,复杂度很高。

业务之间调用完毕之后,最终肯定是要落库的,这时候会涉及到缓存的访问,缓存后面是数据库。

有时候还涉及到调用云外的系统,因而需要经过云网络的网关。比如说外部的一些支付系统,安全检测系统,包括大数据等,都是云外的。这两次网关其实是不一样的,前面网关是DNAT网关,后面网关是SNAT网关。

可以想象一旦出现性能问题的时候,经过这么多环节就比较头疼,经常会困惑,这个问题到底出现在哪个环节呢?

大规模微服务场景下的十大痛点问题定位与优化

一般来说,性能问题往往通过线上性能压测发现的。一般大促之前,提前一段时间,就要开始进行压测。压的时候就会涉及到从前往后,从底到上的所有的系统和部门,都要派代表去参加,哪一块出现了问题,哪一个环节出现了性能瓶颈,哪一块就要改。

线上压力测试需要有一个性能测试的平台,做多种形式的压力测试。例如容量测试,通过梯度的加压,看到什么时候实在不行。摸高测试,测试在最大的限度之上还能承受多大的量,有一定的余量会保险一些,心里相对比较有底。再就是稳定性测试,测试峰值的稳定性,看这个峰值能够撑一分钟,两分钟还是30分钟。还有秒杀场景测试,限流降级演练测试等。

有的时候压测会遇到让人崩溃的事情,例如可能前几天压测的时候,看着吞吐量在向好的方向发展,突然有一天一下子就降下来了,这个时候离大促时间越来越近,心态就会比较崩溃,需要大家一块去看到底是什么问题。

大规模微服务场景下的十大痛点问题定位与优化

对于测试环境的管理,也是非常关键的。线上压测的时候,为了让数据和正式的线上数据实现隔离,常用的方法是对于消息队列,缓存,数据库,都是使用影子的方式。就需要流量染色的技术,带一个tag进去,说明这个请求是测试数据,还是真实数据。

流量染色的功能,除了压测里面使用,还可以用于测试环境治理。在大规模微服务场景下,不可能每个部门部署一套完整的环境,因为耗费的资源量实在是太大了。

这时候就需要合理规划测试环境。测试环境是应该和持续集成的流程紧密协作的。我们使用分支开发的方式,每个功能的开发在分支上,上线的时候,合并到主分支上来,主分支对应线上环境。

对于测试环境的规划,也是采取类似的思路。我们会有一个基准测试环境,对应master分支,里面部署全量的应用。每一个分支,比如说你修改了五个工程,测试的时候,不需要部署全量的应用,只需要把这五个工程去创建一个Delta测试环境就可以了。当客户端进行测试的时候,带上一个此分支的tag,从API网关开始,微服务框架嵌入的jar会将这个tag一直带下去。当这五个服务之内相互调用的时候,微服务框架就会选择这五个服务的实例进行调研,如果需要调用五个服务之外的其他服务的时候,微服务框架会到master环境里面,选择服务实例进行调用。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读