-
参数校验错误一个是在反序列化的时候失败,一个是参数校验的时候失败;异常类型分API定义的异常、控制异常和未知异常。 1、 序列化/反序列化的异常处理-- Jackson Mapper反序列化异常400, throw new InvocationExectpion(400, message)2、 数据类型不匹配时的异常处理-- Jackson Mapper反序列化异常400, throw new InvocationExectpion(400, message)3、 异常情况下参数默认值的处理-- 异常情况下是没有参数默认值的。 对于没有传递参数的情况,是有参数值的,参数值规则参考讨论:https://lists.apache.org/thread.html/34567b14215779d8dc4a1d358b48680dc5c0d8feda2bb096ffe026bf@%3Cdev.servicecomb.apache.org%3E 规格在单独截取出来了。 4、 可选参数/必选参数的异常处理区别-- JAX-RS模式下,参数缺省全部是可选,没有必选定义。可以通过JSR Validation API的标签定义校验,比如@NotNull等标签,返回400错误码。5、 各种数据类型的边界值异常处理(字符长度/整数范围/数组类型长度)-- 这个其实只有两类:JSR Validation API返回的异常400 和 Jackson Mapper反序列化异常4006、 URL匹配原则及异常处理-- 具体算法比较复杂,主要涉及的错误码包括400,405等。遵循JAX RS规范: http://download.oracle.com/javaee-archive/jax-rs-spec.java.net/jsr339-experts/att-3593/spec.pdf (3.7 Matching Requests to Resource Methods)7、 消息头解析/编码/传递逻辑-- https://docs.servicecomb.io/java-chassis/zh_CN/general-development/context.html-- https://bbs.huaweicloud.com/blogs/67ef53c6ab7011e89fc57ca23e93a89f8、 各异常场景下的错误码映射、异常信息返回定义-- 参考异常分类和处理机制:https://docs.servicecomb.io/java-chassis/zh_CN/general-development/error-handling.html 现在大家觉得比较难理解的一些缺省参数问题,是由于对A -> B -> C这种方式,如果某个微服务序列化、反序列化参数设置不一致,存在的一些细节差异,现在CSE很难调整edge、微服务等实现方式,适配这种缺省值差异要求。这里有实践建议:https://bbs.huaweicloud.com/blogs/67ef53c6ab7011e89fc57ca23e93a89f 。 基本要求是建议将可能的缺省情况(没传、空、NULL等情况当成一致的语义)。 缺省值处理规则:My suggestions are as follows1. Encourage providers to specify required & defalutValue explicitly. a. when required=true and defaultValue is given, if consumers do not give a value, use default value;b. when required=true and defaultValue is not given, if consumers do not give a value, throw a BadParam exception.c. when required=false and defaultValue is given, if consumers do not give a value, use default value; d. when required=false and defaultValue is not given, give default values to parameter according to java conventions. e.g. integer is 0 and object is null.e. when generating swagger, generate defalutValue only when explicitly specified. 2. As I know from PR[2], JAX-RS do not have annotations to specify required, required is always false. This is different from Spring MVC, which required defaults to true.a. JAX-RS defaults: required=false and defalutValue not specifiedb. Spring MVC default: required=true adefalutValue not specifiednd
-
在使用服务中心做服务发现的情况下,都会存在这样的问题,一个实例异常终止,服务中心无法感知服务已经下线,直到心跳超时。服务中心更新实例信息后,调用端也无法及时感知实例变更,需要结合服务中心的push机制,或者主动的pull机制。这样也需要一定的时间。那么如何保证这种情况下,调用不失败了?这就涉及到微服务管控的核心能力:隔离和重试。 详细加固建议开发者可以参考:https://bbs.huaweicloud.com/blogs/72a312f09c8911e89fc57ca23e93a89f
-
ServiceStage和CSE有何不同?
-
1、升级背景CSE新版本(2.3.17)对微服务的故障隔离策略等进行了修改,为了验证微服务可靠性和服务治理相关的参数,将异步原型验证的微服务版本(java-chassis SDK)从2.3.8升级到了2.3.35之后,业务调用失败,日志里面频繁打印:Load balancer does not have available server for client: default,但是通过服务中心查询,以及日志中查看find instance关键字,都有一个实例。 业务采用Tomcat + SpringMVC + CSE SDK的方式开发,消息接入使用SpringMVC原生的DispatcherServlet, 然后通过CSE SDK调用后端的微服务。2、故障定位对报错日志分析,发现跟Transport相关,日志如下: not deployed transport rest, ignore rest: rest://localhost:9090 这种情况通常意味着系统REST transport没加载。但是检查了相关依赖,REST模块和tomcat的Servlet都是正确依赖的。 对部署的业务war包进行分析,发现包含多个不同版本的transport,而且版本跨度较大: 定位发现原来在版本升级时只改了CSE的版本号,打包时没有clean,导致老版本的CSE类库也被打进了安装包:增加clean参数重新打包,业务启动成功。3、总结1. 业务升级的时候,尽可能使用mvn clean install来构建新本版本。 多个jar包并存的情况,会产生很多莫名其妙的问题,可能浪费大量的定位时间。2. Tomcat集成新版本做了大量优化,并且增加了不同场景下的集成方式。CSE在Tomcat场景下的各种集成原理参考:https://docs.servicecomb.io/java-chassis/zh_CN/build-provider/protocol/rest-over-servlet.html
-
------------------2018-08-23 09:03:16,990 [ERROR] invoke failed, invocation=PRODUCER rest collector.collector.helloworld org.apache.servicecomb.swagger.invocation.exception.DefaultExceptionToResponseConverter.convert(DefaultExceptionToResponseConverter.java:35)java.lang.NullPointerExceptionat com.huawei.cse.porter.controller.CollectorImpl.helloworld(CollectorImpl.java:49)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.doInvoke(SwaggerProducerOperation.java:148)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.syncInvoke(SwaggerProducerOperation.java:139)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.invoke(SwaggerProducerOperation.java:109)at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.handle(ProducerOperationHandler.java:40)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.bizkeeper.BizkeeperCommand.lambda$construct$2(BizkeeperCommand.java:79)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.Observable.subscribe(Observable.java:8759)at rx.Observable.subscribe(Observable.java:8726)at rx.Observable.subscribe(Observable.java:8619)at org.apache.servicecomb.bizkeeper.BizkeeperHandler.handle(BizkeeperHandler.java:77)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at com.huawei.paas.cse.tcc.handler.ProviderTccTransactionHandler.handle(ProviderTccTransactionHandler.java:59)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.qps.ProviderQpsFlowControlHandler.handle(ProviderQpsFlowControlHandler.java:50)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at com.huawei.paas.cse.handler.stats.PerfStatsHandler.handle(PerfStatsHandler.java:60)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.core.handler.ShutdownHookHandler.handle(ShutdownHookHandler.java:68)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.common.rest.AbstractRestInvocation.doInvoke(AbstractRestInvocation.java:189)at org.apache.servicecomb.common.rest.AbstractRestInvocation.invoke(AbstractRestInvocation.java:165)at org.apache.servicecomb.common.rest.AbstractRestInvocation.runOnExecutor(AbstractRestInvocation.java:150)at org.apache.servicecomb.common.rest.AbstractRestInvocation.lambda$scheduleInvocation$0(AbstractRestInvocation.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)2018-08-23 09:03:16,995 [WARN] bizkeeper command failed due to:InvocationException: code=590;msg=CommonExceptionData [message=Cse Internal Server Error] org.apache.servicecomb.bizkeeper.BizkeeperCommand.lambda$null$1(BizkeeperCommand.java:82)2018-08-23 09:03:16,996 [WARN] bizkeeper execution error org.apache.servicecomb.bizkeeper.BizkeeperHandler$1.onExecutionError(BizkeeperHandler.java:54)InvocationException: code=590;msg=CommonExceptionData [message=Cse Internal Server Error]at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.d**ate(ExceptionFactory.java:79)at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.convertException(ExceptionFactory.java:124)at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.convertProducerException(ExceptionFactory.java:97)at org.apache.servicecomb.swagger.invocation.Response.createProducerFail(Response.java:134)at org.apache.servicecomb.swagger.invocation.Response.producerFailResp(Response.java:145)at org.apache.servicecomb.swagger.invocation.exception.DefaultExceptionToResponseConverter.convert(DefaultExceptionToResponseConverter.java:36)at org.apache.servicecomb.swagger.invocation.exception.ExceptionToResponseConverters.convertExceptionToResponse(ExceptionToResponseConverters.java:47)at org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory.convertExceptionToResponse(ExceptionFactory.java:128)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.proces**ception(SwaggerProducerOperation.java:161)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.doInvoke(SwaggerProducerOperation.java:151)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.syncInvoke(SwaggerProducerOperation.java:139)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.invoke(SwaggerProducerOperation.java:109)at org.apache.servicecomb.core.handler.impl.ProducerOperationHandler.handle(ProducerOperationHandler.java:40)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.bizkeeper.BizkeeperCommand.lambda$construct$2(BizkeeperCommand.java:79)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:8666)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:52)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:36)at rx.Observable.subscribe(Observable.java:8759)at rx.Observable.subscribe(Observable.java:8726)at rx.Observable.subscribe(Observable.java:8619)at org.apache.servicecomb.bizkeeper.BizkeeperHandler.handle(BizkeeperHandler.java:77)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at com.huawei.paas.cse.tcc.handler.ProviderTccTransactionHandler.handle(ProviderTccTransactionHandler.java:59)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.qps.ProviderQpsFlowControlHandler.handle(ProviderQpsFlowControlHandler.java:50)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at com.huawei.paas.cse.handler.stats.PerfStatsHandler.handle(PerfStatsHandler.java:60)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.core.handler.ShutdownHookHandler.handle(ShutdownHookHandler.java:68)at org.apache.servicecomb.core.Invocation.next(Invocation.java:148)at org.apache.servicecomb.common.rest.AbstractRestInvocation.doInvoke(AbstractRestInvocation.java:189)at org.apache.servicecomb.common.rest.AbstractRestInvocation.invoke(AbstractRestInvocation.java:165)at org.apache.servicecomb.common.rest.AbstractRestInvocation.runOnExecutor(AbstractRestInvocation.java:150)at org.apache.servicecomb.common.rest.AbstractRestInvocation.lambda$scheduleInvocation$0(AbstractRestInvocation.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Caused by: java.lang.NullPointerExceptionat com.huawei.cse.porter.controller.CollectorImpl.helloworld(CollectorImpl.java:49)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.doInvoke(SwaggerProducerOperation.java:148)... 60 more
-
cse.isolation.maxConcurrentRequests是服务消费者/提供者都会起作用,还是仅服务消费者起作用 ------------------------------------maxConcurrentRequests最大并发数我理解等同Hystrix的隔离仓信号量类似的功能,原来一般对Hystrix隔离仓的理解,认为其主要作用在服务消费者侧,但我们PaaS服务治理这块,很多参数配置时实际是可同时作用到消费者/提供者的,所以我想问下上述cse.isolation.maxConcurrentRequests是消费者/提供者都会起作用,还是仅消费者侧起作用
-
华为云微服务引擎(CSE)首页请到:https://www.huaweicloud.com/product/cse.html华为云微服务引擎(CSE)快速入门:https://support.huaweicloud.com/qs-cse/cse_qs_0001.html了解更多产品信息:https://support.huaweicloud.com/productdesc-cse/cse_productdesc_0001.html
-
微服务引擎(Cloud Service Engine) 提供高性能微服务框架和一站式服务注册、服务治理、动态配置和分布式事务管理控制台,帮助用户实现微服务应用的快速开发和高可用运维;提供Spring Cloud、Service Mesh和ServiceComb商业版。CSE资料汇总类别链接视频CSE灰度发布微服务治理之限流微服务治理之容错微服务治理之熔断微服务治理之降级CSE开发第一个微服务微服务治理之负载均衡入门介绍深入揭秘华为企业级微服务架构的实践之道使用商业版微服务CSE vs 使用开原版微服务Spring Cloud最佳实践快速体验微服务能力基于CSE开发新的微服务基于Mesh接入已有应用容器部署weathermapSpring Cloud应用如何接入CSE5分钟搞定Dubbo应用接入华为云CSE文档中心产品介绍快速入门常见问题用户指南开发指南事务方案华为云微服务引擎CSE事务方案一:TCC机制的数据最终一致性处理华为云微服务引擎CSE事务方案二:2PC机制的数据强一致性处理相关推荐ServiceComb数据一致性解决方案Saga演进介绍让.NET应用秒变微服务打造一个企业级应用的微服务开发框架(上)---从服务注册中心到服务管理中心打造一个企业级应用的微服务开发框架(下)---ServiceComb通信处理详解商用级Service Mesh服务的设计之道使用ServiceComb Go-chassis构建微服务相关活动华为云微服务引擎CSE大量新特性上线,诚邀您免费体验
-
华为云微服务引擎(CSE)首页请到:https://www.huaweicloud.com/product/cse.html华为云微服务引擎(CSE)快速入门:https://support.huaweicloud.com/qs-cse/cse_qs_0001.html了解更多产品信息:https://support.huaweicloud.com/productdesc-cse/cse_productdesc_0001.html
-
作者:任颖新消费者云使用CSE时的常见问题及解答关键术语解释:SC:注册中心Consumer:调用方Provider:被调用方心跳:微服务实例定期向注册中心发送心跳,向SC确认自己是健康的pull:pull模式,Consumer定期从注册中心拉取Provider的实例列表watch:watch模式,Consumer不会定期拉取,仅在Provider的实例列表发生变更时,由SC通知Consumer去拉取Provider实例列表心跳机制:微服务实例注册到注册中心之后,实例定期向注册中心,SC根据心跳确认实例的健康情况,如果实例不可用,则从SC的etcd中移除对应的微服务实例。Q:多久发送一次心跳?A:通过配置项cse.service.registry.instance.healthCheck.interval配置,默认为30s。(目前我们没有开放配置)Q:SC多久会把实例从注册中心移除?A:配置也是上面截图中的配置项cse.service.registry.instance.healthCheck.interval和cse.service.registry.instance.healthCheck.times(默认为3)共同决定。微服务实例注册的这两个信息也保存在注册中心,(默认情况下)注册中心判断的时候:如果连续3个周期没有收到心跳,也就是一分半钟之后,注册中心会从etcd中把该实例删除。 Consumer和Provider实例的注册、注销流程上面只是单个实例和SC之间的机制,下面详细介绍现网实际运行过程中Consumer、Provider的注册注销机制。Q:CSE的Consumer端的Provider实例发现,当前有Pull模式和watch模式两种,通过什么方式开启?他们有什么区别吗?A:通过配置项cse.service.registry.instance.watch来设置,默认是true表示watch模式,配置成false则表示是pull模式。pull模式:Consumer定期从注册中心拉取Provider的最新的实例列表,默认30s,由配置项cse.service.registry.instance.pull.interval控制。watch模式: Consumer不会定期拉取,仅在Provider的实例列表发生变更时,由SC通知Consumer去拉取Provider实例列表。这种模式下SC和Consumer之间会建立一个双向的WebSocket链接,SC实例变更时自动通知Consumer,两种模式有优劣吗?实际是没有的,和开发确认过只要现网稳定使用即可。优点缺点watch模式SC的Provider实例列表变更后立刻通知Consumer,触发拉取。Consumer和SC之间需要一条额外的WebSocket链接pull模式Consumer和SC之间不需要额外的链接SC的Provider实例列表变更后到Consumer感知需要一定的延时Q: Provider实例启动/停止时,Consumer端的Provider实例列表是何时发生变化的?A:(1) 实例启动时,Provider会发起到SC的实例注册,SC在etcd中保存Provider的实例列表。(2)那Consumer什么时候能发现SC中的这个新实例呢?两种模式是不一样的(pull模式)最多30s(配置项控制)后,Consumer会主动去SC拉取最新的Provider实例列表。(watch模式)SC中Provider实例列表更新后,立即通知Consumer发起拉取流程。(因此发现比上面快)(3)Provider停止后,需要多久能从SC的ETCD删除? 实际是需要3*30s=1分半钟,具体参见上面的心跳章节。(4)那Consumer什么时候能发现SC中的这个实例不可用了呢?(pull模式)最多30s(配置项控制)后,Consumer会主动去SC拉取最新的Provider实例列表。(watch模式)SC中Provider实例列表更新后,立即通知Consumer发起拉取流程。Q: Provider实例停止后,Consumer端会有1分半到两分钟的时间还会调用到老的Provider实例,现网功能是否受影响?A:我们有实例级的故障隔离,连续100个请求失败,就会触发实例隔离,因此影响很小。(现网实际验证)
-
华为云对微服务引擎(CSE)的推广越来越重视了,最近活动力度很大,线上线下开展了很多免费体验的活动,这对微服务使用者来说是个非常好的体验机会,大家可以多上华为云官网上看看。本人就在华为云官网,免费体验了一把CSE,下面就体验顺序来说说我对这个CSE体验馆的一些使用心得。 1.进入体验馆。 体验馆的入口位置非常显眼,体验者可以非常快速的进入这个界面。 19520 2.进入后不能马上体验,用户还需要实名认证一下才可以使用,已经认证过的直接就可以体验了。 19521 实名认证分个人用户和企业用户,作者点了下个人认证,有两种认证方式,银行卡认证和个人身份证认证。这里不得不吐槽一下,华为云对这个云服务的管理也太严格了,还需要实名认证才可以开通相关云服务,可能是考虑到这个云服务的保密性和资源问题,想把资源留给更多真正想要使用云服务的用户。 19525 认证完成后,就可以开始体验了。 3.体验环境准备。 环境准备非常的简单,只要点击体验本地一键部署,几分钟就可以部署完成。不得不说本地一键部署是这个体验馆的一大亮点,也可以说是CSE部署的一大亮点,又快速又简洁,操作指导很明确,部署过程中用的到的工具都有超链接,直接点击就可跳转,不用到处下载,部署步骤1,2,3,4也列的非常清晰。 195264.初级体验。 初级体验里包括功能指引和服务降级。 功能指引就是整个微服务引擎的界面和功能预览,跟着指引点击下一步即可,通过这个指引可以对CSE起到一个非常直观的了解。 19527 降级服务体验。 CSE里的服务降级设置也非常方便,按照功能指引提示:选中微服务、设置降级对象、降级策略,点击确定,降级设置就可生效。 19528 设置成功后,系统会提示降级设置成功。 需要赞一下,这个提示的内容非常全面,告知了用户可以查看降级效果的地址、解释了降级规则、还配上了降级设置的效果图。这个提示可以说是非常友好的照顾了微服务使用者,让用户在可以对微服务的使用规则有更深一步的了解。 19529 大家可以看看设置服务降级前后对比效果图: Forcast降级开启前: 19530 Forcast降级开启后: 195315.高级体验。 高级体验下面有个灰度发布的体验,如果体验者对灰度发布还不是很了解,可以在点击体验后,找到帮助文档进行详细的了解。 在线帮助文档的链接位置非常清晰。 19532 接下来根据手册指引设置发布规则和相关参数即可。 19533 同样的,设置成功后有一个非常详细的提示,对操作过程中设置的参数也做了相关的说明,小白用户都可以理解。 19534 19535 大家看看灰度发布后效果图: 19536 这里发现了一个小问题:灰度发布的步骤比较多,体验者如果当前步骤设置错误,想返回上一步,不能返回,只能返回到体验馆,重新设置一遍,这里设计的有点不太人性化。 体验后的建议试用之后,对CSE体验馆还是基本满意的。非要说小建议的话,大概就是以下几点: [*]体验馆这个形式的推出还是比较新颖的,用户体验直观,是不是考虑下普通用户也可以直接体验,不需要认证啥的。 [*]体验馆的初级体验内容还是比较少的,可以考虑再增加一些服务内容。 [*]灰度发布的功能指引需要再完善一下。 [*]高级体验里还可以考虑增加一些CSE更有特色的功能,比如:全局配置、动态配置、容器部署等。 华为云CSE体验馆入口:https://www.huaweicloud.com/product/cse.html
-
微服务开发真的有那么难吗?微服务架构很复杂吗?华为云微服务团队重磅推出微服务体验馆,开发者们,让我们一起踏上微服务之旅。step1:首先,点击传送门进入微服务引擎控制台,登录您的华为云账号:https://console.huaweicloud.com/cse/?region=cn-north-1#/cse/home进入控制台页面后点击左侧微服务体验馆:18720step2:接下来进行“环境准备”18728按照页面要求在本地将weather应用启动起来,weather微服务将从本地注册到微服务引擎的注册中心,确保您的网络是通畅的哦!天气预报的数据是哪来的呢?weather应用连接了第三方公开数据服务去获取的天气预报数据,所以您所看到的天气预报数据是实时以及真实的!1. 下载weather.zip,解压到本地目录。——weather.zip文件大小为206MB,请您耐心等候一会儿~~2. 打开credentials配置租户ak/sk;project默认为cn-north-1,如需修改则在credentials增加一行project=xxx参数,xxx为projectName。18729——假如你从没听说过ak/sk,如何找到自己的ak/sk?非常简单,在右上角您的账户名上右击,点击“我的凭证”看到如下画面:“新增访问密钥”就能get到你的AK/SK文件18730点击左侧项目列表,您如果也是在北京一,那就无需再修改project参数18731如果不是这个区域,那么就添加一行project=xxx参数,xxx参考下表:所属区域项目亚太(香港)ap-southeast-1华东-上海二cn-east-2华北-北京一cn-north-1东北-大连cn-northeast-1华南-广州cn-south-13. 执行startup.bat脚本。18733按个任意键后,您会看到微服务们开始启动:187344. 浏览器访问http://localhost:3000,查看天气预报应用效果。微服务天气界面能够正常演示的话,到这您的微服务就已部署完毕,并且成功地注册到微服务引擎的服务管理中心了。step3:接下来可以进行微服务的初级体验您可以按照页面指导查看在微服务引擎上能够做哪些治理操作您可以通过微服务目录查看目前注册的微服务,通过微服务仪表盘观测应用运行状况,结合这些数据您可以对业务作出判断,对微服务进行治理操作。手机端用户可以扫一扫,注册华为云账号后即可免费体验微服务引擎部分功能。18714
-
微服务挺火的,感觉大伙都在微服务,正好看到华为云的CSE新出了一个体验馆,免费体验了一下,有如下感受,欢迎拍砖: [*]整个体验馆的界面设计还是挺清晰的,微服务常用的服务降级和灰度发布都可以体验到。 [*]各个功能中的操作指导也很明确,只需要跟着界面引导一步步做就可以,小白用户也可以看得懂。 [*]一键部署,很快捷,只需要几分钟就可以把环境部署完,需要用到的工具和配置的环境,也介绍的具体,都加上了链接,体验的时候很顺畅,不用到处下载。 [*]就是这个功能指引的位置放到这个初级体验里面感觉很尴尬,为啥不放到最前面,让用户先看到? [*]服务降级和灰度发布设置起来也很快,只要规则明确,发布起来特别快,有不明白的地方,功能指引上也加上了帮助文档的链接,有想具体了解的同学可以到手册里面去深入的了解。 [*]体验的功能还可以再加一下,就是不知道啥时候免费体验结束,要是可以一直免费体验就好啦!
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签