测试一年多,上线就崩溃!微服务到底应该怎么测试?

简介: 只有了解风险,才能及时应对,保障服务高可用。

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

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

11 月 16 日中午,ASX 发布声明表示当天将休市,于次日正常时间重新开放。交易所给出的关闭的原因是“局限于单个交易指令中交易多种证券(组合交易)的软件问题导致了市场数据不准确。”

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

微服务该如何测试?

看完了热闹,也看看咱们自己的系统。随着以 Spring Cloud、Dubbo 为代表的微服务架构的流行,现在很多企业都采用了微服务架构。随着服务越来越多,这些服务该如何测试?如何防范上面说的系统风险呢?

我们来捋一捋线上系统的风险,然后针对对应的风险来做对应的测试计划。以如下架构为例:

 

image.png

一般来说,一个业务系统的风险来自两处:

  • 其一是变更带来的风险,比如前面提到的新系统上线,或者我们给上图中的购物车服务修一个 bug 等等。

  • 其二是日常风险,比如底层的数据库、主机、网络等软硬件问题。

如图:

 

image.png

首先,对于变更带来的风险,我们可以用如下的测试方式来验证:

开发自测

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

 

image.png

对于 Dubbo 服务,由于是基于 tcp 协议的,开发就需要自己手写一个简单的 conumer 来验证下服务的功能:

 

image.png

 

image.png

测试环境验证服务

开发提交测试后,测试人员也需要对服务进行测试,确保该服务能正常工作。此时的测试,一般是在单独的测试环境进行的。

对于 Spring Cloud 服务,测试人员可以在 Postman 等工具上,填写目的 IP、url、参数来发起请求、验证服务:

 

image.png

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

 

image.png

为了安全考虑,一般测试环境和公网、办公网是隔离的,比如测试环境是阿里云上一个单独的 VPC。在这种情况下,如果需要用 postman 或者 dubbo admin,就需要打通网络,比如专线等等。

如果你的服务接入了阿里云的微服务引擎(Microservice Engine, 下文简称为 MSE),那么就可以直接在 MSE 控制台上发起测试请求,而不用理会网络、权限等问题。

在 MSE 控制台上,点击 微服务治理中心->微服务测试->服务测试 菜单,选择服务、方法后,就可以可在服务测试页面选择调用的节点、填写调用的参数:

 

image.png

可以看到,对于入参中的复杂结构,比如图中的 ProductItem,MSE 的服务测试功能还会生成示例数据,不用测试人员自己去翻代码看如何填写入参了。

填写完成后,就可以点击执行,来执行测试:

 

image.png

MSE 的服务测试功能也支持 Spring Cloud 接口的测试:

 

image.png

整体回归测试

在一个服务发布后,需要测试人员验证下比较重要的产品流程。比如架构图中,从浏览商品到最后下单,中间调用了好几个服务,测试人员需要整体来回归一遍这个功能。

对于简单的场景,在上线不频繁的情况下,可以由测试人员手动完成整个流程,来看看整个业务流程是否正常。如果业务场景过于复杂,或者上线比较频繁,那么就需要自动化测试了。一般来说,各个公司都会自建 CI 系统来完成这种集成测试。

以 Jenkins 为例,需要:

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

 

image.png

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

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

 

image.png

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

 

image.png

服务巡检

除了变更带来的风险之外,我们还需要应对日常风险,比如数据库、网络等组件出问题的情况。为了应对这些风险,我们需要定时验证下这个服务能不能正常工作。通常,很多公司会使用 CI 系统的定时执行功能来构建一个定时执行的任务,如果任务执行失败,会自动触发告警。

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

 

image.png

比如,我们需要检查商品服务是不是正常,就可以写一个 Jenkins 定时任务来调用商品服务,定时检查商品服务是否正常。当然,如果你的服务接入了 MSE 的话,也可以使用 MSE 提供的服务巡检功能来定时检查服务,如果不能按照预期工作,那么就立刻发告警,通知告警的订阅人。

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

 

image.png

然后在列表点击对应巡检任务的开始按钮,就能开始巡检了:

 

image.png

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

 

image.png

当然,这儿也支持设置邮件、短信告警。您可以根据服务重要程度来设置不同的告警接收方式。

服务压测

系统的流量是在不断变化的,为了应对可能出现的突发流量,我们需要及时评估系统压力,决定是否扩容。另一方面,代码也是不断在修改的,所以也需要在每次上线前压测下,看下代码性能是不是有明显恶化。在压测方面,Apache JMeter 可以很好的测试 Spring Cloud 服务和 Dubbo 服务。

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

 

image.png

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

只需要在 Dubbo 取样器的配置页面设置 registry、interface、method 等,就可以创建好压测任务了。

 

image.png

创建好压测任务后,通过 jemter 命令行即可执行压测任务,并得到压测结果:
jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport

 

image.png

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

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

 

image.png

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

 

image.png

配置完成后,可以在对应压测场景的详情页面开始压测。也可以在压测场景的详情页面查看结果,如果你需要更加详细的结果,请点击运行记录的详情按钮。

 

image.png

总结

微服务的测试,不论是自己搭建测试系统、还是通过 MSE 来测试,都是为了应对变更带来的风险和日常风险。只有了解风险,才能及时应对,保障服务高可用。

相比于自建测试系统,阿里云产品 MSE 提供了同样的功能,不仅避免了用户自己处理不同网络互通的问题,而且提供了完善的权限管理功能,确保线上稳定安全运行。除此之外,MSE 还提供了注册配置中心托管、微服务治理等功能,欢迎体验。

作者:中间件小哥

原文链接

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云熊鹰:基于融合、协同系统的边缘云原生架构演进和实践

简介: 云原生和边缘计算是近两年都非常火的技术话题了,在第十届云计算标准和应用大会上,阿里云高级技术专家熊鹰分享了《基于融合、协同系统的边缘云原生架构演进和实践》,希望通过介绍现在阿里云在边缘计算和边缘云原生这些技术领…

漫画:什么是 “建造者模式” ?

作者&#xff1a;东风玖哥来源&#xff1a; 程序员小灰————— 第二天 —————————————————首先&#xff0c;我们来定义一个Product类&#xff1a;public class Product {ArrayList<String> parts new ArrayList<String>();public void add(S…

阿里云云效何勉:云原生是“精益实践”的最佳助力

简介&#xff1a; 1月15日&#xff0c;国内知名“精益产品开发”研究和实践者、阿里云云效资深技术专家何勉在阿里云《云计算情报局》线上直播栏目中&#xff0c;分享其对研发新模式的最新思考&#xff0c;提出“下一代精益开发方法”&#xff0c;助力企业在研发效能上提升10倍…

开发效率提升15倍!批流融合实时平台在好未来的应用实践

简介&#xff1a; 本文由好未来资深数据平台工程师毛祥溢分享&#xff0c;主要介绍批流融合在教育行业的实践。内容包括两部分&#xff0c;第一部分是好未来在做实时平台中的几点思考&#xff0c;第二部分主要分享教育行业中特有数据分析场景。 1.背景介绍 好未来介绍 好未来是…

那些公司都配不上我,所以我选择创业

【CSDN 编者按】她&#xff0c;一个89年的农村姑娘&#xff0c;从种蘑菇到卖煤球&#xff0c;再到敲代码做云原生&#xff0c;成为企业创始人&#xff0c;一路走来她都经历了哪些困难与挑战&#xff0c;对于新生代程序员又有哪些建议&#xff1f;让我们一起来看看她是怎么说的。…

如何跑通第一个 SQL 作业

简介&#xff1a; 本文由阿里巴巴技术专家周凯波&#xff08;宝牛&#xff09;分享&#xff0c;主要介绍如何跑通第一个SQL。 一、SQL的基本概念 1.SQL 分类 SQL分为四类&#xff0c;分别是数据查询语言&#xff08;DQL&#xff09;、数据操纵语言&#xff08;DML&#xff09…

云原生DevOps的5步升级路径

简介&#xff1a; 究竟什么是云原生DevOps呢&#xff1f;我们认为&#xff1a;云原生DevOps是充分利用云原生基础设施&#xff0c;基于微服务/无服务架构体系和开源标准&#xff0c;语言和框架无关&#xff0c;具备持续交付和智能自运维能力&#xff0c;从而做到比传统DevOps更…

数据创新的四个陷阱

简介&#xff1a; 数据的重要性在当今已经无需在多言&#xff0c;所有的企业都意识到数据的重要性&#xff0c;都希望利用数据来驱动业务的发展。但是&#xff0c;很多企业信息化管理者依然存在对于数据智能&#xff0c;数据驱动的一些误解&#xff0c;这些误解会让企业的数据利…

Parallels 发布 Desktop 17版本,支持 Windows 11 和 macOS Monterey

Parallels Desktop 17 亮点速揽&#xff1a;性能提升&#xff0c;对图像效果加以改进、增强了 Windows 游戏体验&#xff0c;同时是全球首个在搭载 Apple M1 芯片的 Mac 上运行的 macOS Monterey 虚拟机&#xff0c;带来更为无缝的跨平台工作体验。 编辑 | 宋慧 头图 | Paralle…

如何将实时计算 Flink 与自身环境打通

简介&#xff1a; 如何使用实时计算 Flink 搞定数据处理难题&#xff1f;实时计算 Flink 客训练营产品、技术专家齐上阵&#xff0c;从 Flink的发展、 Flink 的技术原理、应用场景及行业案例&#xff0c;到开源Flink功能介绍和实时计算 Flink 优势详解&#xff0c;现场实操&…

一文知晓浪潮云海OS在SPEC Cloud测试中的调优实践!

日前&#xff0c;SPEC&#xff08;Standard Performance Evaluation Corporation&#xff0c;即国际标准性能评测组织&#xff09;公布了最新 Cloud IaaS 2018 Benchmark 测试成绩&#xff0c;在同规模测试场景下浪潮数据核心产品浪潮云海OS再次刷新世界纪录&#xff0c;性能得…

阿里云 EMR Delta Lake 在流利说数据接入中的架构和实践

简介&#xff1a; 为了消灭数据孤岛&#xff0c;企业往往会把各个组织的数据都接入到数据湖以提供统一的查询或分析。本文将介绍流利说当前数据接入的整个过程&#xff0c;期间遇到的挑战&#xff0c;以及delta在数据接入中产生的价值。 背景 流利说目前的离线计算任务中&…

怎么提升写代码的能力

简介&#xff1a; 对于程序员而言&#xff0c;我始终认为代码是展现能力的关键&#xff0c;一个优秀程序员写的代码&#xff0c;和一个普通程序员写的代码是很容易看出差别的&#xff0c;代码作为程序员的硬实力和名片的展示&#xff0c;怎么提升写代码的能力始终是一个关键的话…

发力LPWAN 升哲打磨数智城市物联网通信之“芯”

8月上旬&#xff0c;随着多项物联网芯片与通信领域技术发明专利证书的下发&#xff0c;升哲科技&#xff08;SENSORO&#xff09;已在低功耗广域物联网&#xff08;LPWAN&#xff09;及相关领域拥有近百项独家专利&#xff0c;突破国外专利封锁实现国产、自主、可控。这些专利技…

android studio证件照代码,Android 修图(换证件照背景,污点修复)

背景前段时间的一个周末&#xff0c;一个女生让我帮她换一下他的证件照背景&#xff0c;我又没带电脑。我又不好意思拒接&#xff0c;怎么办呢&#xff1f;应用商店下载一个证件照换背景的APP&#xff0c;瞬间换完&#xff0c;我正准备保存时&#xff0c;跳出来一个支付框&…

闲鱼是怎么让二手属性抽取准确率达到95%+的?

闲鱼是怎么让二手属性抽取准确率达到95%的&#xff1f; 先上效果 图1 - 二手属性抽取算法效果Demo(1) 背景 闲鱼作为一款C2X的app&#xff0c;站在商品发布的角度&#xff0c;闲鱼商品相对于淘宝商品的特点有&#xff1a; 轻发布导致商品信息不足 闲鱼采用图文描述的轻发布模…

代号红狗:那些站在微软云起点的中国创业者

作者&#xff1a;亲爱的数据 来源&#xff1a;亲爱的数据011996年的北京。上高中二年级的左玥&#xff0c;代表崇文区参加市一级"四通杯"青少年计算机程序设计竞赛&#xff0c;得了一等奖。据左玥回忆&#xff0c;在去参赛的路上&#xff0c;辅导老师还在吐槽&#x…

如何迁移 Flink 任务到实时计算

简介&#xff1a; 本文由阿里巴巴技术专家景丽宁&#xff08;砚田&#xff09;分享&#xff0c;主要介绍如何迁移Flink任务到实时计算 Flink 中来。 通常用户在线下主要使用 Flink run&#xff0c;这会造成一些问题&#xff0c;比如&#xff1a;同一个配置因版本而变化&#xf…

如何落地云原生DevOps?

简介&#xff1a; 什么是云原生DevOps&#xff1f;在阿里内部有怎样的实践&#xff1f;企业又该如何落地&#xff1f;阿里云云效专家团队提出了下一代精益产品开发方法体系——ALPD&#xff0c;提供了系统的云原生DevOps落地的方法支撑&#xff0c;帮助企业渐进式地迈入云原生D…

亚马逊独霸美国安云计算未来十年订单;英伟达推出首个元宇宙平台;华为云、天翼云会合并吗?...

NEWS本周新闻回顾亚马逊独霸美国安云计算未来十年订单&#xff0c;微软表示不服亚马逊AWS获得美国国家安全局100亿美元云计算合同。得知亚马逊拿下订单后&#xff0c;微软已向政府问责提交文件&#xff0c;提出抗议。最终……还是亚马逊笑到了最后英伟达推出全球首个元宇宙平台…