• 沒有找到結果。

使用微服务引擎功能_微服务引擎 CSE_开发指南_华为云

N/A
N/A
Protected

Academic year: 2022

Share "使用微服务引擎功能_微服务引擎 CSE_开发指南_华为云"

Copied!
49
0
0

加載中.... (立即查看全文)

全文

(1)

微服务引擎

开发指南

文档版本 01

发布日期 2022-01-11

(2)

版权所有 © 华为技术有限公司 2022。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

华为技术有限公司

地址: 深圳市龙岗区坂田华为总部办公楼 邮编:518129

网址: https://www.huawei.com

客户服务邮箱:[email protected] 客户服务电话:4008302118

(3)

目 录

1 概述...1

1.1 开发简介...1

1.2 常用概念...3

1.3 开发流程...3

2 开发微服务应用... 6

3 准备环境...8

4 对接微服务应用... 11

4.1 Java Chassis 接入 CSE... 11

4.2 Go Chassis 接入 CSE... 14

4.3 Spring Cloud 接入 CSE... 15

4.4 Dubbo 接入 CSE... 18

4.5 Mesher 接入 CSE... 20

4.5.1 Mesher 简介... 20

4.5.2 接入说明... 22

5 部署微服务应用... 24

6 使用微服务引擎功能... 25

6.1 使用服务注册...25

6.2 使用配置中心...29

6.2.1 配置中心概述... 29

6.2.2 Java Chassis 使用配置中心... 30

6.2.3 Spring Cloud 使用配置中心...32

6.2.4 Dubbo 使用配置中心... 33

6.3 使用服务治理...33

6.3.1 服务治理概述... 33

6.3.2 基于动态配置的流量特征治理介绍... 34

6.3.3 基于动态配置的流量特征治理开发... 38

6.4 使用安全认证...40

6.4.1 安全认证概述... 41

6.4.2 创建安全认证帐号名和密码... 41

6.4.3 配置微服务安全认证的帐号名和密码...41

7 附录... 44

开发指南 目 录

(4)

7.1 Java Chassis 版本升级参考... 44 7.2 本地开发工具说明... 45

开发指南 目 录

(5)

1 概述

开发简介 常用概念 开发流程

1.1 开发简介

微服务简介

随着微服务架构模式被越来越多的开发者作为应用系统构建的首选,稳定可靠的微服 务运行环境变的非常重要。

微服务引擎(CSE)是针对微服务解决方案提供的一站式管理平台,使用微服务引擎,

开发者可以更加专注于业务开发,提升产品交付效率和质量。微服务架构模式通常包 含如下内容:

● 微服务之间的RPC通信。微服务架构模式要求微服务之间通过RPC进行通信,不采 用其他传统的通信方式,比如共享内存、管道等。常见的RPC通信协议包括 REST、gRPC、Web Service等。使用RPC通信,能够降低微服务之间的耦合,提 升系统的开放性,减少技术选型的限制。一般建议采用业界标准协议,比如 REST。对于性能要求非常高的场景,也可以考虑私有协议。

● 分布式微服务实例和服务发现。微服务架构特别强调架构的弹性,业务架构需要 支持微服务多实例部署来满足业务流量的动态变化。微服务设计一般会遵循无状 态设计原则,符合该原则的微服务扩充实例,能够带来处理性能的线性提升。当 实例数很多的时候,就需要有一个支持服务注册和发现的中间件,用于微服务之 间的调用寻址。

● 配置外置及动态、集中的配置管理。随着微服务和实例数的增加,管理微服务的 配置会变得越来越复杂。配置管理中间件给所有微服务提供统一的配置管理视 图,有效降低配置管理的复杂性。配置管理中间件搭配治理控制台,可以在微服 务运行态对微服务的行为进行调整,满足业务场景变化、不升级应用的业务诉 求。

● 提供熔断、隔离、限流、负载均衡等微服务治理能力。微服务架构存在一些常见 的故障模式,通过这些治理能力,能够减少故障对于整体业务的影响,避免雪崩 效应。

开发指南 1 概述

(6)

● 分布式事务管理能力。常见的分布式事务处理模式包括Saga、TCC、无侵入式 等。分布式事务管理可以降低处理分布式事务一致性问题的难度。

● 调用链、集中日志采集和检索。查看日志仍然是分析系统故障最常用的手段,调 用链信息可以帮助界定故障和分析性能瓶颈。

有很多开源框架,比如Apache ServiceComb Java Chassis(简称Java Chassis)、

Spring Cloud、Apache Dubbo(简称Dubbo)、Go Chassis等,实现了微服务架构 模式。微服务引擎支持这些开源的微服务框架接入并使用微服务架构模式的注册发 现、集中配置、服务治理、分布式事务等功能,关系如下图所示:

开发能力要求

本文档的主要目的就是说明这些开源微服务开发框架如何接入和使用微服务引擎的功 能,假设您已经熟悉和掌握如下开发能力:

● 使用Java或者Go语言进行微服务开发。假设您已经基于一种ServiceStage支持的 微服务开发框架开发了应用系统,并期望将应用系统托管在微服务引擎上运行。

本文档提供微服务应用接入微服务引擎的相关技术支持。开源微服务开发框架如 何使用不是本文档的范围,您可以通过开源社区获取相关微服务开发框架的入门 材料和开发指南。

● 理解注册中心、配置中心在微服务应用中的作用,并在项目中搭建和使用注册中 心。不同的微服务开发框架默认支持的开源注册中心会有差异,理解注册中心的 作用,可以更加容易的更换注册中心。

● 熟悉虚机或者容器环境部署应用,请参考应用组件部署。

微服务开发框架版本说明

微服务开发框架支持的版本和推荐版本如下表所示,如果您已经使用低版本的微服务 开发框架构建应用,建议升级到推荐版本,以获取最稳定和丰富的功能体验。

框架 支持版本 推荐版本 接入说明

JavaChassis 2.1.3及以上 2.3.0及以上 可以直接使用开源项目提供的软件 包接入,不需要引用其他第三方软 件包。

JavaChassis 2.0.0~2.1.2 - 可以直接接入专享版。

JavaChassis 1.3.x - 可以直接接入专享版。

开发指南 1 概述

(7)

框架 支持版本 推荐版本 接入说明

GoChassis 2.x.x 2.2.0及以上 可以直接使用开源项目提供的软件 包接入,不需要引用其他第三方软 件包。

GoChassis 1.x.x - 可以直接使用开源项目提供的软件 包接入,不需要引用其他第三方软 件包。

Spring

Cloud 1.5.1-Hoxton及以

上 1.6.0-

Hoxton及以 上

采用Spring Cloud Huawei项目 提供接入支持。推荐版本为Spring Cloud Huawei的版本号。

Spring

Cloud 1.5.1-Greenwich及

以上 - 采用Spring Cloud Huawei项目 提供接入支持。

Spring

Cloud 1.5.1-Finchley及以 上

- 采用Spring Cloud Huawei项目 提供接入支持。

Apache

Dubbo 1.3.x (Dubbo

2.7.x) 1.3.6及以上 采用Dubbo ServiceComb项目提 供接入支持。推荐版本为Dubbo Serivcecomb的版本号。

Apache

Dubbo 1.1.x (Dubbo

2.6.x) - 采用Dubbo ServiceComb项目提 供接入支持。

1.2 常用概念

● 应用:可以将应用理解为完成某项完整业务场景的软件系统。应用一般由多个微 服务组成,应用里面的微服务能够相互发现和调用。

● 微服务:完成某项具体业务功能的软件系统。微服务是独立开发、部署的单元。

● 微服务实例:将微服务采用部署系统部署到运行环境,就产生了实例。可以将实 例理解为一个进程,一个微服务可以部署若干实例。

● 微服务环境:服务中心建立的一个逻辑概念,比如development、production 等。不同环境里面的微服务实例逻辑隔离、无法相互发现和调用。

1.3 开发流程

开发流程概述

开发应用和使用微服务引擎,需要经过如图1-1所示的几个阶段。

开发指南 1 概述

(8)

1-1 开发流程

开发流程说明

1. 开发微服务应用

如果您已经完成了微服务应用的开发,可以跳过本流程,进入准备环境。

进行微服务应用开发,首先需要进行技术选型。技术选型是一个复杂的问题,技 术决策者需要考虑使用的技术是否容易被团队成员掌握,技术能否满足项目对于 功能、性能、可靠性方面的要求,还需要考虑商业服务等多方面的因素。本文档 不探讨技术选型,假设技术团队已经选择了适合自己的开发框架。大部分技术团 队都会选择开源框架来构建业务。

开发微服务应用的具体内容,请参考开发微服务应用。

– 使用Java Chassis,通常会使用下面的技术进行本地微服务开发:

开发指南 1 概述

(9)

– 使用Dubbo,通常会使用下面的技术进行本地微服务开发:

– 使用Spring Cloud,通常会使用下面的技术进行本地微服务开发:

2. 准备环境

创建云上环境,以支持微服务引擎接入调试、云上应用部署和使用微服务引擎功 能。一般情况下,会创建一个测试环境和一个生产环境。通过ServiceStage,能够 非常方便的管理云上环境,详细内容请参考准备环境。

3. 对接微服务应用

用于微服务应用对接微服务引擎,涉及到对已经开发好的应用的配置文件、构建 脚本的修改。修改完成后,需要对应用重新编译、打包,通过ServiceStage将应用 包部署到微服务引擎,详细内容请参考对接微服务应用。

4. 部署微服务应用

开发完成的微服务应用,通过ServiceStage部署到微服务引擎,详细内容请参考部 署微服务应用。

5. 使用微服务引擎功能

对于持续发展的应用系统,都会持续完善和迭代,每个迭代可能需要对微服务应 用进行更新升级,需要使用更多的微服务引擎功能。持续迭代的功能演进,会重 复上面的应用开发、编译、打包和部署环节。详细内容请参考使用微服务引擎功 能。

开发指南 1 概述

(10)

2 开发微服务应用

如您已经完成了微服务应用的开发,请跳过本章节。

开源社区提供了丰富的开发资料和帮助渠道帮助您使用微服务开发框架。如您需深入 了解具体微服务框架下的微服务应用开发,请参考本章节给出的参考资料链接。

体验微服务引擎最快捷的方式是使用“微服务引擎推荐示例”里面的例子。下载示 例,修改配置文件中的微服务引擎地址,在本地运行例子,这些例子可以注册到微服 务引擎。

● Java Chassis

源码仓库:https://github.com/apache/servicecomb-java-chassis 问题咨询:https://github.com/apache/servicecomb-java-chassis/issues 开发指南:https://servicecomb.apache.org/references/java-chassis/zh_CN/

微服务引擎推荐示例:https://github.com/apache/servicecomb-samples/

tree/master/basic

● Go Chassis

源码仓库:https://github.com/go-chassis/go-chassis 问题咨询:https://github.com/go-chassis/go-chassis/issues 开发指南:https://go-chassis.readthedocs.io/en/latest/

微服务引擎推荐示例:https://github.com/go-chassis/go-chassis/tree/

master/examples/discovery

● Spring Cloud

源码仓库:https://github.com/spring-cloud 问题咨询:参考源码仓库的各个代码仓库下的issues 开发指南:https://spring.io/projects/spring-cloud

Spring Cloud Huawei项目:https://github.com/huaweicloud/spring-cloud- huawei

微服务引擎推荐示例:https://github.com/huaweicloud/spring-cloud- huawei-samples/tree/master/basic

● Dubbo

源码仓库:https://github.com/apache/dubbo

问题咨询:https://github.com/apache/dubbo/issues 开发指南:https://dubbo.apache.org/zh/

开发指南 2 开发微服务应用

(11)

Dubbo ServiceComb项目:https://github.com/huaweicloud/dubbo- servicecomb

微服务引擎推荐示例:https://github.com/huaweicse/dubbo-servicecomb- samples/tree/master/basic

开发指南 2 开发微服务应用

(12)

3 准备环境

环境准备包括本地开发调试环境和云上环境准备。

准备本地开发调试环境

本地开发调试环境用于搭建一个简易的测试环境,可以有以下两种选择:

● 下载本地轻量化微服务引擎。

● 使用微服务引擎专享版,并开放公网访问的IP,保证本地环境能够访问。

准备云上环境

微服务应用部署到云上,需要先准备云上环境。准备环境一般包含如下任务:

● 创建微服务引擎,请参考创建微服务引擎专享版。

● 创建环境,请参考创建环境。创建的环境,需包含CCE集群、ELB及微服务引擎等 资源。

● 创建应用,请参考创建应用。

常用环境变量说明

通过ServiceStage管理环境和部署应用,能够简化用户的配置。ServiceStage会设置一 些环境变量,供应用使用,常用的环境变量包括下表所示内容:

3-1 常用环境变量

环境变量名称 含义

PAAS_CSE_ENDP

OINT CSE注册中心、配置中心等服务的地址信息。这个环境变量在 微服务引擎专业版通过APIG访问的时候使用,上述服务的外部 访问地址是统一的域名。

说明

不建议使用这个环境变量,而是使用具体服务的环境变量,避免在微服 务引擎专享版的场景下存在歧义,需要修改应用程序。

PAAS_CSE_SC_EN

DPOINT CSE注册中心地址信息。

开发指南 3 准备环境

(13)

环境变量名称 含义 PAAS_CSE_CC_EN

DPOINT CSE配置中心地址信息。

PAAS_PROJECT_N

AME 项目名称。

CAS_APPLICATIO

N_NAME ServiceStage的应用名称。

CAS_COMPONEN

T_NAME ServiceStage的组件名称。

CAS_INSTANCE_V

ERSION ServiceStage的部署版本号。

您可以结合不同微服务开发框架的机制,比如Spring Cloud提供的Place Holder机制、

Java Chassis提供的“mapping.yaml”机制等来合理使用这些变量,减少部署需要手 工输入的内容。

ServiceStage创建应用过程中,可以绑定中间件(如DCS、RDS)。应用绑定的中间件 配置信息可以通过以下环境变量获取。

● 分布式会话

基于DCS实现的稳定可靠的会话存储,支持主流Web容器的自动注入,如tomcat context,node.js express-session,php的session handler等。

分布式会话相关环境变量说明如下表所示。

3-2 DCS 分布式会话相关环境变量

环境变量 说明

DISTRIBUTED_SESSION_CLUSTER 实例是否是集群模式,取值true/false DISTRIBUTED_SESSION_TYPE 分布式会话实例的存储类型,当前只

支持Redis

DISTRIBUTED_SESSION_VERSION 分布式会话实例的版本号 DISTRIBUTED_SESSION_NAME 分布式会话实例的名称 DISTRIBUTED_SESSION_HOST 分布式会话实例的连接IP地址 DISTRIBUTED_SESSION_PORT 分布式会话实例的连接IP端口 DISTRIBUTED_SESSION_PASSWORD 分布式会话实例的连接密码

● 分布式缓存

分布式缓存服务(Distributed Cache Service,简称DCS)是华为云提供的一款内 存数据库服务,兼容了Redis和Memcached两种内存数据库引擎,为您提供即开 即用、安全可靠、弹性扩容、便捷管理的在线分布式缓存能力,满足用户高并发 及数据快速访问的业务诉求。

开发指南 3 准备环境

(14)

分布式缓存相关环境变量如下表所示。

3-3 DCS 分布式缓存相关环境变量

环境变量 说明

DISTRIBUTED_CACHE_CLUSTER 实例是否是集群模式,取值true/false DISTRIBUTED_CACHE_TYPE 分布式缓存实例的存储类型,当前只

支持Redis

DISTRIBUTED_CACHE_VERSION 分布式缓存实例的版本号 DISTRIBUTED_CACHE_NAME 分布式缓存实例的名称 DISTRIBUTED_CACHE_HOST 分布式缓存实例的连接IP地址 DISTRIBUTED_CACHE_PORT 分布式缓存实例的连接IP端口 DISTRIBUTED_CACHE_PASSWORD 分布式缓存实例的连接密码

● 关系型数据库

华为云关系型数据库(Relational Database Service,简称RDS)是一种基于云计 算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。

关系型数据库相关环境变量如下表所示。

3-4 RDS 关系型数据库相关环境变量

环境变量 说明

RELATIONAL_DATABASE_NAME 关系型数据库实例名称 RELATIONAL_DATABASE_CONNECTI

ON_TYPE 关系型数据库实例的连接类型,取值

为JNDI/

SPRING_CLOUD_CONNECTOR RELATIONAL_DATABASE_JNDI_NAM

E 关系型数据库实例的JNDI名称,如果

连接类型为JNDI

RELATIONAL_DATABASE_DB_NAME 关系型数据库实例的数据库名 RELATIONAL_DATABASE_DB_USER 关系型数据库实例的数据库用户 RELATIONAL_DATABASE_DB_TYPE 关系型数据库实例的数据库类型,当

前只支持MySQL

RELATIONAL_DATABASE_VERSION 关系型数据库实例的数据库版本 RELATIONAL_DATABASE_HOST 关系型数据库实例的数据库IP地址 RELATIONAL_DATABASE_PORT 关系型数据库实例的数据库端口 RELATIONAL_DATABASE_PASSWOR

D 关系型数据库实例的数据库密码

开发指南 3 准备环境

(15)

4 对接微服务应用

Java Chassis接入CSE Go Chassis接入CSE Spring Cloud接入CSE Dubbo接入CSE Mesher接入CSE

4.1 Java Chassis 接入 CSE

本章节介绍Java Chassis如何接入CSE,使得Java Chassis能够对接CSE,并且方便的使 用CSE提供的最常用的功能。在使用微服务引擎功能章节,会给出具体的开发指导。

本章节介绍的开发方法,可以在Apache ServiceComb Samples项目中找到对应的代 码,供您在开发过程中参考。

前提条件

● 已基于Java Chassis开发好了微服务应用。

Java Chass框架下的微服务应用开发,请参考https://servicecomb.apache.org/

references/java-chassis/zh_CN/。

● 版本要求:Java Chassis 2.3.0及以上版本。

● 本文假设您的项目使用了maven管理打包,您熟悉maven的依赖管理机制,能够 正确的修改“pom.xml”文件中的dependency management和dependency。

● Java Chassis支持和不同的技术进行组合使用,配置文件的名称和实际使用的技术 有关。如果您采用Spring方式使用Java Chassis,配置文件的名称一般为

“microservice.yaml”,如果您采用Spring Boot方式使用Java Chassis, 配置文 件名称一般为“application.yaml”。本文统一使用“microservice.yaml”表示配 置文件,请结合实际项目进行区分

操作步骤

步骤1 在项目的“pom.xml”文件中引入依赖。

<dependency>

<groupId>org.apache.servicecomb</groupId>

开发指南 4 对接微服务应用

(16)

<artifactId>solution-basic</artifactId>

</dependency>

<dependency>

<groupId>org.apache.servicecomb</groupId>

<artifactId>servicestage-environment</artifactId>

</dependency>

推荐使用Maven Dependency Management管理项目依赖的三方软件,在项目的

“pom.xml”文件中引入:

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.apache.servicecomb</groupId>

<artifactId>java-chassis-dependencies</artifactId>

<version>${java-chassis.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

如果您的项目中,已经包含了上述依赖,则不需要做任何处理。

其中servicestage-environment软件包是可选的。这个软件包提供了环境变量映射的功 能,依赖这个软件包以后,当您采用ServiceStage部署应用,不用手工修改注册中心地 址、配置中心地址、项目名称等信息,会通过环境变量覆盖“microservice.yaml”中 的默认配置,它包含“mapping.yaml”文件,在您自己的项目中增加

“mapping.yaml”文件能够起到同样的效果。

说明

“mapping.yaml”在后续新版本可能会发生变化,以适配CSE最新的功能要求。如果期望后续 升级新版本保持稳定而不是跟随CSE演进,您可以选择不依赖servicestage-environment,而是 在您自己的项目中增加“mapping.yaml”。

PAAS_CSE_ENDPOINT:

- servicecomb.service.registry.address - servicecomb.config.client.serverUri PAAS_CSE_SC_ENDPOINT:

- servicecomb.service.registry.address PAAS_CSE_CC_ENDPOINT:

- servicecomb.config.client.serverUri PAAS_PROJECT_NAME:

- servicecomb.credentials.project

# CAS_APPLICATION_NAME:

# - servicecomb.service.application

# CAS_COMPONENT_NAME:

# - servicecomb.service.name

# CAS_INSTANCE_VERSION:

# - servicecomb.service.version

solution-basic里面引入了常用的软件包,并且提供了默认的“microservice.yaml”文 件。这个配置文件配置了常用的Handler和参数。其内容如下:

# order of this configure file servicecomb-config-order: -100 servicecomb:

# handlers handler:

开发指南 4 对接微服务应用

(17)

chain:

Provider:

default: qps-flowcontrol-provider Consumer:

default: qps-flowcontrol-consumer,loadbalance,fault-injection-consumer

# loadbalance strategies references:

version-rule: 0+

loadbalance:

retryEnabled: true retryOnNext: 1 retryOnSame: 0

# metrics and access log accesslog:

enabled: true metrics:

window_time: 60000 invocation:

latencyDistribution: 0,1,10,100,1000 Consumer.invocation.slow:

enabled: true msTime: 1000

Provider.invocation.slow:

enabled: true msTime: 1000 publisher.defaultLog:

enabled: true

endpoints.client.detail.enabled: true

“microservice.yaml”配置文件设置了servicecomb-config-order: -100 , 表示配置 文件的优先级很低(order越大,优先级越高,缺省为0),如果业务服务增加了同样 的配置项,会覆盖这里的配置。

说明

“microservice.yaml”文件在后续新版本可能会发生变化,以适配CSE最新的功能要求。如果期 望后续升级新版本保持稳定而不是跟随CSE演进,您可以考虑将配置项写到您自己的

“microservice.yaml”文件中。

步骤2 (可选)配置安全认证参数。

使用微服务引擎专享版,并且启用了安全认证,需要配置,其他场景可以跳过这个步 骤。

微服务引擎开启了安全认证之后,所有调用的API都需要先获取token,才能调用,认 证流程请参考服务中心RBAC说明。

使用安全认证首先需要从微服务引擎获取用户名和密码,然后在配置文件中增加如下 配置:

servicecomb:

credentials:

rbac.enabled: true account:

name: your account name # 从微服务引擎获取的用户名 password: your password # 从微服务引擎获取的密码

cipher: default #接口org.apache.servicecomb.foundation.auth.Cipher的实现类里面的name() 方法返回的名称

开发指南 4 对接微服务应用

(18)

其中“cipher”指定了对“password”进行加密的算法名称,默认提供明文存储。通 过自定义实现加密,如下所以:

● 自定义实现,首先实现接口

“org.apache.servicecomb.foundation.auth.Cipher”,里面的两个方法:

– String name()

这个是servicecomb.credentials.cipher的名称定义,需要配置在配置文件中。

– char[] decode(char[] encrypted)

解密接口,对secretKey进行解密后使用。

实现类需要声明为SPI,比如:

package com.example

public class MyCipher implements Cipher

创建SPI配置文件,文件名称和路径为META-INF/serivces/

org.apache.servicecomb.foundation.auth.Cipher, 文件内容为:

com.example.MyCipher

然后在“microservice.yaml”文件中增加配置。

servicecomb:

credentials:

rbac.enabled: true account:

name: your account name

password: your password # 加密后的密码

cipher: youciphername #实现类里面的name()方法返回的名称 说明

明文存储无法保证安全, 建议您对密码进行加密存储。

----结束

4.2 Go Chassis 接入 CSE

本章节介绍Go Chassis如何接入CSE,使得Go Chassis能够对接CSE,并且方便的使用 CSE提供的最常用的功能。在使用微服务引擎功能章节,会给出具体的开发指导。

本章节介绍的开发方法,可以在Go Chassis Sample Discovery项目中找到对应的代 码,供您在开发过程中参考。

前提条件

● 已基于Go Chassis开发好了微服务应用。

Go Chassis微服务框架下的微服务应用开发,请参考https://go- chassis.readthedocs.io/en/latest/。

● 相关软件版本要求:Golang 1.16及以上版本。

操作步骤

步骤1 在项目的“go.mod”文件中引入依赖。

请在您的项目的“go.mod”中添加以下依赖。如果您的项目中已经包含以下依赖,则 不需要做任何处理。

github.com/go-chassis/go-chassis/v2 v2.3.0

开发指南 4 对接微服务应用

(19)

步骤2 设置注册中心和配置中心。

在“chassis.yaml”文件中增加配置项:

servicecomb:

registry:

type: servicecenter #无需设置,默认为servicecenter address: 服务注册发现地址

config:

client:

type: kie # 默认为kie serverUri: 配置中心地址 ----结束

4.3 Spring Cloud 接入 CSE

本章节介绍Spring Cloud如何接入CSE,使得Spring Cloud能够对接CSE,并且方便的 使用CSE提供的最常用的功能。在使用微服务引擎功能章节,会给出具体的开发指导。

本章节介绍的开发方法,可以在Spring Cloud Huawei Samples项目中找到对应的代 码,供您在开发过程中参考。

前提条件

● 已基于Spring Cloud开发好了微服务应用。

Spring Cloud微服务框架下的微服务应用开发,请参考https://spring.io/

projects/spring-cloud。

● 版本要求:Spring Cloud Huawei 1.6.0-Hoxton及以上版本。

● 本文假设您的项目使用了maven管理打包,您熟悉maven的依赖管理机制,能够 正确的修改pom.xml文件中的dependency management和dependency。

操作步骤

步骤1 在项目的“pom.xml”文件中引入依赖。

● 如果使用Spring Cloud开发微服务,引入:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-service-engine</artifactId>

</dependency>

● 如果使用Spring Cloud Gateway开发网关,引入:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-service-engine-gateway</artifactId>

</dependency>

推荐使用Maven Dependency Management管理项目依赖的三方软件,在项目中 引入:

<dependencyManagement>

<dependencies>

<!-- configure user spring cloud / spring boot versions -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>${spring-boot.version}</version>

开发指南 4 对接微服务应用

(20)

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>${spring-cloud.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<!-- configure spring cloud huawei version -->

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-huawei-bom</artifactId>

<version>${spring-cloud-huawei.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

如果您的项目中,已经包含了上述依赖,则不需要做任何处理。

如果您的项目中使用了其他注册发现库,比如eureka,需要对项目进行适当调整,包 括:

● 删除项目中eureka相关依赖,比如:

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

● 如果代码中使用了@EnableEurekaServer, 需要删除并替换为

@EnableDiscoveryClient。

说明

组件spring-cloud-starter-huawei-service-engine包含了服务注册、配置中心、服务治理、

灰度发布、契约管理等功能。其中契约管理对于Spring Cloud微服务应用的运行不是必须 的。微服务引擎对契约个数存在数量限制,当微服务应用契约个数超过限制,会注册失 败。如果遗留系统无法进行合理的拆分减少契约个数,可以排除依赖,不使用契约管理功 能。

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-service-engine</artifactId>

<exclusions>

<exclusion>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-swagger</artifactId>

</exclusion>

</exclusions>

</dependency>

步骤2 配置微服务信息。

在“bootstrap.yml”增加微服务描述信息。如果项目中没有“bootstrap.yml”,则创 建一个新的文件。

spring:

application:

name: basic-provider cloud:

servicecomb:

开发指南 4 对接微服务应用

(21)

discovery:

enabled: true

address: http://127.0.0.1:30100 appName: basic-application

serviceName: ${spring.application.name}

version: 0.0.1

healthCheckInterval: 30 config:

serverAddr: http://127.0.0.1:30110 serverType: kie

步骤3 (可选)配置安全认证参数。

使用微服务引擎专享版,并且启用了安全认证,需要配置,其他场景可以跳过这个步 骤。

微服务引擎开启了安全认证之后,所有调用的API都需要先获取token才能调用,认证 流程请参考服务中心RBAC说明。

使用安全认证首先需要从微服务引擎获取用户名和密码,然后在配置文件中增加如下 配置。和配置AK/SK一样,password默认明文存储,开发者可以自定义password的加 密存储算法。

● 明文方法 spring:

cloud:

servicecomb:

credentials:

account:

name:用户名 password:密码 cipher: default

● 自定义实现加密存储算法

首先实现接口com.huaweicloud.common.util.Cipher,里面有两个方法:

String name(),这个是spring.cloud.servicecomb.credentials.cipher的名称定义,需要配置在 配置文件中。

char[] decode(char[] encrypted),解密接口,对secretKey进行解密后使用。

public class CustomCipher implements Cipher

加密解密的实现需要作为BootstrapConfiguration,首先声明:

@Configuration

public class MyCipherConfiguration { @Bean

public Cipher customCipher() { return new CustomCipher();

}}

然后增加文件 META-INF/spring.factories定义配置:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\

com.huaweicloud.common.transport.MyCipherConfiguration 自定义完成,即可在bootstrap.yaml文件中使用新增加的解密算法:

spring:

cloud:

servicecomb:

credentials:

account:

name:用户名 password:密码

cipher: 自定义算法名称

开发指南 4 对接微服务应用

(22)

说明

使用RBAC功能,需要1.6.0-Hoxton及以上版本。

使用微服务引擎专业版,不能使用watch功能,需要在配置文件里面关闭,否则会周期性打印错 误日志。服务中心设置watch=false。1.6.0-Hoxton及以上版本默认没有开启watch功能,不需 要设置。

spring:

cloud:

servicecomb:

discovery:

watch: false ----结束

4.4 Dubbo 接入 CSE

本章节介绍Dubbo如何接入CSE,使得Dubbo能够对接CSE,并且方便的使用CSE提供 的最常用的功能。在使用微服务引擎功能章节,会给出具体的开发指导。

本章节介绍的开发方法,可以在Dubbo ServiceComb Samples项目中找到对应的代 码,供您在开发过程中参考。

Dubbo未提供网关服务,在例子中使用了Spring Cloud Gateway作为网关,Spring Cloud Gateway接入CSE的说明请参考Spring Cloud接入CSE章节。

前提条件

● 已基于Dubbo开发好了微服务应用。

Dubbo微服务框架下的微服务开发,请参考https://dubbo.apache.org/zh/。

● Dubbo ServiceComb版本为1.3.6及以上版本,并且使用Spring Boot作为开发底 座。

● 本文假设您的项目使用了maven管理打包,您熟悉maven的依赖管理机制,能够 正确的修改“pom.xml”文件中的dependency management和dependency。

操作步骤

步骤1 (可选)在项目的“pom.xml”文件中引入依赖。

如果您的项目中,已经包含了如下依赖,则不需要做任何处理。

如果您的项目中使用了其他注册发现库,比如zookeeper、nacos等,可以删除这些依 赖,这个步骤不是必须的。

<dependency>

<groupId>com.huaweicloud.dubbo-servicecomb</groupId>

<artifactId>dubbo-servicecomb-solution-spring-boot</artifactId>

</dependency>

推荐使用Maven Dependency Management管理项目依赖的三方软件,在项目的

“pom.xml”文件中引入:

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>${spring-boot.version}</version>

开发指南 4 对接微服务应用

(23)

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.apache.dubbo</groupId>

<artifactId>dubbo-bom</artifactId>

<version>${dubbo.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>com.huaweicloud.dubbo-servicecomb</groupId>

<artifactId>dubbo-servicecomb-bom</artifactId>

<version>${dubbo-servicecomb.version}</version>

<scope>import</scope>

<type>pom</type>

</dependency>

</dependencies>

</dependencyManagement>

步骤2 在启动类引入Dubbo ServiceComb的Bean。

下面的示例代码中,"classpath*:spring/dubbo-servicecomb.xml"是Dubbo ServiceComb的Bean信息,增加这个信息才会加载Dubbo ServiceComb的功能。

@SpringBootApplication

@ImportResource({"classpath*:spring/dubbo-provider.xml", "classpath*:spring/dubbo- servicecomb.xml"})

public class ProviderApplication {

public static void main(String[] args) throws Exception { try {

new

SpringApplicationBuilder(ProviderApplication.class).web(WebApplicationType.NONE).run(args);

} catch (Throwable e) { e.printStackTrace();

} }}

步骤3 配置微服务信息。

1. 在“dubbo.properties”增加微服务描述信息。如果项目中没有

“dubbo.properties”,则创建一个新的文件。使用Spring Boot集成Dubbo,也 可以将配置信息写到“application.yaml”中。为了符合Dubbo的使用习惯,本文 档使用properties格式进行描述。在推荐的例子中,使用的是

“application.yaml”,使用yaml格式可以更好的利用profile机制管理不同环境的 配置。#### 服务配置信息 ####

# 所属应用。

dubbo.servicecomb.service.application=basic-application

# 服务名称。

dubbo.servicecomb.service.name=price-provider

# 版本。默认为 1.0.0.0

dubbo.servicecomb.service.version=1.0.0

# 环境。默认为空。可选值:development,testing,acceptance,production

# dubbo.servicecomb.service.environment=production

# project。 默认为default

# dubbo.servicecomb.service.project=

#### 实例配置信息 ####

# 实例初始状态。可选值:UP,DOWN,STARTING,OUTOFSERVICE

# dubbo.servicecomb.instance.initialStatus=UP

开发指南 4 对接微服务应用

(24)

#### 服务中心配置信息 ####

# dubbo.servicecomb.registry.address=https://cse.cn-south-1.myhuaweicloud.com dubbo.servicecomb.registry.address=http://127.0.0.1:30100

#### 配置中心配置信息 ####

# dubbo.servicecomb.config.address=https://cse.cn-south-1.myhuaweicloud.com dubbo.servicecomb.config.address=http://127.0.0.1:30110

dubbo.servicecomb.config.type=kie

#### SSL 配置信息 ####

# dubbo.servicecomb.ssl.enabled=true dubbo.servicecomb.ssl.enabled=true

2. 修改dubbo registry为CSE的服务中心。这个配置项一般在spring的配置文件中,

比如“spring/dubbo-provider.xml”文件中。

<dubbo:registry address="sc://127.0.0.1:30100"/>

这个配置项的地址信息不会使用,只使用了协议名称sc。

3. (可选)如果使用基于流量的微服务治理的重试功能,需要修改dubbo cluster配 置。如果无此配置项,请新增。详细请参考使用服务治理。

<dubbo:consumer cluster="dubbo-servicecomb"></dubbo:consumer>

步骤4 (可选)使用环境变量。

可以通过环境变量简化部署配置。使用ServiceStage部署可以使用的环境变量参考准备 环境。

“dubbo.properties”和“application.yaml”中均可以使用place holder来使用环境变 量。以“application.yaml”为例,服务中心的地址和配置中心的地址使用环境变量,

那么采用ServiceStage部署的时候,环境变量的实际值会覆盖配置文件里面的缺省值,

减少了重新编译打包的步骤。

PAAS_CSE_SC_ENDPOINT: http://127.0.0.1:30100 PAAS_CSE_CC_ENDPOINT: http://127.0.0.1:30110 dubbo:

servicecomb:

registry:

address: ${PAAS_CSE_SC_ENDPOINT}

config:

address: ${PAAS_CSE_CC_ENDPOINT}

----结束

4.5 Mesher 接入 CSE

4.5.1 Mesher 简介

什么是 Mesher

Mesher是Service Mesh的一个具体的实现,是一个轻量的代理服务以Sidecar的方式与 微服务一起运行。

Service Mesh是由William Morgan定义:

Service Mesh是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务 拓扑,Service Mesh保证请求可以在这些拓扑中可靠地传输。在实际应用当中,

Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一 起,但应用程序不需要知道它们的存在。

开发指南 4 对接微服务应用

(25)

随着云原生应用的崛起,Service Mesh逐渐成为一个独立的基础设施层。在云原生模 型里,一个应用可以由数百个服务组成,每个服务可能有数千个实例,而每个实例可 能会持续地发生变化。服务间通信不仅异常复杂,而且也是运行时行为的基础。管理 好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。

Service Mesh实际上就是处于TCP/IP之上的一个抽象层,假设底层的L3/L4网络能够点 对点地传输字节(同时,也假设网络环境是不可靠的,所以Service Mesh必须具备处 理网络故障的能力)。

从某种程度上说,Service Mesh有点类似TCP/IP。TCP对网络端点间传输字节的机制进 行了抽象,而Service Mesh则是对服务节点间请求的路由机制进行了抽象。Service Mesh不关心消息体是什么,也不关心它们是如何编码的。应用程序的目标是“将某些 东西从A传送到B”,而Service Mesh所要做的就是实现这个目标,并处理传送过程中 可能出现的任何故障。

与TCP不同的是,Service Mesh有着更高的目标:为应用运行时提供统一的、应用层面 的可见性和可控性。Service Mesh将服务间通信从底层的基础设施中分离出来,让它 成为整个生态系统的一等公民——它因此可以被监控、托管和控制。

为什么要使用 Mesher

● 业务代码无须改造

● 支持老旧应用接入

● 普通应用快速成为云原生应用

● 业务代码零侵入

基本实现原理

Mesher是L7层协议代理,Mesher以Sidecar模式运行在应用所在的Pod内,与Pod共享 网络与存储:

1. Pod中的应用使用Mesher作为http代理,可以自动发现其他服务。

2. Mesher会代替Pod中的应用向注册中心注册应用相关信息,以便让其他应用发 现。

发起一次网络请求的过程中存在微服务消费者consumer和提供者provider,场景如 下:

● 场景一:仅consumer使用Mesher作为Sidecar。

provider需要自己实现服务注册发现,或者使用Java或Go Chassis开发框架,否则 通过Mesher接入的consumer无法发现provider。

应用间的网络请求如下:

开发指南 4 对接微服务应用

(26)

consumer-> Mesher -> provider

● 场景二:consumer、provider均使用Mesher作为Sidecar。

此场景无需再使用微服务开发框架。

应用间的网络请求如下:

consumer -> Mesher -> Mesher ->provider

● 场景三:仅provider使用Mesher作为Sidecar consumer需要使用Java或者Go Chassis开发框架。

应用间的网络请求如下:

consumer-> Mesher -> provider

注意事项

应用上云后需要作出一定的配置变更。例如在Mesher所处环境外,consumer在访问 provider时使用http://IP:port/进行访问。在使用Mesher后,使用http://provider:port/

即可进行访问,接入说明将详细讲解。

4.5.2 接入说明

须知

不同于微服务开发框架,Mesher的能力是由ServiceStage平台提供的。您必须在 ServiceStage平台创建Mesher组件,才能使用Mesher。

本章节介绍http应用如何通过Mesher接入CSE。由于Mesher支持多语言,因此本章仅 描述通过Mesher接入CSE时的规范要求。具体的代码样例可以参考:

.Net core接入服务网格

PHP接入服务网格

前提条件

已开发好了一个http应用(支持多语言)。

操作步骤

步骤1 修改微服务调用的URL,将URL中的${IP:Port}修改为服务名。

例如调用一个名为“provider”的微服务,API为“/hello”,则调用URL通常为:

http://${IP:Port}/hello。例如:

http://127.0.0.1:80/hello

您需要将调用的URL修改为:

http://provider/hello

步骤2 为微服务调用请求设置http proxy,proxy的地址为:http://${IP:Port}。例如:

http://127.0.0.1:30101

若一个微服务被其他微服务调用,则该微服务的监听地址中必须包含127.0.0.1(监听 端口和其他监听地址不做限制)。

开发指南 4 对接微服务应用

(27)

步骤3 在ServiceStage平台创建Mesher组件,请参考创建微服务组件。

须知

Mesher组件名称必须和微服务名称一致。

----结束

开发指南 4 对接微服务应用

(28)

5 部署微服务应用

微服务应用部署,请参考部署组件。

开发指南 5 部署微服务应用

(29)

6 使用微服务引擎功能

使用服务注册 使用配置中心 使用服务治理 使用安全认证

6.1 使用服务注册

微服务引擎的服务中心提供了服务注册的功能。服务注册是指微服务启动的时候,将 基本信息,比如所属应用、微服务名称、微服务版本、监听的地址信息等注册到服务 中心。

微服务运行的过程中,也通过服务中心查询其他微服务的基本信息。不同的微服务开 发框架注册的信息会有差异,比如Java Chassis还会注册服务契约等信息。不同微服务 开发框架注册的基本信息、注册和发现其他微服务的流程是相同的。

本章节重点介绍不同的微服务开发框架如何使用服务中心和配置自己的注册信息,同 时也会介绍微服务和注册中心之间交互有关的配置项。微服务注册成功后,可以在微 服务引擎使用微服务目录、微服务实例列表、微服务依赖关系等功能。

Java Chassis

Java Chassis使用服务注册,需要在项目中增加如下依赖:

<dependency>

<groupId>org.apache.servicecomb</groupId>

<artifactId>registry-service-center</artifactId>

</dependency>

如果项目已经直接或者间接包含这个依赖,则无需添加。Java Chassis包含如表6-1所 示配置项。这些配置项的值影响在服务中心注册的基本信息,以及微服务和服务中心 之间的交互,比如心跳等。

开发指南 6 使用微服务引擎功能

(30)

6-1 Java Chassis 常用配置项

配置项 含义 缺省值 备注

servicecomb.service.ap

plication 所属应用 default -

servicecomb.service.na

me 微服务名称 defaultMicro

service - servicecomb.service.ve

rsion 微服务版本 1.0.0.0 -

servicecomb.service.en

vironment 环境 - production

、developmen t等

servicecomb.service.re

gistry.address 注册中心地址 http://

127.0.0.1:301 00

集群地址使 用“,”分隔

servicecomb.service.re

gistry.instance.watch 是否开启watch模式 true - servicecomb.service.re

gistry.instance.healthC heck.interval

发送心跳的时间间隔

(秒)

30 -

servicecomb.service.re gistry.instance.healthC heck.times

允许的心跳失败次数。当 连续第times+1次心跳仍 然失败时则实例被服务中 心下线。即interval * (times + 1)决定了实例被 自动注销的时间。如果服 务中心等待这么长的时间 没有收取到心跳,会注销 实例

3 -

servicecomb.datacente

r.name 数据中心名称 - -

servicecomb.datacente

r.region 数据中心区域 - -

servicecomb.datacente

r.availableZone 数据中心可用区 - -

Java Chassis注册的实例地址信息、监听地址,和配置项

servicecomb.service.publishAddress指定的发布地址有关。服务监听地址的配置项是 servicecomb.rest.address和servicecomb.highway.address,分别对应rest传输方式和 highway传输方式的监听地址。注册的地址信息和监听地址、发布地址的关系如表6-2 所示。

开发指南 6 使用微服务引擎功能

(31)

6-2 注册的实例地址生效规则

监听地址 发布地址 注册的实例地址 127.0.0.1 - 127.0.0.1

0.0.0.0 - 指定选取一张网卡的IP地址作为发布地址。不会选择 通配符地址、回环地址或广播地址

具体IP地址 - 与监听地址一致

* 具体IP地址 与发布地址一致

* "{网卡名}" 指定网卡名对应的IP,注意需要加上引号和括号

Spring Cloud

Spring Cloud使用服务注册,需要在项目中增加如下依赖:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-servicecomb-discovery</artifactId>

</dependency>

如果项目已经直接或者间接包含这个依赖,则无需添加。Spring Cloud包含如表6-3所 示配置项,这些配置项的值影响在服务中心注册的基本信息,以及微服务和服务中心 之间的交互,比如心跳等。和服务注册有关的信息,需要在“bootstrap.yml”配置。

6-3 Spring Cloud 常用配置项

配置项 含义 缺省

备注

spring.cloud.servicecomb.discover

y.appName 所属应用 defau

lt - spring.cloud.servicecomb.discover

y.serviceName 微服务名称 - 如果没有,使用 spring.application.n ame

spring.cloud.servicecomb.discover

y.version 微服务版本 - -

server.env 环境 - production,

development等 spring.cloud.servicecomb.discover

y.enabled 是否启用服务

注册发现 true - spring.cloud.servicecomb.discover

y.address 注册中心地址 - 集群地址使用“,”分

隔 spring.cloud.servicecomb.discover

y.watch 是否开启

watch模式 true -

开发指南 6 使用微服务引擎功能

(32)

配置项 含义 缺省 值

备注

spring.cloud.servicecomb.discover

y.healthCheckInterval 发送心跳的时

间间隔(秒) 10 - spring.cloud.servicecomb.discover

y.datacenter.name 数据中心名称 - - spring.cloud.servicecomb.discover

y.datacenter.region 数据中心区域 - - spring.cloud.servicecomb.discover

y.datacenter.availableZone 数据中心可用

区 - -

spring.cloud.servicecomb.discover

y.allowCrossApp 是否支持跨应

用调用 false 服务端配置,表示允 许不同应用下的客户 端发现自己

Dubbo

Dubbo使用服务注册,需要在项目中增加如下依赖:

<dependency>

<groupId>com.huaweicloud.dubbo-servicecomb</groupId>

<artifactId>dubbo-servicecomb-service-center</artifactId>

</dependency>

如果项目已经直接或者间接包含这个依赖,则无需添加。Dubbo ServiceComb包含如 表6-4所示配置项,这些配置项的值影响在服务中心注册的基本信息,以及微服务和服 务中心之间的交互,比如心跳等。和服务注册有关的信息,需要在

“dubbo.properties”配置。

6-4 Dubbo 常用配置项

配置项 含义 缺省值 备注

dubbo.servicecomb.service

.application 所属应 用

default -

dubbo.servicecomb.service

.name 微服务

名称

defaultMicroser viceName - dubbo.servicecomb.service

.version 微服务

版本

1.0.0.0 -

dubbo.servicecomb.service

.environment 环境 - production,

development等 dubbo.servicecomb.registr

y.address 注册中

心地址 - 集群地址使用“,”分隔

dubbo.servicecomb.ssl.ena

bled 是否启

用SSL false 如果服务中心是SSL,

需要设置为true

开发指南 6 使用微服务引擎功能

(33)

6.2 使用配置中心

6.2.1 配置中心概述

配置中心用来管理微服务应用的配置。微服务连接配置中心,能够从配置中心获取配 置信息及其变化。配置中心还是其他微服务管控功能的核心部件,比如服务治理规则 的下发,也是通过配置中心实现的。

微服务引擎支持的配置中心有:kie。

本章节介绍不同微服务开发框架使用配置中心的一些开发细节,包括如何配置依赖、

连接配置中心有关的配置项等,并简单的介绍微服务应用中如何读取配置和响应配置 变化。

微服务引擎使用kie作为配置中心。微服务默认会读取配置中心应用配置、服务配置、

自定义配置。应用配置指环境、应用和微服务相同的配置;服务配置指环境、应用、

微服务名称和微服务相同的配置。微服务可以在配置文件中指定一个特定的label及 label值,自定义配置指label及label值与微服务相同的配置。

简单的场景,可以使用应用级配置和服务级配置。应用级配置被该应用下的所有微服 务共享,是公共配置;服务级配置只对具体微服务生效,是独享配置。

复杂的场景,可以通过使用customLabel和customLabelValue来定义配置。例如某些 配置,是对所有应用共享的,那么就可以使用这个机制。在配置文件增加如下配置

(以Spring Cloud为例):

spring:

cloud:

servicecomb:

config:

kie:

customLabel: public# 默认值是public

customLabelValue: default # 默认值是空字符串

只要配置项带有public标签,并且标签值为default,这些配置项就会对该微服务生 效。

1. 把配置中心当成数据库的一个表tbl_configurations,key是主键,每个label都是 属性。

2. 客户端会根据如下3个条件查询配置:

– 自定义配置

select * from tbl_configurations where

customLabel=customLabelValue & match=false – 应用级配置

select * from tbl_configurations where app=demo_app &

environment=demo_environment & match=true – 服务级配置

select * from tbl_configurations where app=demo_app &

environment=demo_environment & service=demo_service &

match=true

其中,match为true的时候,表示有且只有条件里面指定的属性;match为false的 时候,表示除了条件里面的属性,允许有其他的属性。还可以给标签app指定多个

开发指南 6 使用微服务引擎功能

(34)

应用,或者给标签service指定多个服务,这样配置项就可以对多个服务和应用生 效,非常灵活。

微服务引擎的TEXT、XML等类型,SDK会简单的当成key-value对使用;YAML和 Properties类型, SDK会解析内容,应用程序将内容作为实际的应用程序配置项。比 如:

类型:TEXT

key: cse.examples.hello value: World

应用程序会发现1个配置项: cse.examples.hello = World。

类型:YAML

key: cse.examples.hello value: |

cse:

key1: value1 key2: value2

应用程序会发现2个配置项: cse.key1 = value1和cse.key2 = value2。

6.2.2 Java Chassis 使用配置中心

Java Chassis使用以kie命名的配置中心,需要在项目中增加如下依赖:

<dependency>

<groupId>org.apache.servicecomb</groupId>

<artifactId>config-kie</artifactId>

</dependency>

如果项目已经直接或者间接包含如上依赖,则无需添加。Java Chassis包含如表6-5所 示配置项,这些配置项的值指定了微服务在配置中心的身份,以及微服务和配置中心 之间的交互。

6-5 Java Chassis 常用配置项

配置项 含义 缺省值 备注

servicecomb.service.ap

plication 所属应用 default -

servicecomb.service.na

me 微服务名称 defaultMicros

ervice - servicecomb.service.ver

sion 微服务版本 1.0.0.0 -

servicecomb.service.env

ironment 环境 - production,

development 等

servicecomb.kie.server

Uri kie访问地址,格式为

http(s)://{ip}:{port},

以“,”分隔多个地址

- kie

servicecomb.kie.enable

LongPolling 长轮询(Long

Polling)模式是否开启 true kie

开发指南 6 使用微服务引擎功能

(35)

配置项 含义 缺省值 备注 servicecomb.kie.firstRef

reshInterval 首次刷新配置项的时间

间隔,单位为毫秒 3000 kie servicecomb.kie.refresh

_interval 刷新配置项的时间间

隔,单位为毫秒 3000 kie

servicecomb.kie.domai

nName 应用的租户名称 default kie

Java Chassis有多种方式可以读取动态配置,第一种是使用archaius API,例子如下:

DynamicDoubleProperty myprop = DynamicPropertyFactory.getInstance() .getDoubleProperty("trace.handler.sampler.percent", 0.1);

archaius API支持callback处理配置变更:

myprop.addCallback(new Runnable() { public void run() {

// 当配置项的值变化时,该回调方法会被调用

System.out.println("trace.handler.sampler.percent is changed!");

} });

第二种方式是使用Java Chassis提供的配置注入机制,使用这种方式能够非常简单的处 理复杂配置,和配置优先级,例子如下:

@InjectProperties(prefix = "jaxrstest.jaxrsclient") public class Configuration {

/*

* 方法的 prefix 属性值 "override" 会覆盖标注在类定义的 @InjectProperties * 注解的 prefix 属性值。

*

* keys属性可以为一个字符串数组,下标越小优先级越高。

*

* 这里会按照如下顺序的属性名称查找配置属性,直到找到已被配置的配置属性,则停止查找:

* 1) jaxrstest.jaxrsclient.override.high * 2) jaxrstest.jaxrsclient.override.low *

* 测试用例:

* jaxrstest.jaxrsclient.override.high: hello high * jaxrstest.jaxrsclient.override.low: hello low * 预期:

* hello high */

@InjectProperty(prefix = "jaxrstest.jaxrsclient.override", keys = {"high", "low"}) public String strValue;

执行注入:

ConfigWithAnnotation config = SCBEngine.getInstance().getPriorityPropertyManager() .createConfigObject(Configuration.class,

"key", "k");

第三中方式在和Spring、Spring Boot集成的时候使用,可以按照Spring、Spring Boot 的原生方式读取配置,比如@Value、@ConfigurationProperties。Java Chassis将配置 层次应用于Spring Environment中,Spring和Spring Boot读取配置的方式,也能够读 取到microservice.yaml和动态配置的值。

开发指南 6 使用微服务引擎功能

(36)

有关Java Chassis读取配置的更多内容,请参考社区开发指南。

6.2.3 Spring Cloud 使用配置中心

Spring Cloud使用配置中心,需要在项目中增加如下依赖:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-config</artifactId>

</dependency>

如果项目已经直接或者间接包含这个依赖,则无需添加。Spring Cloud包含如表6-6所 示配置项,这些配置项的值指定了微服务在配置中心的身份,以及微服务和配置中心 之间的交互。

6-6 Spring Cloud 常用配置项

配置项 含义 缺省值 备注

spring.cloud.servicecomb.d

iscovery.appName 所属应用 default - spring.cloud.servicecomb.d

iscovery.serviceName 微服务名称 - 如果没有,使用 spring.application.

name spring.cloud.servicecomb.d

iscovery.version 微服务版本 - -

server.env 环境 - production,

development等 spring.cloud.servicecomb.c

onfig.enabled 是否启用动态配置 true - spring.cloud.servicecomb.c

onfig.serverType 配置中心类型 config-

center 需要设置为kie spring.cloud.servicecomb.c

onfig.serverAddr 访问地址,格式为 http(s)://{ip}:

{port},以“,”分隔 多个地址

- -

spring.cloud.servicecomb.c

onfig.fileSource 内容为yaml的配置 项列表,使用“,”

分割

- kie直接支持yaml 格式的配置项。

spring.cloud.servicecomb.c

onfig.watch.delay pull模式轮询时间间

隔(毫秒) 10000 kie spring.cloud.servicecomb.c

onfig.enableLongPolling 是否开启长轮询

(Long Polling) true kie spring.cloud.servicecomb.c

onfig.watch.pollingWaitTi meInSeconds

长轮询等待时间

(秒)

20 kie

开发指南 6 使用微服务引擎功能

(37)

接入配置中心以后,Spring Cloud应用可以采用@Value、@ConfigurationProperties 等标签的方式注入配置,也可以使用Environment读取配置,并且使用@RefreshScope 来支持配置的动态更新,详细内容请参考社区开发指南。

6.2.4 Dubbo 使用配置中心

Dubbo使用配置中心,需要在项目中增加如下依赖:

<dependency>

<groupId>com.huaweicloud.dubbo-servicecomb</groupId>

<artifactId>dubbo-servicecomb-config-center</artifactId>

</dependency>

如果项目已经直接或者间接包含这个依赖,则无需添加。Dubbo ServiceComb包含如 表6-7所示配置项,和配置中心有关的信息,需要在“dubbo.properties”配置。

6-7 Dubbo 常用配置项

配置项 含义 缺省值 备注

dubbo.servicecomb.service.

application 所属应用 default - dubbo.servicecomb.service.

name 微服务名称 defaultMicros erviceName - dubbo.servicecomb.service.

version 微服务版本 1.0.0.0 - dubbo.servicecomb.service.

environment 环境 - production,

development等 dubbo.servicecomb.config.

address 配置中心地

址 - 集群地址使用“,”

分割 dubbo.servicecomb.ssl.ena

bled 是否启用

SSL false 如果服务中心是 SSL,需要设置为 true

dubbo.servicecomb.config.t

ype 配置中心类

型 config-center 需要设置为kie

接入配置中心以后,可以采用Spring、Spring Boot原生的方式读取配置,比如

@Value、@ConfigurationProperties等标签的方式注入配置,也可以使用

Environment读取配置,其中使用Environment读取配置能够获取到变化的配置值。详 细内容请参考社区开发指南。

6.3 使用服务治理

6.3.1 服务治理概述

服务治理是一个非常宽泛的概念,一般指独立于业务逻辑之外,给系统提供一些可靠 运行的系统保障措施。针对微服务场景下的常用故障模式,提供的保障措施包括:

开发指南 6 使用微服务引擎功能

數據

表 6-1 Java Chassis 常用配置项 配置项 含义 缺省值 备注 servicecomb.service.ap plication 所属应用 default  -servicecomb.service.na me 微服务名称 defaultMicroservice  -servicecomb.service.ve rsion 微服务版本 1.0.0.0  -servicecomb.service.en vironment 环境 - production、 developmen t等 servic
表 6-2 注册的实例地址生效规则 监听地址 发布地址 注册的实例地址 127.0.0.1 - 127.0.0.1 0.0.0.0 - 指定选取一张网卡的IP地址作为发布地址。不会选择 通配符地址、回环地址或广播地址 具体IP地址 - 与监听地址一致 * 具体IP地址 与发布地址一致 * &#34;{网卡名}&#34; 指定网卡名对应的IP,注意需要加上引号和括号 Spring Cloud Spring Cloud使用服务注册,需要在项目中增加如下依赖: &lt;dependency&gt;    &lt;
表 6-8 环境变量 环境变量 说明 spring_cloud_servicecomb_credentials_account_na me 结合用户实际值配置。 spring_cloud_servicecomb_credentials_account_pa ssword 结合用户实际值配置。 说明 用户密码password默认为 明文存储,无法保证安 全。建议您对密码进行加 密存储,请参考自定义实 现password的加密存储算 法。 Java Chassis 微服务组件配置安全认证帐号名和密码 ● 配置文

參考文獻

相關文件

三、重機械操作職類技能檢定術科測驗:推土機引擎馬力 70HP 以上;挖掘機規格 0.4M 3 以上標準挖斗容量及引擎馬力 80HP 以上;裝載機標準鏟斗容量 1.2M 3 及引擎馬力

[r]

5/8 主持人簽 署的同意書版本為 2.0 版、日期為 4/28。但 5/15 協同指 持人代簽的為 1.2 版、日期為 3/18。到底哪一份為最新

依身障者個別需求及職能,109 年截至 6 月底止提供一般性就業服務計推介就業 9,956 人、支持性就業服務計推介就業 1,249 人及推動辦理身心障礙者職務再

[r]

[r]

Two distinct real roots are computed by the Müller’s Method with different initial points... Thank you for

200kW PAFC power plant built by UTC Fuel Cells.. The Solar