华为云用户手册

  • 接收上行短信 1 2 3 4 5 6 7 8 9101112131415161718192021222324 package mainimport ( "fmt" "net/url" "strings")func main() { upData := "from=%2B86151****6789&to=1069***2019&body=***********&smsMsgId=9692b5be-c427-4525-8e73-cf4a6ac5b3f7"; onSmsUpData(upData);}func onSmsUpData(data string) { ss, _ := url.QueryUnescape(data) params := strings.Split(ss, "&") keyValues := make(map[string]string) for i := range params { temp := strings.Split(params[i],"=") keyValues[temp[0]] = temp[1]; } body := keyValues["body"]; fmt.Println("Sms up data. Body: " + body)}
  • 合理的规划系统架构 Java Chassis提供了丰富的组件,帮助搭建具备足够韧性的云原生系统。Edge Service具备通用网关的大部分能力,并且集成了Java Chassis的服务治理能力,可以实现Java Chassis多协议转发。一个典型的Java Chassis云原生架构如下: 该架构采用静态页面和服务分离,这样静态页面可以灵活的使用CDN、Nginx等形态部署。Edge Service屏蔽了内部微服务的结构,一般会搭配流量控制、安全认证等服务治理策略,使得内部服务能够灵活的进行拆分合并,降低内部服务直接面对流量攻击的风险。 父主题: 托管Java Chassis应用
  • Mongo client升级变更 问题描述 MongoDbFactory的接口存在变更,需要调整为新版本的用法。 解决方案 @Beanpublic MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory) { DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context); mappingConverter.setCustomConversions(beanFactory.getBean(MongoCustomConversions.class)); // other customization return mappingConverter;}@Beanpublic MongoClientOptions mongoOptions() { return MongoClientOptions.builder().maxConnectionIdleTime(60000).socketTimeout(60000).build(); }
  • 验证 部署成功后,登录微服务引擎控制台,在左侧导航栏选择“ServiceComb引擎专享版”,单击前提条件创建的ServiceComb引擎,选择“微服务目录”,单击微服务名称,在“实例列表”页签查看服务实例是否已经成功注册。 您也可以验证Consumer调用Provider能够正常调用。 设置环境变量serverAddr和serverPort为ServiceComb引擎服务注册发现地址的ip和port。 运行consumer。说明成功从ServiceComb引擎的服务中心获取了provider的ip和port,并调用了provider。
  • 代码接入 Provider端: import ("context""log""net""github.com/cloudwego/kitex-examples/hello/kitex_gen/api""github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello""github.com/cloudwego/kitex/pkg/rpcinfo""github.com/cloudwego/kitex/server""github.com/kitex-contrib/registry-servicecomb/registry")type HelloImpl struct{}func (h *HelloImpl) Echo(_ context.Context, req *api.Request) (resp *api.Response, err error) {resp = &api.Response{Message: req.Message,}return}func main() {// **初始化ServiceComb注册中心,默认从环境变量读取配置**r, err := registry.NewDefaultSCRegistry()if err != nil {panic(err)}svr := hello.NewServer(new(HelloImpl),server.WithRegistry(r),server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "Hello"}),server.WithServiceAddr(&net.TCPAddr{IP: net.IPv4(0, 0, 0, 0), Port: 8080}),)if err := svr.Run(); err != nil {log.Println("server stopped with error:", err)} else {log.Println("server stopped")}} Consumer端: import ("context""log""time""github.com/cloudwego/kitex-examples/hello/kitex_gen/api""github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello""github.com/cloudwego/kitex/client""github.com/kitex-contrib/registry-servicecomb/resolver")func main() {// **初始化ServiceComb注册中心,默认从环境变量读取配置**r, err := resolver.NewDefaultSCResolver()if err != nil {panic(err)}newClient := hello.MustNewClient("Hello",client.WithResolver(r),client.WithRPCTimeout(time.Second*3),)for {resp, err := newClient.Echo(context.Background(), &api.Request{Message: "Hello"})if err != nil {log.Fatal(err)}log.Println(resp)time.Sleep(time.Second)}}
  • 优雅上线实现机制 预热是优雅上线的核心机制,Sermant Agent还提供了延迟注册机制,减少流量丢失,从而实现优雅上线。 延迟注册 在服务启动成功之后不立刻注册,而是延迟一段时间再去注册,目的是虽然服务启动成功了,但可能还有一些框架或者业务的代码没有初始化完成,可能会导致调用报错,可以通过设置延迟注册,让服务充分初始化后再注册到注册中心对外提供服务。 预热 该方式主要用于解决当流量突然增加时,可能瞬间把实例压垮的问题。通过预热,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,目的是采用少流量对服务实例进行初始化,防止服务崩溃。预热是基于客户端实现的,当流量进入时,Sermant Agent会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,会给该实例分配较少的流量,随后流量将以曲线方式逐渐增加至与其他实例近乎持平。
  • 版本支持 Spring Cloud Version Spring Boot Version Zookeeper Discovery Version Nacos Discovery Version Consul Discovery Version Eureka Client Version Edgware.SR2+ 1.5.x 1.x.x、2.0.x 1.5.x 1.x.x、2.0.x、2.1.x 1.4.x、2.0.x、2.1.x Finchley.x 2.0.x 2.x.x 1.5.x、2.0.x、2.1.x 1.3.x、2.0.x、2.1.x 1.4.x、2.0.x、2.1.x Greenwich.x 2.1.x 2.x.x 1.5.x、2.0.x、2.1.x 1.3.x、2.0.x、2.1.x 1.4.x、2.0.x、2.1.x Hoxton.x 2.2.x、2.3.x 2.x.x、3.0.0 - 3.1.0 2.x.x、2020.0.RC1、2021.1 1.3.x、2.0.x、2.1.x、2.2.x 1.4.4.RELEASE - 1.4.7.RELEASE、2.x.x、3.0.0 - 3.1.0 2020.0.x 2.4.x、2.5.x 3.0.0 - 3.1.0 2.x.x、2020.0.RC1、2021.1 3.0.0 - 3.1.0 2.1.x、2.2.x、3.0.0 - 3.1.0 2021.0.0 2.6.x 3.0.0 - 3.1.0 2.x.x、2020.0.RC1、2021.1 3.0.0 - 3.1.0 3.0.0 - 3.1.0
  • 优雅下线实现机制 延迟下线是优雅下线的核心机制,且Sermant Agent还提供了流量统计机制,即服务处理完所有统计的请求后再下线,减少流量丢失,从而实现了优雅下线。 图1 优雅下线结构图 延迟下线 当服务提供者实例下线时,无法避免仍有业务请求还未处理完成,从而可能会出现请求丢失的现象。延迟下线即对下线的实例提供保护,优雅下线插件基于下线实时通知+刷新缓存的机制快速更新上游的实例缓存,服务消费者能尽早感知服务提供者实例下线的行为,同时基于流量统计的方式,确保即将下线的实例尽可能的将流量处理完成,最大程度避免流量丢失。 流量统计 当服务即将下线时,为确保当前请求已全部处理完成,Sermant Agent会尝试等待30s(可配置),定时统计和判断当前实例请求是否均处理完成,处理完成后最终下线。
  • 升级零中断 要实现升级零中断,通常需要解决如下问题: 停止服务的时候,可能引起业务中断。在停止服务的过程中,可能服务正在处理请求,新的请求可能持续地发送到该服务。 在微服务架构下,一般都会通过注册中心进行服务发现,客户端会缓存实例地址。停止服务的时候,使用者可能无法及时感知实例下线,并继续使用错误的实例进行访问,导致失败。 实现升级零中断,需要进行滚动升级,在新版本功能就绪后,才能够停止老版本。 实现升级零中断需要很多的措施进行配合,比如滚动升级,实现零中断,建议保证最少有2个可用的实例。在本章节里面,主要描述从微服务的角度进行设置,更好的配合升级零中断。Java Chassis实现零中断的核心机制包括如下几个: 优雅停机。服务停止的时候,需要等待请求完成,并拒绝新请求。 Java Chassis优雅停机默认提供,在进程退出前,会进行一定的清理动作,包括等待正在处理的请求完成、拒绝未进入处理队列的新请求、调用注册中心接口进行注销等动作。Java Chassis进程退出前,先将实例状态修改为DOWN,然后等待一段时间再进行后续的退出过程: servicecomb: boot: turnDown: # 实例状态修改为DOWN以后等待时间,默认值为0,即不等待。 waitInSeconds: 30 重试:客户端对于网络连接错误,以及被拒绝等请求,需要选择新服务器进行重试。 开启重试策略: servicecomb: loadbalance: retryEnabled: true # 是否开启重试策略 retryOnNext: 1 # 重新寻找一个实例重试的次数(不同于失败实例,依赖于负载均衡策略) retryOnSame: 0 # 在失败的实例上重试的次数 隔离:对于失败超过一定次数的服务实例,进行隔离。 开启实例隔离策略: servicecomb: loadbalance: isolation: enabled: true enableRequestThreshold: 5 # 统计周期内实例至少处理的请求数,包括成功和失败。 singleTestTime: 60000 # 实例隔离后,经过这个时间,会尝试访问。如果访问成功,则取消隔离,否则继续隔离。 continuousFailureThreshold: 2 # 实例隔离的条件,连续两次失败。 父主题: 合理规划服务治理
  • 操作步骤 安装Sermant Agent,请参考安装Sermant Agent。 启动应用并开启优雅上下线能力。 在应用的启动参数添加如下参数,添加启动参数后,待应用启动完成。 -javaagent:${HOME}/java-agent/java-agent.jar=appName=default-Ddynamic_config_serverAddress={ CS E_CONFIG_CENTER_ENDPOINTS}-Dregister.service.address={CSE_REGISTRY_ENDPOINTS} 相关配置介绍: appName为agent服务名称,该配置无需修改,使用default即可。 ServiceComb引擎服务注册发现地址(CSE_REGISTRY_ENDPOINTS)与CSE配置中心地址(CSE_CONFIG_CENTER_ENDPOINTS)需替换为实际地址,可参考如下方式获取: ServiceComb引擎服务注册发现地址:获取ServiceComb引擎服务注册发现地址。 CSE配置中心地址:获取ServiceComb引擎配置中心地址。 特别说明: 优雅下线是基于http协议进行通知,默认通知端口为16688,若您在虚机部署出现端口冲突问题(通常是单个ECS部署多个实例),请在启动时添加如下参数规避: # 请更换下面的端口号-Dgrace_rule_httpServerPort=16688
  • 开发环境规划管理 规划开发环境的目的是要保证开发人员更好的并行工作,减少依赖,减少搭建环境的工作量,降低生产环境上线的风险。 管理开发环境的目的是为了更好的进行开发测试,部署上线。 图1 开发环境 结合项目经验,一般会按照图1规划开发环境: 搭建内网本地开发环境。本地开发环境的好处是各个业务/开发者可以搭建符合自己需要的最小功能集合环境,方便查看日志、调试代码等。本地开发环境能够极大的提升代码开发效率,减少部署和调试的时间。本地开发环境的不足之处是集成度不高,需要集成联调的时候,很难确保环境稳定。 云上测试环境是相对比较稳定的集成测试环境。本地开发测试完成后,各个业务将本领域的服务部署到云上测试环境,并且可以调用其他领域的服务进行集成测试。根据业务规模的复杂程度,可以将云上测试环境进一步分为α测试环境、β测试环境、γ测试环境等,这些测试环境集成程度由低到高。一般γ测试环境要求和生产环境一样的管理,确保环境稳定。 生产环境是正式业务环境,生产环境需要支持灰度升级功能,支持在线联调和引流,保证升级故障对服务造成的影响最小化。 云上测试环境可以通过开放CSE、中间件的公网IP,或者实现网络互通,这样可以使用云上的中间件替换本地环境,减少各个开发者自行安装环境的时间。这种情况也属于内网本地开发环境,微服务在本地开发环境的机器上运行。云上采用容器部署的微服务和本地开发环境机器上部署的微服务无法相互访问。为了避免冲突,云上测试环境只作为本地开发环境使用。 父主题: 通过Spring Cloud Huawei SDK托管Spring Cloud应用
  • 动态配置的类型选择 微服务引擎2.0的配置中心支持text、yaml等多种格式。 简单的key-value配置项 可以使用text类型,配置中心的key对应于代码中的key。 大量的配置 使用yaml格式,配置中心的key会被忽略,全量的key-value在yaml文件中定义。 ServiceComb引擎1.x不支持yaml格式,可以通过Spring Cloud Huawei适配,来使用yaml,需要在微服务bootstrap中增加如下配置: spring: cloud: servicecomb: config: fileSource: consumer.yaml # 需要按照yaml解析的配置项列表,以逗号分隔 初次使用ServiceComb引擎2.x 建议选择Spring Cloud Huawei的最新版本,最新版本包含更多的特性并针对历史问题进行了较好的优化。
  • 概述 Java Chassis是Apache基金会管理的开源微服务开发框架,最早由CSE捐献,目前有上百个开发者为项目做出贡献。相对于Spring Cloud,Java Chassis它提供了如下独特的功能: 灵活高性能的RPC实现。Java Chassis基于Open API,给出了不同RPC开发方式的统一描述,让微服务接口管理更加规范,同时保留了灵活的开发者使用习惯。Java Chassis基于Reactive,实现了高效的REST、Highway等通信协议,同时保留了传统Servlet等通信协议的兼容。 丰富的服务治理能力和统一的治理职责链。负载均衡、流量控制、故障隔离等常见的微服务治理能力都可以开箱即用,同时提供了统一的治理职责链,让新的治理功能的开发变得简单。 和Spring Cloud一样,Java Chassis也可以使用Spring、Spring Boot作为应用功能开发的基础组件,但是由于Java Chassis提供了独立的RPC实现,因此使用依赖于Spring MVC的功能组件会受到限制,比如使用Spring Securtiy,需要基于Java Chassis做一些适配。 父主题: 托管Java Chassis应用
  • 实施步骤 先将HSF或Dubbo框架改造为Spring Cloud框架。其基本操作步骤为: 修改POM和项目结构。 服务端RPC接口修改为REST接口。 客户端定义Feign引用。 删除HSF或Dubbo配置并增加Spring Cloud配置。 修改启动类。 您可以使用migrator工具一键将HSF、Dubbo等框架改造为Spring Cloud。 将HSF框架改造为Spring Cloud框架详细操作指导请参考HSF迁移Spring Cloud。 将Dubbo框架改造为Spring Cloud框架详细操作指导请参考Dubbo迁移Spring Cloud。 将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 修改pom文件将Nacos相关的依赖替换为ServiceComb引擎相关依赖。 修改bootstrap.yml文件增加ServiceComb引擎相关配置。 调整Nacos或Eureka的使用习惯。 您可以使用migrator工具一键将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 将Spring Cloud+Eureka接入到ServiceComb引擎的详细操作指导请参考Eureka+Spring Cloud迁移CSE。 将Spring Cloud+Nacos接入到ServiceComb引擎的详细操作指导请参考Nacos+Spring Cloud迁移CSE。
  • 问题描述 当使用Spring Cloud Huawei时,启动微服务时,当报错示例如下: send request to https://192.168.10.1:30100/v4/default/registry/microservices failed and retry to https://192.168.10.1:30100/v4/default/registry/microservices once.org.apache.http.conn.HttpHostConnectException: Connect to 192.168.10.1:30100 [/127.0.0.2] failed: Connection refused: connectat org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) ~[httpclient-4.5.13.jar:4.5.13]at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) ~[httpclient-4.5.13.jar:4.5.13]
  • 操作步骤 为CCE集群安装sermant-injector,请参考CCE部署场景接入指南。 为工作负载(deployment)中的微服务配置版本号或标签。 在下图所示位置为工作负载(deployment)配置环境变量,配置环境变量后,应用注册时,会使用该环境变量进行注册。 apiVersion: app/v1kind: Deploymentmetadata: name: dubbo-providerB labels: app: dubbo-providerBspec: replicas: 1 selector: matchLabels: app: dubbo-providerB template: metadata: labels: app: dubbo-providerB sermant-injection: enabled spec: containers: - name: dubbo-providerB image: dubbo-providerB:1.0.0 imagePullPolicy: IfNotPresent env: - name: "SERVICE_META_VERSION" value: "2.0.0" - name: "SERVICE_META_PA RAM ETERS" value: "group:gray" ports: - containerPort: 8004 imagePullSecrets: - name: default-secret 其中: 键SERVICE_META_VERSION,值为服务注册的版本号(如a.b.c的格式,其中a、b、c均为数字),标签应用需要修改为不同于正常应用的版本号。 键SERVICE_META_PARAMETERS,值为服务注册时的自定义标签(形如tag1:value1,tag2:value2),即标签名与标签值以英文冒号分隔,多个标签之间以英文逗号分隔。 当Sermant Agent为1.0.0及以下版本时,使用键为SERVICECOMB_INSTANCE_PROPS。 一般,如果用版本号进行路由,则只需配置SERVICE_META_VERSION,如果用自定义标签进行路由,则只需配置SERVICE_META_PARAMETERS。 为工作负载(deployment)打上标签并重启相关服务。 在下图所示位置为工作负载(deployment)打上标签sermant-injection: enabled。打上标签后,sermant-injector会在Pod重启时自动挂载Sermant Agent,从而通过Sermant Agent注册到CSE上。
  • 解决方法 启动服务在本地部署 在本地机器上使用curl https://注册中心IP地址:30100/health命令检查注册中心工作状态,查看是否返回类似如下信息: curl: Failed to connect to xxx.xxx.xxx.xxx port 30100: Connection refused 如果是,请检查是否因注册中心IP地址错误、注册中心端口号错误或者网络被隔离,导致网络不通。 启动服务在云上微服务引擎部署 微服务通过ServiceStage部署在微服务引擎,注册中心地址可以通过环境变量自动注入。请检查注入的注册中心地址是否正确。如果注册中心地址错误,请修改为正确地址并重新部署服务。
  • 开源软件选型 主要的开源社区,例如Spring Boot、Spring Cloud等都会维护多个版本分支。以Spring Cloud为例,存在Hoxton、Greenwich、2020.0.x等分支,其中大部分分支都已经停止维护。开源软件多数维护的分支存在两个:一个为最新版本的开发分支;一个为最近的稳定维护分支。 在开源软件选型上,应该紧跟社区的版本节奏,使用继续提供维护的分支的最新版本。在选择开发分支和维护分支上,没有严格的定论,需要视具体的产品功能确定。例如产品竞争力严重依赖某个三方软件的特性,那么更倾向于选择开发分支的最新版本;一个产品依赖某个三方软件的特性稳定,不使用新功能,那么更倾向于选择维护分支。 不建议选择社区已经停止维护的分支、以及虽然还在维护但发布时间超过半年以上的分支版本。虽然使用这些版本暂时没有发现功能问题,但是会给产品的持续演进带来严重影响:
  • 动态配置 动态配置按照公共、应用、服务三个层次进行管理。 简单的场景,可以使用应用级配置和服务级配置。应用级配置被该应用下的所有微服务共享,是公共配置;服务级配置只对具体微服务生效,是独享配置。复杂的场景,可以通过使用custom_tag和custom_value来定义配置。 例如某些配置,是对所有应用共享的,那么就可以使用这个机制。在配置文件增加如下配置: spring: cloud: servicecomb: config: kie: customLabel: public# 默认值是public customLabelValue: default # 默认值是空字符串
  • 方案概述 本文描述如何将HSF、Dubbo框架改造为Spring Cloud框架并接入ServiceComb引擎的操作。 应用场景 很多微服务框架只是提供了如何解决微服务运维问题的功能模块和工具,但并没有帮用户解决那些问题,用户自行解决这些问题的成本通常非常高,出于现有框架的使用成本和问题,以及对未来业务的发展是否需要选择更加合适的技术考虑,可将微服务框架进行迁移。 方案架构 将HSF、Dubbo框架改造为Spring Cloud框架。 微服务框架HSF、Dubbo提供的主要功能是RPC框架,以及在RPC框架之上,提供相关的服务治理能力,包括注册发现、动态配置和限流熔断等。Spring Cloud提供REST框架,并在REST框架基础之上提供服务治理能力。因此实现微服务开发框架迁移主要是将RPC框架修改为REST框架,其操作主要包括两部分: 将服务端的接口定义由RPC修改为REST。 将客户端的调用方式由RPC修改为REST风格(包括RestTemplate,Feign等)。 服务端的接口定义相对比较集中,客户端的使用则比较难于排查。为了尽可能减少客户端代码的排查和修改,采用Feign来实现客户端代码的替换。 将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 将Nacos、Eureka相关的依赖替换为ServiceComb引擎相关依赖。 增加ServiceComb引擎相关配置。 Nacos、Eureka一些使用习惯的调整,比如如何规划服务配置和逻辑隔离等。 下图以Eureka为例演示整个改造接入过程:
  • 概述 CSE提供Sermant Agent,支持Dubbo应用无需任何修改接入ServiceComb引擎,当前已支持应用注册发现、标签路由功能。 Sermant Agent是基于Sermant开源社区构建的、用于CSE微服务治理场景的Agent。 Sermant Agent基于Java Agent技术实现,应用通过Sermant Agent可实现无代理、非侵入方式接入ServiceComb引擎,并获得标签路由能力。 此功能目前处于公测阶段,当前仅在华东-上海一支持。 父主题: 通过Sermant Agent托管Dubbo应用
  • 约束限制 Nacos对Eureka的兼容,主要是兼容Eureka服务端侧的API,将服务侧注册的客户端实例信息进行保存与刷新,因此如果您仅使用Eureka作为注册中心,那么Nacos的诸多特性如命名空间和配置管理是不能使用的。 使用Eureka作为客户端,仅能在Nacos的“服务管理”中进行查阅,Eureka服务均使用Nacos的默认属性进行展示,即: 默认命名空间:public。 默认分组名称:DEFAULT_GROUP。 在Nacos中在“服务管理”页面创建服务的“保护阈值”设置的值属于Nacos的特性,无法作用于Eureka服务。
  • 版本支持 Spring Cloud Version Spring Boot Version Spring Cloud Openfeign Version RestTemplate Version Spring Cloud Loadbalancer Version Spring Cloud Netflix Ribbon Version Spring Cloud Gateway Version Spring Cloud Netflix Zuul Version Edgware.SR2+ 1.5.x 1.4.3.RELEASE+ 4.3.6.RELEASE+ - 1.4.3.RELEASE+ - 1.4.3.RELEASE+ Finchley.x 2.0.x 2.0.x 5.0.x - 2.0.x - 2.0.x Greenwich.x 2.1.x 2.1.x 5.1.x - 2.1.x - 2.1.x Hoxton.x 2.2.x、2.3.x 2.2.x 5.2.x 2.2.5.RELEASE+ 2.2.x 2.2.x 2.2.x 2020.0.x 2.4.x、2.5.x 3.0.x 5.3.x 3.0.x - 3.0.x - 2021.0.0 2.6.x 3.1.x 5.3.x 3.1.x - 3.1.x - 通过Sermant Agent注册到ServiceComb引擎中的应用可以使用标签路由功能。
  • 操作步骤 安装Sermant Agent,请参考安装Sermant Agent。 启动应用。 在应用的启动参数中添加如下参数,添加启动参数后,待应用启动完成。 -javaagent:${HOME}/java-agent/java-agent.jar=appName=default-Ddynamic_config_serverAddress={CSE_CONFIG_CENTER_ENDPOINTS}-Dregister.service.address={CSE_REGISTRY_ENDPOINTS}-Dservice_meta_version={VERSION}-Dservice_meta_parameters={PARAMETERS} 相关配置介绍: appName为agent服务名称,该配置无需修改,使用default即可。 ServiceComb引擎服务注册发现地址{CSE_REGISTRY_ENDPOINTS}与ServiceComb引擎配置中心地址{CSE_CONFIG_CENTER_ENDPOINTS}需替换为实际地址,可参考如下方式获取: ServiceComb引擎服务注册发现地址:获取ServiceComb引擎服务注册发现地址。 ServiceComb引擎配置中心地址:获取ServiceComb引擎配置中心地址。 {VERSION}需替换为服务注册时的版本号(形如a.b.c的格式,其中a、b、c均为数字,默认为1.0.0),标签应用需要修改为不同于正常应用的版本号。 {PARAMETERS}需替换为服务注册时的自定义标签(形如tag1:value1,tag2:value2),即标签名与标签值以英文冒号分隔,多个标签之间以英文逗号分隔。 一般地,如果用版本号进行路由,则只需配置service_meta_version,如果用自定义标签进行路由,则只需配置service_meta_parameters。
  • 下发路由规则配置 下发路由规则配置,详情请参考配置管理。 路由规则说明示例: ---- precedence: 2 # 优先级,数字越大,优先级越高。 match: # 请求匹配规则。0..N个,不配置表示匹配。 headers: # http header匹配 id: # 如果配置了多个header,那么所有的header规则都必须和请求匹配 exact: '1' # 配置策略,等于1,详细配置策略见配置策略表。 caseInsensitive: false # false:不区分大小写(默认),true:区分大小写。配置为false时,将统一转为大写进行比较 route: # 路由规则 - weight: 20 # 权重值 tags: version: 1.0.0 # 实例标记。满足标记条件的实例放到这一组。 - weight: 80 # 权重值 tags: version: 1.0.1 # 实例标记。满足标记条件的实例放到这一组。- precedence: 1 route: - weight: 20 tags: group: red - weight: 80 tags: group: green
  • 注册中心替换 自建Nacos当中的服务提供实例,需要增加CSE Nacos到自建Nacos的反向同步任务,以保证业务不中断。 观察自建的Nacos集群和CSE 的 Nacos集群,查看两个集群的服务实例是否一致,健康状态是否正常。 修改客户端连接Nacos的配置,将服务中原有的自建Nacos集群访问地址更新成CSE Nacos集群的客户端访问地址,获取方式请参考查看Nacos引擎详细信息。 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # 将该地址改为CSE Nacos的集群地址 依次重新部署自建Nacos的服务实例,此时您的服务只在CSE Nacos集群中进行了注册,完成了自建Nacos和CSE Nacos的替换。 图示为Nacos Sync同步后的CSE Nacos服务实例。 进行服务端的重启替换时,需新增从CSE Nacos到自建Nacos的服务端任务,保证业务不中断。 Nacos Sync同步任务正常后,在升级provider服务时,新建CSE Nacos到自建Nacos的同步任务,再逐步替换配置、重启,最后下线自建Nacos与Nacos Sync组件。
  • 应用迁移 添加注册中心集群信息。 参考3.f访问Nacos Sync服务。 在左侧导航栏选择“集群配置”,增加一个您自建的Nacos集群,若使用多个命名空间,需要多次添加。 命名空间为您自建待迁移应用所在的命名空间ID,用户密码为默认管理员的用户密码,若未使用鉴权功能修改过,默认为nacos,集群IP为您自己部署Nacos的IP与端口号。 集群名字可以自定义,但是一旦确认,不能被修改,否则基于此集群增加的任务,在Nacos Sync重启后,将不会恢复成功。 同1.b增加一个CSE Nacos的集群,若使用多个命名空间,需要多次添加。 命名空间为您想要迁移至CSE Nacos的命名空间ID,用户密码为默认管理员的用户密码,若未使用鉴权功能修改过,默认为nacos,集群IP为CSE Nacos的内网地址+端口号,其获取方式可参考查看Nacos引擎详细信息,端口号为8848。 添加完成后,可以在集群配置列表中查询到增加的集群。 添加同步任务。 参考3.f访问Nacos Sync服务,增加一个同步任务,从您自建的Nacos集群同步到CSE Nacos集群,同步的粒度是服务,其中“源集群”为您自建的Nacos,“目标集群”为CSE Nacos。添加完成之后,可以在同步服务列表中,查看已添加的同步任务。 目标集群的服务名与分组名,需要与源集群的服务名和分组名一致,否则同步不了,不同的服务需要新建不同的任务。 确认是否完成数据同步,检查数据是否同步成功到CSE Nacos集群,可参考查看服务列表查看CSE Nacos中出现同步任务中的服务,即表示同步成功。 对所有待迁移的应用进行迁移与同步任务,并准备升级客户端应用的Nacos连接配置。
  • 部署Spring Cloud应用 打包Sermant-examples。 在“Sermant-examples”根目录下,打开cmd命令,执行mvn clean package命令,对项目进行打包编译。编译成功后,获取下表中的两个软件包。 表1 软件包列表 软件包所在目录 软件包名称 说明 Sermant-examples/registry-demo/spring-cloud-registry-demo/spring-cloud-registry-consumer/target spring-cloud-registry-consumer.jar 服务消费者 Sermant-examples/registry-demo/spring-cloud-registry-demo/spring-cloud-registry-provider/target spring-cloud-registry-provider.jar 服务生产者 把spring-cloud-registry-consumer.jar复制到“Sermant-examples/registry-demo/spring-cloud-registry-demo/deployment/images/consumer”中。 把spring-cloud-registry-provider.jar复制到“Sermant-examples/registry-demo/spring-cloud-registry-demo/deployment/images/provider”中。 制作镜像。 登录已安装kubectl命令且已部署Sermant Injector的CCE集群中的节点。 把“Sermant-examples/registry-demo/spring-cloud-registry-demo”中的“deployment”文件夹上传至已登录的CCE集群中的节点上。 请参考使用容器引擎客户端上传镜像制作docker镜像,其中,使用到的Dockerfile请参考“Sermant-examples/registry-demo/spring-cloud-registry-demo/deployment/images/consumer”与“Sermant-examples/registry-demo/spring-cloud-registry-demo/deployment/images/provider”目录下的Dockerfile文件按需修改。 部署spring-cloud-registry-consumer.yaml与spring-cloud-registry-provider.yaml。 修改镜像名。 将已上传deployment文件夹到CCE集群中的节点中的“deployment/k8s/spring-cloud-registry-consumer.yaml“与“deployment/k8s/spring-cloud-registry-provider.yaml“中的镜像名修改为您所制作的镜像名。 在已上传deployment文件夹到CCE集群中的节点中的“deployment/k8s“目录下,执行如下命令部署spring-cloud-registry-consumer.yaml与spring-cloud-registry-provider.yaml: kubectl create -f spring-cloud-registry-consumer.yaml kubectl create -f spring-cloud-registry-provider.yaml 若需配置APP名称(默认default)、版本(形如a.b.c的格式,其中a、b、c均为数字,默认为1.0.0)请在yaml中增加SERVICE_META_APPLICATION与SERVICE_META_VERSION环境变量进行配置。如下所示: 验证应用接入ServiceComb引擎。 参考查看微服务列表查看应用(服务名为spring-cloud-registry-consumer与spring-cloud-registry-provider)是否已接入ServiceComb引擎。
  • 前置条件 已创建云容器引擎(CCE),创建CCE请参考创建CCE集群。 CCE集群版本需要大于等于1.15。 应用的基础镜像中,需要安装JDK ( 版本为1.8及以上版本 )。 已安装kubectl命令,安装kubectl命令请参考通过kubectl连接集群中相关操作。 已创建ServiceComb引擎实例,详情请参考创建ServiceComb引擎。 CCE集群与ServiceComb引擎处于相同的VPC网络下。 给Sermant Injector预留200m左右的cpu资源和300Mi左右的memory资源。 Sermant Injector版本要求1.0.11及以上,Sermant Agent镜像版本要求1.0.9及以上。
  • 前提条件 已创建云容器引擎(CCE),创建CCE请参考创建CCE集群。 CCE集群版本需要大于等于1.15。 已安装kubectl命令,安装kubectl命令请参考通过kubectl连接集群中相关操作。 已创建ServiceComb引擎实例,详情请参考创建ServiceComb引擎。 CCE与ServiceComb引擎处于相同的VPC网络下。 下载Sermant-examples到本地并解压。 本地编译构建打包机器环境已安装了Java JDK、Maven,并且能够访问Maven中央库。 已在CCE集群上部署Sermant Injector,详情请参考通过模板管理页面部署Sermant Injector将应用接入ServiceComb引擎或者通过Helm客户端部署Sermant Injector。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全