概述
华为云微服务引擎CSE提供的Java SDK 100%兼容ServiceComb Java Chassis,并对其进行更加友好的封装,以简化用户业务开发,更加专注于业务逻辑。将ServiceComb Java Chassis部署到CSE,并使用CSE提供的能力,只需要对microservice.yaml进行适当的配置,以及在pom中添加额外的依赖,不涉及任何代码修改。
一键式配置
CSE提供了cse-solution-service-engine,让基于开源版本开发的应用快速切换为云上应用,直接使用公有云提供的服务目录、灰度发布、服务治理等功能。这里的配置,包括组合适当的组件、配置处理链、配置参数的缺省值等。具体包括:
- 引入相关依赖的组件。包括必须的Handlers、Providers、Transports。
- 增加默认配置项。默认配置包含了处理链、缺省的负载均衡和治理选项等。
对于ServiceComb应用,可以通过修改POM引入cse-solution-service-engine。
增加/修改依赖管理,,如下。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-dependency</artifactId>
<version>2.3.23</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入依赖
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-solution-service-engine</artifactId>
</dependency>
兼容性和开发者建议
cse-solution-service-engine的目的是提供快速、全面的使用CSE能力的组合方案。随着CSE提供的功能的调整和丰富,它会不断的去适配CSE的变更,以期让开发者获得最新的功能体验。CSE倡导持续集成、迭代更新的工作方式,以提高创新效率和提升软件质量。但是这种方式需要业务系统存在一定的机制,能够检测变更和快速针对变更进行修改。比如,业务系统在集成CSE的新版本的时候,能够运行自己的自动化测试用例,来检测变更,并根据CSE提供的变更说明来快速适配新功能。
这种持续集成、迭代更新的理念并不适合所有的场景和用户。对于寻求业务系统稳定,不期望变更行为发生的情况,建议业务系统参考cse-solution-service-engine的做法,创建自己的solution,业务系统依赖自己的solution,然后根据业务节奏,自行调整solution的行为。即使cse-solution-service-engine发生变化,业务系统的行为也不受影响。
这两种策略是应对变更的不同策略,都有利有弊。通常的建议是对于频繁变化的业务,采用第一种方式,加快业务创新速度;对于需要长期稳定不变化的业务,采用第二种方式。
cse-solution-service-engine的详细内容
cse-solution-service-engine的主要内容是POM和microservice.yaml。 POM引入了必要的依赖,microservice.yaml指定了一些缺省值配置。下面的配置是2.3.23版本的配置。
- POM
POM引入了相关的组件,这样开发者就不需要分析使用CSE需要引入哪些组件,并逐个自行引入。2.3.23版本默认引入了如下组件:
<dependencies>
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>foundation-auth</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>config-cc</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- transports -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>edge-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>transport-highway</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>transport-rest-vertx</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>transport-rest-servlet</artifactId>
</dependency>
<!-- providers -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>provider-springmvc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>provider-pojo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>provider-jaxrs</artifactId>
</dependency>
<!-- handlers -->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-bizkeeper</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-fault-injection</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-flowcontrol-qps</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-loadbalance</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-publickey-auth</artifactId>
</dependency>
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-handler-cloud-extension</artifactId>
</dependency>
</dependencies>
- microservice.yaml
microservice.yaml配置了缺省的处理链,以及一些缺省值。它的配置优先级cse-config-order值为-1,在没有指定配置优先级的情况下,值为0,因此业务自己的microservice.yaml配置缺省拥有更高的优先级。2.3.23版本默认配置如下:
cse-config-order: -1
service_description:
propertyExtendedClass: com.huawei.paas.middleware.MiddlewarePropertyExt
servicecomb:
handler:
chain:
Provider:
default: auth-provider,qps-flowcontrol-provider,bizkeeper-provider
Consumer:
default: auth-consumer,qps-flowcontrol-consumer,loadbalance,fault-injection-consumer,bizkeeper-consumer
references:
version-rule: 0+
loadbalance:
serverListFilters: darklaunch,zoneaware
serverListFilter:
darklaunch:
className: com.huawei.paas.darklaunch.DarklaunchServerListFilter
zoneaware:
className: org.apache.servicecomb.loadbalance.filter.ZoneAwareServerListFilterExt
addressResolver:
searchDomains: default.svc.cluster.local,svc.cluster.local,cluster.local
ndots: 1
连接服务中心
功能描述
服务中心实现注册和发现,在CSE/ServiceStage查看微服务目录,都需要微服务连接上服务中心。连接服务中心主要的步骤包括引入认证模块、配置认证信息。
配置参考
- 增加依赖关系(pom.xml)
相对于ServiceComb,CSE的服务中心增加了认证,需要在代码中引入认证模块。
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>foundation-auth</artifactId>
</dependency>
- 配置项(microservice.yaml)
配置项包括服务中心的地址和认证信息。
servicecomb:
service:
registry:
address: https://cse.cn-north-1.myhwclouds.com #根据实际地址配置服务中心地址
instance:
watch: false #使用API网关访问,只能使用PULL模式
credentials:
accessKey: your access key
secretKey: your secret key
akskCustomCipher: default #加密选项
project:cn-north-1 #可选,所属project。
服务中心的的地址可以在CSE的工具下载页面查看,比如该页面有如下消息。根据租户所在的区域不同,地址会有差异。
服务中心地址、配置中心地址和仪表盘上报地址为: https://cse.cn-north-1.myhuaweicloud.com:443
认证信息可以从公有云凭证管理获取,加密选项的使用提供了安全存储AK/SK的机制,参考说明
连接配置中心
功能描述
配置中心实现配置下发,连接配置中心是使用治理、灰度发布等功能的前提。CSE对于用户微服务的治理能力,都是构建在动态配置之上的。
配置参考
使用配置中心的步骤和服务中心一样,增加模块依赖和认证信息。这里省略了认证信息配置的内容。
- 增加依赖关系(pom.xml)
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>config-cc</artifactId>
</dependency>
- 启用配置(microservice.yaml)
cse:
config:
client:
serverUri: https://cse.cn-north-1.myhwclouds.com
refreshMode: 1 #使用API网关访问,只能使用PULL模式
使用服务治理
功能描述
服务治理主要涉及“隔离”、“熔断”、“容错”、“限流”、“负载均衡”、“灰度发布”等。CSE的服务治理都是构建在Handlers之上,因此这里的主要工作是引入相关的组件和配置处理链。
配置参考
在cse-solution-service-engine里面,已经给出了相关引入模块的列表和处理链。这里只对处理链做一个简单说明。
servicecomb:
handler:
chain:
Provider:
default: auth-provider,qps-flowcontrol-provider,bizkeeper-provider
Consumer:
default: auth-consumer,qps-flowcontrol-consumer,loadbalance,fault-injection-consumer,bizkeeper-consumer
使用故障注入
故障注入主要提供了延时、错误两种类型故障。它在fault-injection-consumer提供。
使用灰度发布
灰度发布用于引流。用户可以根据比例、条件将服务请求转发到符合要求的实例上去。比如在升级的场景,将部分请求引流到新版本,部分请求引流到老版本。灰度发布在loadbalance提供,同时需要扩展几个filter,引入下面的依赖和增加配置项。
- 增加依赖关系(pom.xml)
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-handler-cloud-extension</artifactId>
</dependency>
- 在Consumer端配置负载均衡(microservice.yaml)
在负载均衡模块启用了灰度发布的filter。
cse:
loadbalance:
serverListFilters: darklaunch
serverListFilter:
darklaunch:
className: com.huawei.paas.darklaunch.DarklaunchServerListFilter
使用调用链
华为云提供了业务无侵入的埋点功能APM。只需要通过华为云部署容器应用,并选择启用调用链监控功能,即可使用调用链服务。
微服务运行数据上报
功能描述
微服务可以将自己的运行数据上报给Dashboard服务,在公有云上查看仪表盘数据、分布式事务数据等。该章节是描述如何启用微服务数据上报功能。
配置参考
- 增加依赖关系(pom.xml)
引入必要的jar包。
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-handler-cloud-extension</artifactId>
</dependency>
- 配置handler
仪表盘数据依赖于bizkeeper-provider和bizkeeper-consumer。
servicecomb:
handler:
chain:
Provider:
default: auth-provider,qps-flowcontrol-provider,bizkeeper-provider
Consumer:
default: auth-consumer,qps-flowcontrol-consumer,loadbalance,fault-injection-consumer,bizkeeper-consumer
其他参考