-
微服务都在CSE注册中心注册,微服务间都是通过RPC调用。当CSE故障不可用时,服务是否可以继续惯性运行,即CSE的SDK是否有缓存各个实例IP,CSE故障后可让服务调用继续可用?缓存是否有超时时间,如果有,超时时间是多少,即可惯性运行多长时间?
-
2020-01-20 11:50:30.060 +08:00 ERROR service/instance.go:558 FindInstancesCache.Get failed, consumer b3aa031e367111eab198fa163e49a89f find provider SmartHomeCloud/data-statistics/0.0.0+ error: context canceled2020-01-20 11:50:30.060 +08:00 WARN util/log.go:226 [29.963845644s]GET /v4/default/registry/instances?rev=474.1&appId=SmartHomeCloud&global=true&serviceName=data-statistics&env&version=0.0.0%2B2020-01-20 11:50:31.524 +08:00 ERROR cache/filter_instances.go:54 Instance().Search failed, consumer 05a9c016367211eab198fa163e49a89f find provider SmartHomeCloud/skill-adapter/0.0.0+ error: context canceled2020-01-20 11:50:31.524 +08:00 ERROR service/instance.go:558 FindInstancesCache.Get failed, consumer 05a9c016367211eab198fa163e49a89f find provider SmartHomeCloud/skill-adapter/0.0.0+ error: context canceled2020-01-20 11:50:31.525 +08:00 WARN util/log.go:226 [30.000057426s]GET /v4/default/registry/instances?rev=60925.1&appId=SmartHomeCloud&global=true&serviceName=skill-adapter&env&version=0.0.0%2B2020-01-20 11:50:31.525 +08:00 ERROR cache/filter_instances.go:54 Instance().Search failed, consumer 05a9c016367211eab198fa163e49a89f find provider SmartHomeCloud/skill-adapter/0.0.0+ error: context canceled2020-01-20 11:50:31.525 +08:00 ERROR service/instance.go:558 FindInstancesCache.Get failed, consumer 05a9c016367211eab198fa163e49a89f find provider SmartHomeCloud/skill-adapter/0.0.0+ error: context canceled2020-01-20 11:50:31.525 +08:00 WARN util/log.go:226 [29.969337579s]GET /v4/default/registry/instances?rev=60925.1&appId=SmartHomeCloud&global=true&serviceName=skill-adapter&env&version=0.0.0%2B2020-01-20 11:50:32.321 +08:00 ERROR cache/filter_instances.go:54 Instance().Search failed, consumer a2566711367211eab198fa163e49a89f find provider SmartHomeCloud/task-manager/0.0.0+ error: context canceled2020-01-20 11:50:32.321 +08:00 ERROR service/instance.go:558 FindInstancesCache.Get failed, consumer a2566711367211eab198fa163e49a89f find provider SmartHomeCloud/task-manager/0.0.0+ error: context canceled2020-01-20 11:50:32.321 +08:00 WARN util/log.go:226 [30.001567767s]GET /v4/default/registry/instances?rev=1284.1&appId=SmartHomeCloud&global=true&serviceName=task-manager&env&version=0.0.0%2B2020-01-20 11:50:33.487 +08:00 WARN service/instance.go:318 heartbeat successful, but renew b80e2a72367111eab198fa163e49a89f/b81861d6367111eab198fa163e49a89f failed. operator: 10.31.32.66 error: connect backend timed out2020-01-20 11:50:33.729 +08:00 ERROR backend/lease.go:52 [30.242388242s]renew lease 7903377136721272788 failed(recv: 11:50:03.487, send: 11:50:03.729), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b80e2a72367111eab198fa163e49a89f/b81861d6367111eab198fa163e49a89f error: context deadline exceeded2020-01-20 11:50:33.729 +08:00 WARN backend/lease.go:68 [30.242432269s]renew lease 7903377136721272788(recv: 11:50:03.487, send: 11:50:03.729), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b80e2a72367111eab198fa163e49a89f/b81861d6367111eab198fa163e49a89f2020-01-20 11:50:35.157 +08:00 WARN service/instance.go:318 heartbeat successful, but renew e376bc7a367111eab198fa163e49a89f/bf1435b53a8f11eab198fa163e49a89f failed. operator: 10.31.32.66 error: connect backend timed out2020-01-20 11:50:35.730 +08:00 ERROR backend/lease.go:52 [30.57296002s]renew lease 7903377136721792986 failed(recv: 11:50:05.157, send: 11:50:05.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/e376bc7a367111eab198fa163e49a89f/bf1435b53a8f11eab198fa163e49a89f error: context deadline exceeded2020-01-20 11:50:35.730 +08:00 WARN backend/lease.go:68 [30.573011185s]renew lease 7903377136721792986(recv: 11:50:05.157, send: 11:50:05.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/e376bc7a367111eab198fa163e49a89f/bf1435b53a8f11eab198fa163e49a89f2020-01-20 11:50:35.730 +08:00 WARN service/instance.go:318 heartbeat successful, but renew b964726f367111eab198fa163e49a89f/b96ee0c9367111eab198fa163e49a89f failed. operator: 10.31.32.168 error: connect backend timed out2020-01-20 11:50:36.730 +08:00 ERROR backend/lease.go:52 [30.999675741s]renew lease 7903377136721272828 failed(recv: 11:50:05.730, send: 11:50:06.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b964726f367111eab198fa163e49a89f/b96ee0c9367111eab198fa163e49a89f error: context deadline exceeded2020-01-20 11:50:36.730 +08:00 WARN backend/lease.go:68 [30.999729519s]renew lease 7903377136721272828(recv: 11:50:05.730, send: 11:50:06.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b964726f367111eab198fa163e49a89f/b96ee0c9367111eab198fa163e49a89f2020-01-20 11:50:36.854 +08:00 WARN service/instance.go:318 heartbeat successful, but renew b42d9692367111eab198fa163e49a89f/ef94a3d9367111eab198fa163e49a89f failed. operator: 10.31.32.168 error: connect backend timed out2020-01-20 11:50:37.730 +08:00 ERROR backend/lease.go:52 [30.884790756s]renew lease 7903377136721273686 failed(recv: 11:50:06.845, send: 11:50:07.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b42d9692367111eab198fa163e49a89f/ef94a3d9367111eab198fa163e49a89f error: context deadline exceeded2020-01-20 11:50:37.730 +08:00 WARN backend/lease.go:68 [30.884846441s]renew lease 7903377136721273686(recv: 11:50:06.845, send: 11:50:07.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/b42d9692367111eab198fa163e49a89f/ef94a3d9367111eab198fa163e49a89f2020-01-20 11:50:39.238 +08:00 WARN service/instance.go:318 heartbeat successful, but renew bfa82363367111eab198fa163e49a89f/4273d46d38fb11eab198fa163e49a89f failed. operator: 10.31.32.66 error: connect backend timed out2020-01-20 11:50:39.730 +08:00 ERROR backend/lease.go:52 [30.491528873s]renew lease 7903377136721592745 failed(recv: 11:50:09.239, send: 11:50:09.730), key LeaseAsyncTask_/cse-sr/inst/leases/default/default/bfa82363367111eab198fa163e49a89f/4273d46d38fb11eab198fa163e49a89f error: context deadline exceeded请问什么情况下会出现这种错误呢?
-
通过Edge Service转发其中某一个请求,网关报如下错误,请问,这个时什么问题?注:同微服务下的其他接口,都ok,直接调用后端微服务接口正常返回。
-
2019-12-20 04:12:16.478 [registry-vert.x-worker-thread-3] INFO org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl [ServiceRegistryClientImpl.java : 681] - watching microservice 1ed6c00bfd4b3a59961a091f7714bc607105e97e successfully, the chosen service center address is 192.168.64.182:30100从上面显示注册成功后,下面全是这种连接重置的错误信息,请问这个影响微服务的功能吗?如何解决?2019-12-20 04:12:17.587 [vert.x-eventloop-thread-3] ERROR org.apache.servicecomb.transport.rest.vertx.RestServerVerticle [RestServerVerticle.java : 112] - Unexpected error in server.cause:IOException,message:Connection reset by peer
-
微服务有三个实例,其中一个实例在运行过程中报错:2019-12-17 14:48:24.286 |-ERROR [pool-2-thread-23] org.apache.servicecomb.core.definition.SchemaMeta [77] -| Unhandled exception to service CISSmartSearchMgmtService schema com.huawei.cis.smartsearch.mgmt.controller.DataExportController2019-12-17 14:48:24.286 |-ERROR [pool-2-thread-23] org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions [166] -| Failed to setInstances, appId=cis, microserviceName=CISSmartSearchMgmtService.java.lang.RuntimeException: javassist.NotFoundException: javax.servlet.http.Part at javassist.CtClassType.getClassFile3(CtClassType.java:218) at javassist.CtClassType.getClassFile2(CtClassType.java:178) at javassist.CtClassType.prune(CtClassType.java:1555) at javassist.scopedpool.ScopedClassPool.cacheCtClass(ScopedClassPool.java:227) at javassist.ClassPool.get0(ClassPool.java:514) at javassist.ClassPool.get(ClassPool.java:419) at org.apache.servicecomb.common.javassist.CtType.<init>(CtType.java:55) at org.apache.servicecomb.common.javassist.MethodConfig.setResult(MethodConfig.java:64) at org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator.convertToInterface(SwaggerToClassGenerator.java:222) at org.apache.servicecomb.swagger.converter.SwaggerToClassGenerator.convert(SwaggerToClassGenerator.java:144) at org.apache.servicecomb.core.definition.SchemaMeta.<init>(SchemaMeta.java:70) at org.apache.servicecomb.core.definition.loader.SchemaLoader.registerSchema(SchemaLoader.java:86) at org.apache.servicecomb.core.definition.schema.ConsumerSchemaFactory.createSchema(ConsumerSchemaFactory.java:61) at org.apache.servicecomb.core.definition.schema.ConsumerSchemaFactory.createSchema(ConsumerSchemaFactory.java:33) at org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.getOrCreateSchema(AbstractSchemaFactory.java:58) at org.apache.servicecomb.core.definition.schema.ConsumerSchemaFactory.createConsumerSchema(ConsumerSchemaFactory.java:48) at org.apache.servicecomb.core.definition.MicroserviceVersionMeta.<init>(MicroserviceVersionMeta.java:45) at org.apache.servicecomb.core.definition.MicroserviceVersionMetaFactory.create(MicroserviceVersionMetaFactory.java:38) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions.lambda$setInstances$0(MicroserviceVersions.java:184) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx.computeIfAbsent(ConcurrentHashMapEx.java:56) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions.setInstances(MicroserviceVersions.java:183) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions.safeSetInstances(MicroserviceVersions.java:163) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions.pullInstances(MicroserviceVersions.java:158) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersions.submitPull(MicroserviceVersions.java:130) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceManager.lambda$getOrCreateMicroserviceVersions$0(MicroserviceManager.java:55) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx.computeIfAbsent(ConcurrentHashMapEx.java:56) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceManager.getOrCreateMicroserviceVersions(MicroserviceManager.java:53) at org.apache.servicecomb.serviceregistry.consumer.MicroserviceManager.getOrCreateMicroserviceVersionRule(MicroserviceManager.java:80) at org.apache.servicecomb.serviceregistry.consumer.AppManager.getOrCreateMicroserviceVersionRule(AppManager.java:67) at org.apache.servicecomb.core.provider.consumer.ReferenceConfig.<init>(ReferenceConfig.java:40) at org.apache.servicecomb.core.provider.consumer.ConsumerProviderManager.createReferenceConfig(ConsumerProviderManager.java:56) at org.apache.servicecomb.core.provider.consumer.ConsumerProviderManager.createReferenceConfig(ConsumerProviderManager.java:87) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx.computeIfAbsent(ConcurrentHashMapEx.java:56) at org.apache.servicecomb.core.provider.consumer.ConsumerProviderManager.getReferenceConfig(ConsumerProviderManager.java:91) at org.apache.servicecomb.core.SCBEngine.getReferenceConfigForInvoke(SCBEngine.java:346) at org.apache.servicecomb.provider.springmvc.reference.CseClientHttpRequest.findReferenceConfig(CseClientHttpRequest.java:170) at org.apache.servicecomb.provider.springmvc.reference.CseClientHttpRequest.createRequestMeta(CseClientHttpRequest.java:152) at org.apache.servicecomb.provider.springmvc.reference.CseClientHttpRequest.execute(CseClientHttpRequest.java:138) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670) at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:414) at org.apache.servicecomb.provider.springmvc.reference.RestTemplateWrapper.postForObject(RestTemplateWrapper.java:113) at com.huawei.cis.smartsearch.query.metadata.IndexFieldsInfo.getIndexFieldsMeta(IndexFieldsInfo.java:91) at com.huawei.cis.smartsearch.query.metadata.IndexFieldsInfo.getIndexFields(IndexFieldsInfo.java:117) at com.huawei.cis.smartsearch.query.delegate.impl.DataQueryDelegateImpl.searchDataDetails(DataQueryDelegateImpl.java:286) at com.huawei.cis.smartsearch.query.controller.DataQueryController.searchDataDetails(DataQueryController.java:48) at com.huawei.cis.smartsearch.query.controller.DataQueryController$$FastClassBySpringCGLIB$$aee22c6.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)其他两个实例均无这个错误
-
微服务跑了一段时间后,不停的打印该异常。|ERROR|[transport-vert.x-eventloop-thread-6]||[RestServerVerticle:112]|Unexpected error in server.cause:SSLException,message:Received close_notify during handshake从现网的日志和现象反馈来看,这个异常导致CSE微服务接口的性能严重下降,restful接口调用延迟增加的非常厉害。求助大神们告知这个异常是因为什么导致的?PS: 微服务没有做任何改动。
-
1. apigateway微服务配置如下:2. 配置隔离超时时间为1毫秒。单实例,界面(访问时间10+ms)依然能访问,隔离没有生效。3.熔断不知道如何验证由于采用https方式,服务中心界面不可用。无法查看状态。1)在某个微服务接口添加睡眠时间,再通过界面访问,查看apigateway日志没有看到熔断类异常信息。2)停止某个微服务,apigateway报错,不知道熔断是否生效。[2019/12/06 17:51:17.740][ERROR][Invoke all server failed. Operation CONSUMER xxxxController.queryAssetGroup, e=cause:ClientException,message:Load balancer does not have available server for client: default][org.apache.servicecomb.loadbalance.LoadbalanceHandler][onExecutionFailed,323][vert.x-eventloop-thread-8][2019/12/06 17:51:17.868][INFO][--> xxxxxxxxxxxxxxx --> The onRequest
-
基于CSE开发微服务,集成方式参考:在Spring Boot中使用CSE https://support.huaweicloud.com/devg-servicestage/cse_java_0037.html请问: 集成CSE后必须使用CSE的方式(@RestSchema)开发REST接口吗? @RestController和@RestSchema的区别是什么?集成CSE后使用@RestController是不是会导致无法使用CSE内置的负载均衡、服务治理和调用链跟踪(APM埋点)等功能?(https://bbs.huaweicloud.com/blogs/115961)
-
CSE(包括本地服务中心)默认限制最大100个schema, 如果超过就会报告如下错误: * 本地错误 ``` 10-23 11:26:37.893|WARN |[oop-thread-0][ceRegistryClientImpl]|get response for org.apache.servicecomb.serviceregistry.api.response.CreateServiceResponse failed, 400:Bad Request, {"errorCode":"400001","errorMessage":"Invalid parameter(s)","detail":"field 'MicroService.Schemas' invalid value '[... ...]' does not match rule: {Max: 100, Regexp: ^[a-zA-Z0-9]{1,160}$|^[a-zA-Z0-9][a-zA-Z0-9_\\-.]{0,158}[a-zA-Z0-9]$}"} ``` 本地服务中心解决办法: 首先需要下载最新的LocalCSE或者local-service-center. ``` \local-service-center\conf\app.conf app.conf下面的配置项改为: quota_plugin = unlimit ``` * CSE 错误 ``` 08-23 15:07:40.578|ERROR|[ queue][43]]][ceRegistryClientImpl]|Register schema a92dd6b72370c27f21661d2838fc6972ab99b891/xxx failed, statusCode: 400, statusMessage: Bad Request, description: {"errorCode":"400100","errorMessage":"Not enough quota","detail":"no quota to create SCHEMA, max num is 100, curNum is 100, apply num is 1"} ``` CSE解决办法: 升级到最新版本的CSE。
-
CSE和ServiceComb有非常紧密的联系,开源的帮助材料也适用于CSE的开发。 # 商业渠道 a. CSE是华为云ServiceStage的子功能,主要提供基于Java Chassis、spring cloud、Dubbo等微服务全生命周期管理。通过 [ServiceStage 产品介绍页](https://www.huaweicloud.com/product/servicestage.html) , [CSE 开发指南](https://support.huaweicloud.com/devg-servicestage/ss-devg-0002.html), 可以获取到产品介绍、应用场景、开发指南、优秀实践等多方面内容。 b. 微服务培训课程: 进入[华为云学院](https://edu.huaweicloud.com/courses/),搜索 “微服务”,可以找到相关的微服务课程。 c. 通过提交工单、购买咨询和专业服务等获取工程师的协助。 # 开源渠道 a. [ServiceComb官网](https://servicecomb.apache.org/cn/),[java-chassis开发指南](http://servicecomb.gitee.io/servicecomb-java-chassis-doc/java-chassis/zh_CN/) 包含 ServiceComb 的最新动态、版本信息、 开发指南和技术博文等帮助信息。 通过官网,还可以获取到邮件列表、开发者信息等,和开发者进行在线交流。 b. issues: issues是github为开源项目提供的交流空间,可以进行提问或者提交bug。访问 [ServiceComb项目列表](https://github.com/apache?utf8=%E2%9C%93&q=servicecomb&type=&language=) ,进入项目主页。 c. 搜索和关注微信公众号“微服务蜂巢”\[[掘金链接]](https://juejin.im/user/5ba9dbf3e51d450e4006cb32)\[[知乎链接]](https://www.zhihu.com/people/xiao-mi-feng-11-49/activities),定期会推送相关技术文章、新功能和案例。 # 个人贡献者 a. 使用google, bing, sogo或者baidu进行搜索。搜索的时候,可以采用以下技巧,比如: ``` 使用站内搜索,提升准确性:CSE Spring Boot MVC site:bbs.huaweicloud.com 搜索包含关键日志:比如 CSE Spring Boot MVC 尝试多个搜索引擎:比如谷歌、搜狗、bing、百度等。 ``` b. 个人贡献者 * [liubao68的华为云博客](https://bbs.huaweicloud.com/community/usersnew/id_1505821502554271) * [liubao68的知乎博客](https://zhuanlan.zhihu.com/solve-problem-use-microservices) * [二手雄狮的掘金博客](https://juejin.im/user/5ba344355188255c880abaa0) * [遥·海·时 的博客](https://seatime.online/) # 技术干货: * [打造一个企业级应用的微服务开发框架(上)---从服务注册中心到服务管理中心](https://bbs.huaweicloud.com/blogs/8c98dc59412611e89fc57ca23e93a89f) * [打造一个企业级应用的微服务开发框架(下)---ServiceComb通信处理详解](https://bbs.huaweicloud.com/blogs/0a1a862f412611e89fc57ca23e93a89f) * [ServiceComb的开放性设计](https://bbs.huaweicloud.com/blogs/1fc9427c088611e89fc57ca23e93a89f) * [ServiceComb微服务开发框架介绍](https://bbs.huaweicloud.com/blogs/ad88f16dd98511e8bd5a7ca23e93a891) * [基于CSE的微服务架构实践-基础架构](https://bbs.huaweicloud.com/blogs/8bb2c3b8366c11e9bd5a7ca23e93a891) * [基于CSE的微服务架构实践-轻量级架构技术选型](https://bbs.huaweicloud.com/blogs/1be7166e371511e9bd5a7ca23e93a891) * [基于CSE的微服务架构实践-Spring Boot技术栈选型](https://bbs.huaweicloud.com/blogs/eca98a6f399a11e9bd5a7ca23e93a891) * [基于CSE的微服务架构实践-Spring Cloud技术栈选型](https://bbs.huaweicloud.com/blogs/e8e3deb63f1311e9bd5a7ca23e93a891) * [基于CSE的微服务工程实践-以契约为中心](https://bbs.huaweicloud.com/blogs/c998f257673711e9bd5a7ca23e93a891) * [单体应用微服务改造实践](https://bbs.huaweicloud.com/blogs/101611) * [如何进行微服务的多环境开发部署](https://bbs.huaweicloud.com/forum/thread-11095-1-1.html) * [使用CSE实现滚动升级零中断](https://bbs.huaweicloud.com/blogs/72a312f09c8911e89fc57ca23e93a89f) # 场景: Spring Cloud应用改造为 CSE * [应用系统迁移华为云评估](https://bbs.huaweicloud.com/blogs/100797) : 评估应用系统在不同云上迁移的工作量,需要注意的事项。 * [微服务改造设计参考](https://bbs.huaweicloud.com/blogs/112614) : 评估微服务框架改造的工作量和需要注意的事项。 * [基于Spring Boot 2.0的IoT应用集成和使用CSE实践](https://bbs.huaweicloud.com/blogs/100188) : 将基于Spring Boot 2的 Spring Cloud 应用改造为 CSE的 * [基于Spring Boot 1 和 Spring Boot 2的CSE项目例子](https://github.com/huaweicse/cse-java-chassis-samples/tree/master/porter)
-
微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用。它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署、互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效利用计算资源。微服务之间无需关心对方的模型,它通过事先约定好的接口进行数据流转,使业务可以高效响应市场变化。但微服务一个明显的表象就是随着服务的增多,传统的测试模式受到很大制约,无法有效进行下去,威胁到整体系统质量。所有J2EE代码层白盒采集工具都无法区分覆盖和具体功能的对应关系,只能以后台模式“笼统“的采集一个阶段的总的覆盖,无法满足对于Devops下对于故障定位、深度测试分析以及敏捷发布算法的要求。 星云测试(www.teststars.cc)发布分布式微服务精准测试解决方案,是目前市场上唯一可达到在复杂分布式系统中,跨多个服务器进行代码白盒级分析、实现请求分布式追踪的测试平台。其中产品内的穿透模块,可以支持各种主流微服务通信架构。例如httpclient,springcloud微服务架构、阿里dubbo微服务架构,以及消息队列,将并发访问场景下跨多个服务多组代码逻辑分离并重建追踪出来。实现业务逻辑的代码在开发层面通过微服务离散后,在测试阶段则可以反向复原整个完整代码执行视图。精准测试里面的穿线概念(Threadingtest)增加了第三层含义,即针对的分布式服务的穿透能力。 微服务场景下,一个完整请求会跨多个计算(服务)节点,而对于以节点为剖面的各种测试和监控手段都变得不那么直接和有效。一个请求链路的失效和性能故障等问题,从一个计算节点剖面去分析是很困难的,因为在一个计算节点剖面上的数据是混合型数据,而无法区分这里面的数据来自于那个请求。原始的方法无法将一个调用链路上的所有信息完整的重新刻画出来。业界流行的APM技术可以某种程度实现这种调用链路分析,该项技术主要用于监控,体现的数据是组件级的,而且为了性能考虑还经常抽取样本,无法达到测试要求的代码级的分析。 微服务采用的“分而治之”的策略,而精准测试对于微服务的测试和运营管控上采用的是“概览全局”的策略。精准测试在编译阶段,重新将微服务所有模块视为一个完整项目,统一编译和插装,经过插装后的代码重新部署到原有节点上。在微服务的启动过程中附加上分布式追踪所需要的agent启动,即可完成微服务场景下达到测试用例级的代码全调用路径分析。由于微服务有多个程序模块,星云测试平台支持模块级增量编译模式,即每次编译替换某一个模块就可以生成一个新的版本,而无需将所有微服务模块全新编译。 穿透和分布式追踪的原理,这里要重点将以下星云测试JavaEE应用服务器agent的能力。agent提供了一个虚拟jsp的技术,通过agent启动的被测应用,都附加了一个虚拟jsp,地址类似于http://www.appundertest.com/teststars.jsp。 访问这个页面可以用来指本机的用户,一般这个设置和精准测试示波器的登录用户需要一致。设置完成后,对被测试应用的请求将附加上一个用户标识的cookie信息,这个信息会在微服务的多层架构中一直携带和穿透。例如从浏览器发起的一个带着用户标识信息的请求,到了应用服务的处理线程中,这个线程执行的所有代码将附加上这个用户信息,如果应用在向后调用其他的节点的服务,则这个用户信息会继续向后传递,直到最后的执行节点。由于每个节点的代码均有精准测试系统插装的代码,会自动的向用户请求发起端的示波器回馈数据,那么就可以实现将整个调用链路上的代码逻辑发送给示波器。示波器收到数据后,将动态数据和代码编译阶段的程序静态数据结合起来,即可展示全链路的程序调用路径信息。从另外角度,当微服务系统有多个请求同时并行的时候,那么每个示波器收到的是自己对应的请求代码的全链路执行情况,而其他示波器用户和其他普通用户的数据则不会被收录进来。 上图是一个spring cloud微服务架构下两个节点的调用图。当从第一层入口组件访问后,入口组件向后调用下一层节点的时候,后一层节点的运行线程自动取到了前一层节点的用户信息,并且加入到了第二层节点的运行线程控件。这样,通过精准测试示波器(登录用户标识和请求标识一致)就可以收到两个节点的数据。实现多个用户同时访问分布式应用的时候,不同用户出发的数据自动分离,路由到对应的示波器,最终对应到用例上。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签