This website requires JavaScript.

sea微服务平台(中台)上线生产环境出了事故,结果发现是代码问题。。。

2020年07月17日 11时41分 字数 2176 阅读 6 喜欢(0) 评论(0) 标签 SpringBoot SpringCloud 项目部署 java sea微服务中台

了解微服务的人都知道,所谓微服务都是最小颗粒为服务单位。根据设计者的爱好,最小可以到一个接口就是一个服务。

最近,办公应用在生产过程,用户代理列表接口,一直出现超时或者空指针异常。

根据我多年的编码经验(其实代码全是我一个人写的),我觉得应该是 sea微服务平台 出了问题。刚开始发现的时候因为博客应用要赶在12月31号上线,所以一直没有时间去排查。

这两天有时间了,开始问题排查:

我的机器比较强悍,一台机器跑了七个微服务,外加两个前端node服务。还有两个数据库,反正跑起来比较流畅。结果,我也确实没有想错,本地跑起来后确实没有问题。

这个很简单就是看一个应用下,通过推荐的二维码进来后,有哪些代理数据。

我跑到控制台一看,才三条数据,这肯定测不出来的,于是就把生产环境的数据拖了下来,再跑还是出不来生产环境的效果。然后我把分页的单页面量加到了1500条,我想这回肯定出来了,果然问题就出来了。页面一直显示超时,这时我转回去看了一下服务日志,发现一调用方一直在报一个接口错误。

标红处,一直为空

然后我去看了user服务的日志,没有报任何错误。

以我的丰富经验,觉得这十有八九是因为接口调用时间过长,被Hystrix给丢弃了。因为我知道被调用方的接口,里面有好几个其他微服务的调用链。看看代码吧:

image.png

标红的代码以前是在下面的循环里面的,按这个接口的业务逻辑,是可以放在外面的,那么分页被我调到1500条数据后,1500条数据*2次微服务调用,当然会慢,我就对这块循环组装数据的过程做了一个执行时间的统计。差不多要四秒。怪不得服务器上会报错了。

那我就这把块拖了出来。果然1500条数据一下子就过了。刚开始还在怀疑Spring Cloud的性能问题,突然发现自己写的代码也确实是挺傻B的。

到这里后,我突然想到了另外一个问题,我所有的微服务都是默认配置,服务与服务之间的调用,在多长时间内才不会被丢弃,刚好趁这个时间做一下调优。于是我在

long begin = System.currentTimeMillis() ;
PageResult<UserAgentBean> tmpUserAgentPage = UserAgentApiHelper.listForService(userAgentApi, userAgentQuery) ;
long end = System.currentTimeMillis() ;
log.info("获取用户代理耗时:" + (end - begin));

办公应用加了时间执行,为了调试效果,我把之前做的修改,改了回去。果然被我发,只要超过1秒,不管被调用方成功还是失败,这个调用都会被丢弃。

Spring Cloud参数调优网络上有很多文章,我为了安全起见,经过测试,加了以下参数:

ribbon:
  ReadTimeout: 2000   #负载均衡超时时间,默认值5000

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true   #如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
        isolation:
          thread:
            timeoutInMilliseconds: 2000 #断路器超时时间,默认1000ms

这个参数是将ribbon和hystrix的超时时间同时保持在2秒,我不加其他参数的问题是因为我没把握把参数调的比默认的配置好,而这个调参数,需要大量的业务场景,目前我在进行ing。

最后我的参数只加在了业务应用上,sea微服务平台上没有加,因为我认为如果做为一个平台级或中台级的服务,任何一个接口调用时间超过了1秒,都是不可以接受的;都是要想办法去优化的。

而业务应用调,sea微服务平台,我认为则可以稍微放松一点。毕竟是最终应用了,如果此应用还被其他应用调用,那么我认为一定要做优化。

另外,如果一个循环里面涉及到多个微服务调用,开发人员脑袋一定要有一根弦,这是一个网络调用。一定少这么干,一定会有其他的方法去解决,或者牺牲一下数据存储,做一点点的数据冗余来解决调用问题。

微服务想玩好,确实有很多坑要踩,比如我在做 sea微服务平台 开发的时候,就遇到了很因为自己不熟悉的问题导致一个问题查半天,后面有时间慢慢跟大家分享。

赞赏支持

微信赞赏码

支付宝赞赏码

相关推荐

暂无推荐文章

扫码关注”隔壁老易“