关于javascript:测试一年多上线就崩溃微服务到底应该怎么测试

34次阅读

共计 2981 个字符,预计需要花费 8 分钟才能阅读完成。

简介:只有理解危险,能力及时应答,保障服务高可用。

不久前,也就是 11 月 16 日,澳大利亚交易所(Australian Securities Exchange, ASX)上线了一个新的交易系统,但因为呈现故障而被迫敞开。这是其 2016 年因硬件故障导致休市后最为重大的一次事变。

测试了一年多,后果上线当天就奔溃

11 月 16 日中午,ASX 公布申明示意当天将休市,于次日失常工夫从新凋谢。交易所给出的敞开的起因是“局限于单个交易指令中交易多种证券(组合交易)的软件问题导致了市场数据不精确。”

ASX 此次降级的零碎是由纳斯达克开发的最新一代交易系统,目前在寰球宽泛应用。为了保障上线后的平安运行,ASX、技术提供商纳斯达克(Nasdaq)、客户和第三方独立专家曾经做了一年多的宽泛测试,包含四次彩排。

微服务该如何测试?

看完了冷落,也看看咱们本人的零碎。随着以 Spring Cloud、Dubbo 为代表的微服务架构的风行,当初很多企业都采纳了微服务架构。随着服务越来越多,这些服务该如何测试?如何防备下面说的零碎危险呢?

咱们来捋一捋线上零碎的危险,而后针对对应的危险来做对应的测试计划。以如下架构为例:

  • 其一是 变更带来的危险,比方后面提到的新零碎上线,或者咱们给上图中的购物车服务修一个 bug 等等。
  • 其二是 日常危险,比方底层的数据库、主机、网络等软硬件问题。

如图:

首先,对于变更带来的危险,咱们能够用如下的测试形式来验证:

开发自测

开发完一个性能后,在提交测试前,开发人员须要尽力确保逻辑正确。比方 IDEA 或者 Postman 等工具都能够在本地测试 HTTP 接口,能够用来测试 Spring Cloud 服务:

对于 Dubbo 服务,因为是基于 tcp 协定的,开发就须要本人手写一个简略的 conumer 来验证下服务的性能:

测试环境验证服务

开发提交测试后,测试人员也须要对服务进行测试,确保该服务能失常工作。此时的测试,个别是在独自的测试环境进行的。

对于 Spring Cloud 服务,测试人员能够在 Postman 等工具上,填写目标 IP、url、参数来发动申请、验证服务:

对于 Dubbo 服务来说,Dubbo Admin 也提供了服务测试性能,可能在页面上发动调用来验证服务:

为了平安思考,个别测试环境和公网、办公网是隔离的,比方测试环境是阿里云上一个独自的 VPC。在这种状况下,如果须要用 postman 或者 dubbo admin,就须要买通网络,比方专线等等。

如果你的服务接入了阿里云的微服务引擎(Microservice Engine, 下文简称为 MSE),那么就能够间接在 MSE 管制台上发动测试申请,而不必理睬网络、权限等问题。

在 MSE 管制台上,点击 微服务治理核心 -> 微服务测试 -> 服务测试 菜单,抉择服务、办法后,就能够可在服务测试页面抉择调用的节点、填写调用的参数:

能够看到,对于入参中的简单构造,比方图中的 ProductItem,MSE 的服务测试性能还会生成示例数据,不必测试人员本人去翻代码看如何填写入参了。

填写实现后,就能够点击执行,来执行测试:

MSE 的服务测试性能也反对 Spring Cloud 接口的测试:

整体回归测试

在一个服务公布后,须要测试人员验证下比拟重要的产品流程。比方架构图中,从浏览商品到最初下单,两头调用了好几个服务,测试人员须要整体来回归一遍这个性能。

对于简略的场景,在上线不频繁的状况下,能够由测试人员手动实现整个流程,来看看整个业务流程是否失常。如果业务场景过于简单,或者上线比拟频繁,那么就须要自动化测试了。一般来说,各个公司都会自建 CI 零碎来实现这种集成测试。

以 Jenkins 为例,须要:

  1. 搭建 Jenkins,配置好网络等环境
  2. 创立测试脚本仓库,并增加测试脚本
  3. 在 Jenkins 中配置 pipeline
  4. 执行并查看后果

同样,这儿也要解决不同环境中的网络问题,尤其是生产环境中的回归测试,更须要严格控制权限。

作为微服务整体的解决方案,MSE 也提供了自动化回归能力,可能一键实现回归测试。首先,点击 微服务治理核心 -> 微服务测试 -> 服务测试 菜单,新建一个自动化用例。每一步都能够调用一个 Spring Cloud 和 Dubbo 服务,能够增加断言,来验证测试是否通过:

点击“立刻执行”后,就在执行历史页面看到自动化回归的后果:

服务巡检

除了变更带来的危险之外,咱们还须要应答日常危险,比方数据库、网络等组件出问题的状况。为了应答这些危险,咱们须要定时验证下这个服务能不能失常工作。通常,很多公司会应用 CI 零碎的定时执行性能来构建一个定时执行的工作,如果工作执行失败,会主动触发告警。

以 Jenkins 为例,除了要搭建 Jenkins、写测试脚本以外,还须要将 Jenkins 的工作设置为定时触发:

比方,咱们须要查看商品服务是不是失常,就能够写一个 Jenkins 定时工作来调用商品服务,定时查看商品服务是否失常。当然,如果你的服务接入了 MSE 的话,也能够应用 MSE 提供的服务巡检性能来定时查看服务,如果不能依照预期工作,那么就立即发告警,告诉告警的订阅人。

点击 微服务治理核心 -> 微服务测试 -> 服务巡检 菜单,新建一个巡检工作:

而后在列表点击对应巡检工作的开始按钮,就能开始巡检了:

如果巡检出错了的话,也会有对应的告警进去,以钉钉告警为例:

当然,这儿也反对设置邮件、短信告警。您能够依据服务重要水平来设置不同的告警接管形式。

服务压测

零碎的流量是在一直变动的,为了应答可能呈现的突发流量,咱们须要及时评估零碎压力,决定是否扩容。另一方面,代码也是一直在批改的,所以也须要在每次上线前压测下,看下代码性能是不是有显著好转。在压测方面,Apache JMeter 能够很好的测试 Spring Cloud 服务和 Dubbo 服务。

对于 Spring Cloud 服务,能够利用 JMeter 自带的 HTTP 取样器来压测:

对于 Dubbo 服务的压测,jmeter-plugins-for-apache-dubbo 新增了 Dubbo 取样器,能够用来测试 Dubbo 服务。

只须要在 Dubbo 取样器的配置页面设置 registry、interface、method 等,就能够创立好压测工作了。

创立好压测工作后,通过 jemter 命令行即可执行压测工作,并失去压测后果:
jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport

最初,如果您的服务曾经接入了 MSE,那 MSE 也提供了开箱即用的压测能力。

点击 微服务治理核心 -> 微服务测试 -> 服务压测 菜单,新建一个压测场景,并配置好压测参数:

您也能够在压力配置选项卡上配置压力模型等参数:

配置实现后,能够在对应压测场景的详情页面开始压测。也能够在压测场景的详情页面查看后果,如果你须要更加具体的后果,请点击运行记录的详情按钮。

总结

微服务的测试,不论是本人搭建测试零碎、还是通过 MSE 来测试,都是为了应答变更带来的危险和日常危险。只有理解危险,能力及时应答,保障服务高可用。

相比于自建测试零碎,阿里云产品 MSE 提供了同样的性能,不仅防止了用户本人解决不同网络互通的问题,而且提供了欠缺的权限治理性能,确保线上稳固平安运行。除此之外,MSE 还提供了注册配置核心托管、微服务治理等性能,欢送体验。

作者:中间件小哥
原文链接
本文为阿里云原创内容,未经容许不得转载

正文完
 0