华为云用户手册

  • 用户组概述 多个用户加入一个“用户组”形成用户群组,通过对用户组授权可对用户进行批量授权,具体的操作请参见新建访问控制策略并关联用户和资源账户。 仅系统管理员admin或拥有“用户”模块权限用户,可管理用户组,包括新建用户组、维护用户组成员,管理用户组信息、删除用户组等。 用户组与部门挂钩,不属于个人,当前登录用户新建的用户组默认放在登录用户部门下,不支持修改部门,上级部门有用户组权限的用户可以查看下级部门的所有用户组信息,反之不能,同级之间的用户组都能查看。 上级部门管理员向下级部门用户组添加用户时,可将上级部门的用户添加到下级部门用户组。 下级部门拥有“用户”模块管理权限的用户,查看用户组详情时,只能查看到用户组内上级部门用户成员列表,不能查看上级部门用户的详情信息。 下级部门拥有“用户”模块管理权限的用户,将当前用户组中的上级部门成员移除后,不能再添加移除的上级部门用户。 一个用户可加入多个用户组。 父主题: 用户组管理
  • 批量导出主机资源 在“主机管理”页面,勾选需要导出的主机资源。 若不勾选,默认导出全部主机资源。 右上角单击,弹出导出主机资源确认窗口。 设置加密密码,将导出文件加密。 输入当前用户的密码,确保导出数据安全。 可选择csv或Excel导出格式。 单击“确认”,任务创建成功,单击“去下载中心”查看打包进度为100%时,单击“操作”列的“下载”,下载文件到本地,打开本地文件,即可查看导出的主机资源信息。
  • 账户组概述 多个资源账户加入一个“账户组”形成账户群组,通过对账户组授权可对资源账户进行批量授权、批量账户验证。 仅系统管理员admin或拥有“账户组”管理权限用户,可管理账户组,包括新建账户组、维护账户组资源,管理账户组信息、删除账户组等。 账户组与部门挂钩,不属于个人。当前登录用户新建的账户组默认放在登录用户部门下,不支持修改部门。上级部门拥有“账户组”管理权限用户可查看下级部门的所有账户组信息,反之不能,同级之间的账户组可相互查看。 上级部门管理员为下级部门账户组添加资源账户时,可将上级部门的资源账户添加到下级部门的账户组,但是下级部门拥有“账户组”管理权限用户操作账户组时,只能查看资源账户列表,不能查看上级部门资源账户的详情信息。 下级部门拥有“账户组”管理权限用户将当前账户组中的上级部门资源账户移除后,将不能添加移除的上级部门资源账户。 一个资源账户可加入多个账户组。 父主题: 账户组
  • 角色概述 用户所关联的角色,赋予用户不同系统操作访问权限。 堡垒机 系统仅admin拥有自定义角色和修改角色的权限。 缺省情况下,系统中的默认角色包括部门管理员、策略管理员、审计管理员和运维员。默认角色不可删除,但可修改默认角色的权限范围。 表1 系统默认角色说明 参数 说明 部门管理员 部门的运维管理员,主要负责堡垒机系统的管理。除用户管理和角色管理模块之外,部门管理员拥有其他全部模块的配置权限。 策略管理员 用户权限策略管理员,负责主机运维的权限策略管理。主要负责策略权限的配置,拥有用户组管理、资源组管理和访问策略管理等模块的配置权限。 审计管理员 运维结果审计管理员,查询管理系统审计数据。主要负责查阅和管理系统的审计数据,拥有实时会话、历史会话和系统日志等模块的配置权限。 运维员 访问系统的普通用户和操作人员。主要负责资源的运维,拥有主机运维、应用运维和工单授权管理的权限。 父主题: 用户角色管理
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的IaaS、PaaS和SaaS类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的IaaS、PaaS和SaaS类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • IAM 身份认证 用户访问KVS的方式有多种,包括KVS控制台、API、SDK,无论访问方式封装成何种形式,其本质都是通过KVS提供的REST风格的API接口进行请求。 KVS的接口支持认证请求。经过认证的请求总是需要包含一个签名值,该签名值以请求者的访问密钥(AK/SK)作为加密因子,结合请求体携带的特定信息计算而成。通过访问密钥(AK/SK)认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份。关于访问密钥的详细介绍及获取方式,请参见访问密钥(AK/SK)。
  • 存储仓简介 存储仓,简称仓,是KVS中存储和检索任意规模数据的单位。用户可以根据自己的业务系统划分,创建不同的仓。 KVS自顶向下按照仓、表、KV的结构存储数据,仓中包含至少1个或多个表,表中包含至少1个或多个KV。例如,用一张表记录某个部门所有员工的信息,每一个仓就代表一个部门。 图1 存储仓简介 KVS云服务支持创建存储仓,查询存储仓及详细信息。 表1 KVS云服务管理控制台支持的存储仓相关功能 功能 描述 创建存储仓 在KVS管理控制台创建存储仓,同时创建一个表并指定索引。 查询存储仓列表 在KVS管理控制台查看存储仓列表。 查询存储仓详细信息 查看存储仓的详情。 父主题: 存储仓管理
  • 表简介 表是用来存储键值数据(Key-Value,简称KV)的集合,归属于某个仓。 用户可以在一个仓中创建至少1个或多个表,用来储存键值数据。例如,用某个仓记录公司内所有员工的信息,那么可以用这个仓中的每一个表记录每一个部门内所有员工的信息。 图1 表简介 KVS云服务支持创建表,查询所有表及详细信息。 表1 KVS云服务支持的表相关功能 功能 描述 创建表 在指定存储仓创建表,同时指定索引。 查询表 在指定存储仓查询所有表。 查询表详细信息 在指定存储仓查看某个表的详情 父主题: 表管理
  • 为什么专属主机上可用资源大于E CS 所需资源,但是无法创建成功? 专属主机通常对应多个NUMA,控制台上显示的专属主机可用资源是多个NUMA可用资源的总和。 为了保证性能,部分ECS规格不支持跨NUMA部署,当专属主机单NUMA资源不足时,会导致创建失败。 在专属主机创建ECS规格时: 如果其中一个NUMA的剩余资源大于等于待创建的ECS规格,ECS将创建成功。 如果每个NUMA的剩余资源均小于待创建的ECS规格,ECS将创建失败。 例如,专属主机的可用资源为10 vCPUs、20 GiB,分散在2个NUMA上,创建8 vCPUs、16 GiB的ECS规格会失败,但创建4 vCPUs、8 GiB的ECS规格会成功。 图1 专属主机可用资源示例 父主题: 专属主机类
  • 为什么创建云服务器失败? 在专属主机资源上创建云服务器失败,可能由以下原因造成: 您所选择的云服务器规格不在您已有的专属主机支持范围内。 各类型专属主机支持的云服务器规格请参见概述。 您的专属主机资源不足,无法创建您所选择的云服务器规格。 您可以查看专属主机的剩余vCPU和内存数量是否满足您所选择的云服务器规格。如果资源不足,您需要申请新的专属主机资源,或删除当前专属主机上的部分云服务器。 父主题: 云服务器类
  • 专属主机与专属云的区别? 场景方面 专属云可以配套专属分布式存储、专属企业存储、专属裸金属服务器等专属服务,提供完整的资源隔离方案。 专属主机则只能提供计算隔离主机,使用更灵活,适合对计算资源隔离、使用灵活性有要求的客户。 功能方面 专属云需要独立开通专属云账号,专属云资源和公共ECS属于不同VPC,虚拟机不能相互迁移。 专属主机上创建的虚拟机和公共ECS属于同一VPC,虚拟机可以相互冷迁移。 父主题: 专属主机类
  • 专属主机与裸金属服务器的区别? 专属主机与裸金属服务器都有物理隔离、单租户专属使用的特点。两者的最大区别: 专属主机:获取主机的资源独享权,实际发放的资源依然是ECS实例。 裸金属服务器:获取一台物理机的使用权,未提供虚拟化平台,可以直接使用物理机资源。 图1 专属主机与裸金属服务器对比 表1 专属主机与裸金属服务器对比 对比项 专属主机 裸金属服务器 是否提供虚拟化 是 否 使用方式 发放多台ECS实例使用 按照整台服务器使用 支持规格 专属主机对应物理服务器的规格,以及所支持的ECS对应规格 裸金属服务器特定规格 支持镜像 ECS对应镜像 裸金属服务器特定镜像 父主题: 专属主机类
  • 组件纳管的依赖版本 spring-boot-starter-huawei和spring-boot-huawei-dependencies(jdk8优选本版本):2.1.10.JDK8-RELEASE。 spring-boot-starter-huawei和spring-boot-huawei-dependencies(jdk17优选版本):2.1.14.JDK17-RELEASE。 优选版本依赖详情如下: spring-boot-starter-huawei 表3 spring-boot-starter-huawei版本依赖 包名groupId:artifactId jdk8版本 jdk17版本 备注 org.springframework:spring-core 5.3.31 6.0.19 - org.springframework:spring-beans 5.3.31 6.0.19 - org.springframework:spring-expression 5.3.31 6.0.19 - org.springframework:spring-aop 5.3.31 6.0.19 - org.springframework:spring-context 5.3.31 6.0.19 - org.springframework:spring-web 5.3.31 6.0.19 - org.springframework:spring-webmvc 5.3.31 6.0.19 - org.springframework:spring-aspects 5.3.31 6.0.19 - org.springframework:spring-boot 5.3.31 6.0.19 - org.springframework:spring-boot-autoconfigure 5.3.31 6.0.19 - jakarta.annotation:jakarta.annotation-api 2.1.1 2.1.1 - org.yaml:snakeyaml 2.2 2.0 - com.fasterxml.jackson.core:jackson-databind 2.15.2 2.15.2 - org.projectlombok:lombok 1.18.26 1.18.28 - org.apache.commons:commons-lang3 3.13.0 3.13.0 - com.google.guava:guava 32.1.2-jre 32.1.2-jre - org.slf4j:slf4j-api 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-api 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-core 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-slf4j-impl 2.18.0 2.20.0 - org.apache.httpcomponents:httpclient 4.5.14 - jdk8版本存在 org.springdoc:springdoc-openapi-ui 1.6.9 - jdk8版本存在 org.springdoc:springdoc-openapi-starter-webmvc-ui - 2.2.0 jdk17版本存在 org.apache.httpcomponents.client5:httpclient5 - 5.2.1 jdk17版本存在 io.swagger.core.v3:swagger-core 2.2.8 2.2.8 - io.swagger:swagger-core 1.6.6 1.6.6 - org.springframework:spring-test 5.3.31 6.0.19 - org.springframework.boot:spring-boot-test 2.7.18 3.1.6 - spring-boot-huawei-dependencies 表4 spring-boot-huawei-dependencies版本依赖 包名groupId:artifactId jdk8版本 jdk17版本 备注 org.springframework:spring-framework-bom 5.3.31 6.0.19 - org.springframework.security:spring-security-bom 5.8.8 6.2.3 - org.springframework.boot:spring-boot-dependencies 2.7.18 3.1.6 - io.netty:netty-bom 4.1.109.Final 4.1.109.Final - io.swagger:swagger-core 1.6.6 1.6.6 - io.swagger:swagger-models 1.6.6 1.6.6 - io.swagger:swagger-annotations 1.6.6 1.6.6 - io.swagger.core.v3:swagger-core 2.2.8 2.2.8 - org.springdoc:springdoc-openapi-ui 1.6.9 - jdk8版本存在 org.springdoc:springdoc-openapi-starter-webmvc-ui - 2.2.0 jdk17版本存在 org.springdoc:springdoc-openapi-starter-webflux-ui - 2.2.0 jdk17版本存在 org.yaml:snakeyaml 2.2 2.0 - org.projectlombok:lombok 1.18.26 1.18.28 - org.apache.commons:commons-lang3 3.13.0 3.13.0 - org.apache.commons:commons-pool2 2.11.1 2.11.1 - org.apache.commons:commons-text 1.10.0 1.10.0 - com.google.guava:guava 32.1.2-jre 32.1.2-jre - org.apache.httpcomponents:httpclient 4.5.14 - jdk8版本存在 org.apache.httpcomponents.client5:httpclient5 - 5.2.1 jdk17版本存在 org.apache.httpcomponents:httpmime 4.5.14 - jdk8版本存在 org.apache.logging.log4j:log4j-api 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-core 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-slf4j-impl 2.18.0 2.20.0 - org.apache.logging.log4j:log4j-to-slf4j 2.18.0 2.20.0 - io.micrometer:micrometer-registry-prometheus 1.10.1 1.10.1 - org.json:json 20231013 20231013 - com.google.code.gson:gson 2.9.1 2.10.1 - com.fasterxml.jackson.core:jackson-core 2.15.2 2.15.2 - com.fasterxml.jackson.core:jackson-annotations 2.15.2 2.15.2 - com.fasterxml.jackson.core:jackson-databind 2.15.2 2.15.2 - com.fasterxml.jackson.dataformat:jackson-dataformat-yaml 2.15.2 2.15.2 - com.fasterxml.jackson.datatype:jackson-datatype-jsr310 2.15.2 2.15.2 - com.fasterxml.jackson.datatype:jackson-datatype-jdk8 2.15.2 2.15.2 - com.fasterxml.jackson.module:jackson-module-afterburner 2.15.2 2.15.2 - com.fasterxml.jackson.module:jackson-module-parameter-names- 2.15.2 2.15.2 - com.fasterxml.jackson.dataformat:jackson-dataformat-csv 2.15.2 2.15.2 - com.fasterxml.jackson.dataformat:jackson-dataformat-smile 2.15.2 2.15.2 - com.fasterxml.jackson.dataformat:jackson-dataformat-xml 2.15.2 2.15.2 - com.fasterxml.jackson.dataformat:jackson-dataformat-cbor 2.15.2 2.15.2 - com.fasterxml.jackson.module:jackson-module-jaxb-annotations 2.15.2 2.15.2 - net.bytebuddy:byte-buddy 1.12.10 1.14.6 - net.bytebuddy:byte-buddy-agent 1.12.10 1.14.6 - com.alibaba:fastjson 1.2.83 2.0.39 - com.squareup.okhttp3:okhttp 4.11.0 4.11.0 - com.squareup.okio:okio 3.4.0 3.4.0 - org.apache.zookeeper:zookeeper 3.7.1 3.9.2 - org.mariadb.jdbc:mariadb-java-client 3.0.5 3.0.5 - com.alibaba:druid 1.2.10 1.2.18 - com.alibaba:druid-spring-boot-starter 1.2.9 1.2.15 - jaxen:jaxen 2.0.0 2.0.0 - org.mybatis:mybatis-spring 2.0.7 2.1.0 - org.mybatis.spring.boot:mybatis-spring-boot-starter 2.2.2 3.0.1 - org.bouncycastle:bcpkix-jdk18on 1.75 1.75 - com.github.ben-manes.caffeine:caffeine 2.9.3 3.1.8 - com.huaweicloud:esdk-obs-java 3.23.3 3.23.3 - io.projectreactor:reactor-core 3.4.18 3.5.11 - org.antlr:antlr4-runtime 4.9.2 4.13.1 - jakarta.annotation:jakarta.annotation-api 2.1.1 2.1.1 - io.prometheus:simpleclient_common 0.16.0 0.16.0 - io.prometheus:simpleclient 0.16.0 0.16.0 - io.prometheus:simpleclient_tracer_otel 0.16.0 0.16.0 - io.prometheus:simpleclient_tracer_otel_agent 0.16.0 0.16.0 -
  • 解决方案 clientcontorl是依托于spring的aop来实现的。当注解不生效时,用户需要排查以下两个问题: 版本使用是否正确,如果用户使用的是jdk17、clientcontrol必须使用jdk17的版本,jdk17的版本在版本号中会有JDK17的标识,如 2.1.6.JDK17-RELEASE,不带JDK17的均为jdk8的版本。 是否在同一个类中调用了使用@clientcontrol注解的方法, 如果存在这种情况,spring的aop是不会生效的,所以clientcontrol功能不生效。此时用户需要修改代码,将调用到@clientcontrol注解的方法放到其他类中。
  • 解决方案 使用devspore-dcs连接redis。 devspore-dcs会默认创建一个bean名称为createMultiZoneClient的redisConnectionFactory,如果用户没有手动修改这个bean名称的话可以不配置devspore.client-control.caches.xxx.redis-connection-factory-bean-name属性,clientcontrol会自动去寻找createMultiZoneClient的bean。 没有使用devspore-dcs。 此时用户需要手动设置devspore.client-control.caches.xxx.redis-connection-factory-bean-name属性,如果不设置,clientcontrol会自动去寻找createMultiZoneClient的bean,因为没有使用devspore-dcs,所以并不存在bean名称为createMultiZoneClient的redisConnectionFactory,此时就会报如上的图的异常。
  • swagger支持https和认证的方式 支持https 在启动类中加入注解: @OpenAPIDefinition( servers = { @Server( url = "https://coralgeneratorsvr.{Environment}-szv-kunpeng-camp.tools.huawei.com/coralgeneratorsvr", #替换成自己的服务地址 variables = { @ServerVariable( name = "Environment",# 参数定义,可使用{param}取其中的值 allowableValues = {"alpha", "beta", "gamma", "prod"},#参数取值范围 defaultValue = "alpha"), }, description = "CoralGeneratorSvr Environmental Urls"), @Server(url = "http://localhost:8080/coralgeneratorsvr", description = "Local Dev Url") }, info = # 服务描述信息 @Info( title = "CoralGeneratorSvr", version = "v1", description = "Coral Generator Server", contact = @Contact(name = "x00464738", email = "xiaoweimin@huawei.com")))@SpringBootApplication@ComponentScan(value = {"com.huawei.coral", "com.huawei.coral.coralgeneratorsvr", "com.huawei.clouddragon.devuc.sdk.*", "com.huawei.clouddragon.apigateway_client"})@MapperScan("com.huawei.coral.coralgeneratorsvr.mapper")@Slf4jpublic class Application extends SpringBootServletInitializer {...} 支持服务接口认证 新增一个配置类,在配置类中加入以下配置: /** * 在线文档接口认证配置 * * @since 2021-08-12 */@Configuration(proxyBeanMethods = false)public class SwaggerAuthConfig { @Bean public OpenAPI springShopOpenAPI() { return new OpenAPI() .components(new Components() .addSecuritySchemes("xAuthToken", new SecurityScheme() .type(SecurityScheme.Type.APIKEY) //请求认证类型 .name("x-auth-token") //参数名称 .description("sso proxy token: x-auth-token") //API key描述 .in(SecurityScheme.In.HEADER))) //设置API key的存放位置(发送请求时请求头中会带上x-auth-token) .security(Collections.singletonList(new SecurityRequirement().addList("xAuthToken"))) //SecurityRequirement中配置的名称需要与SecuritySchema的名称匹配 .info(new Info().title("AuthDemo") .description("AuthDemo接口文档") .version("0.2.0-RELEASE")); }} 完成以上配置后,在线文档中会多出一个认证按钮: 图1 认证 在未输入认证凭证时,直接访问需要认证的接口会返回需要认证的信息: 图2 返回认证信息 输入认证凭证: 图3 输入认证凭证 图4 认证完成 输入认证凭证后,再次调用接口时会将认证信息以配置的方式同请求内容一同发送。 图5 发送认证信息
  • 源码基本结构说明 spring-boot-huawei内部模块及简介: spring-boot-huawei | |-spring-boot-huawei-dependencies # 该模块为内部模块的依赖模块,主要功能是提供依赖包的版本管理,其他模块的父模块均直接或间接使用此模块,如无特殊,spring-boot-huawei使用统一版本的jar包。 | |-spring-boot-huawei-parent # 该模块以dependencies模块为父模块,使用其提供的依赖版本管理,本身提供一些插件定义及插件版本管理,作为本项目中其他模块的父模块使用 | |-spring-boot-starter-huawei # 核心组件,该组件提供一个基于spring-boot的web项目最基本的起步依赖
  • 解决方案 此报错是因为使用了自定义缓存key的功能,注解中配置了@clientcontrol(rules='xxxx', key='xxxxxx')此处key的解析使用的是标准的spring的spel表达式的解析,如果报了如上错误,需要自行排查el表达式的写法是否正确。 如果实在排查不出来el表达式的问题,用户也可以选择使用自定义类的方式去生成指定的缓存key值@ClientControl(rule = "retryTest", policy = CacheOrder.CACHEFIRST, cacheManagerName = "cacheCaffine",keyGenerator = "myKeyGenerator"),其中,keyGenerator属性配置的就是自定义缓存key生成器的bean名称。 如果用户没有必须自定义缓存key的需求,可以不配置这两个属性,clientcontrol会自动生成缓存key的,生成的规则是:全路径限定名+方法名+参数的sha256,clientcontrol提供了一个公共方法来获取这个key值。ClientControlCommonHandle.getCacheKey(final String className, final String methodName, final Object[] args), 此处是伪代码,方法中传入的是全路径限定类名、方法名和参数集合。
  • 解决方案 在没有使用自定义降级方法和缓存的时候,原方法如果调用失败会抛出方法原始出的错误。 如果使用了自定义降级方法。 熔断前:自定义降级方法中添加的最后一个异常的参数封装的就是原方法的异常。 熔断后:最后一个异常参数会固定抛出“io.github.resilience4j.circuitbreaker.CallNotPermittedException: CircuitBreaker 'xxxxx#xxxxx' is OPEN and does not permit further calls”异常。 可以通过这个异常参数找到熔断的原因,如果日志过大,找不到熔断前的日志,可以对异常参数类型做个判断,将CallNotPermittedException异常和其他异常区别打印,这样更方便定位问题。如下所示: public String myFallBack(long sleepTime, Throwable throwable) {if (throwable instanceof CallNotPermittedException) {log.info("clientcontrol call not permited exception ", throwable);} else {log.info("service exception " , throwable);}return "xxxx";} 熔断器的状态变化会打印相应的日志,日志中关键信息如下: 关闭到打开(此时处于熔断状态,方法不可访问):changed state from CLOSED to OPEN。 打开到半开(方法可以访问):changed state from OPEN to HALF_OPEN。 半开到打开(此时处于熔断状态,方法不可访问):changed state from HALF_OPEN to OPEN。 半开到关闭(方法恢复正常,可以访问):changed state from HALF_OPEN to CLOSED。 如果日志中找不到原方法的报错信息,只能找到“io.github.resilience4j.circuitbreaker.CallNotPermittedException: CircuitBreaker 'xxxxx#xxxxx' is OPEN and does not permit further calls”这种日志,需要排查clientcontrol的配置文件,看是否开启了慢调用熔断,如果开启了慢调用熔断,会出现原方法没有报出异常,也被熔断的现象。慢调用的配置参数如下: devspore: client-control: rules: xxx: fallback: #慢调用时间(超过即为慢调用,单位s,默认60S) slow-call-duration-threshold: 60 #慢调用熔断比例(慢调用数量达到比例则熔断,默认100等于关闭状态) slow-call-rate-threshold: 100
  • 组件说明 为支持及简化项目依赖,spring-boot-starter-huawei中配置了基于springboot的web项目常用的基本功能的依赖支持,目前包含以下常用依赖: 基本的spring环境依赖:使用spring-boot-starter完成对基本的spring环境集成,主要包含spring-core,spring-beans,spring-expression,spring-aop,spring-context,spring-aspects,spring-boot,spring-boot-autoconfigure等。 web项目的依赖:包含web开发所需的spring-web,spring-webmvc模块,处理常用格式json数据所需的jackson-databind等。 服务在线文档生成工具:swagger(v2,v3),springdoc-openapi-ui(jdk8),springdoc-openapi-starter-webmvc-ui(jdk17),有了这些工具后可以为服务接口字段生成openapi在线文档。 yaml文件解析用到的snakeyaml,注解:jakarta.annotation-api。 常用工具类的依赖:lombok,commons-lang,guava。 spring-boot-starter-huawei中默认使用log4j2日志框架,需要根据实际情况确定是否使用该日志框架。
  • 问题描述 运行时报错Request processing failed; nested exception is io.github.resilience4j.circuitbreaker.CallNotPermittedException: CircuitBreaker 'com.huaweicloud.testclientcontrol.serivce.impl.UserServiceImpl#testFallBack' is OPEN and does not permit further calls。
  • 解决方案 当程序报出这个错误时,说明使用了熔断功能,且此时方法处于熔断状态(熔断器状态为OPEN)。当访问熔断状态的方法时就会抛出这个异常。 熔断器的状态变化时,clientcontrol会打印出如下的日志: [com.huaweicloud.devspore.clientcontrol.core.ClientControlRegistryComponent] - [ClientControlCircuitBreakerSignal:2024-06-14T10:12:59.268797400+08:00[Asia/Shanghai]: CircuitBreaker 'com.huaweicloud.testclientcontrol.serivce.impl.UserServiceImpl#testFallBack' changed state from CLOSED to OPEN] 熔断器有三个状态: CLOSED:这个状态下,方法可以正常访问。 HALF_OPEN:这个状态下,方法可以正常访问。 OPEN:这个状态下,方法不可以访问。
  • redis故障后clientcontrol的处理逻辑是什么 当clientcontrol的缓存类型配置为redis时,此时clientcontrol相当于是redis的使用方,redis自身的配置(超时时间,重试等)还是服务自己设置的,跟clientcontrol没有关系。 clientcontrol中有两个配置参数cache-consecutive-exception-times和cache-interruption-duration ,具体查看:4.5.5CacheConfig数据结构说明。 cache-consecutive-exception-times:记录缓存连续失败的次数上限(此上限是针对配置的一个缓存策略,devspore.client-control.caches.xxx)(读失败,写失败都会累加这个次数,当调用读成功或写成功一次后,会将这个参数置0),当达到这个上限后clientcontrol会关闭缓存的功能,既不读也不写。 cache-interruption-duration:此参数是控制关闭缓存的时间,当达到缓存连续失败的次数上限后,clientcontrol会关闭缓存功能这个参数配置的时间,时间到了以后会开启缓存功能。 父主题: 常见问题
  • 缓存优先 clientcontrol提供了一种名为缓存优先的功能。当使用缓存优先功能时,在执行目标业务代码时,优先会查询缓存,如果缓存存在则返回缓存结果,如果缓存不存在则执行目标业务代码。 当使用缓存优先时clientcontrol的处理逻辑如下: 读取缓存,判断是否是性能缓存。 如果是性能缓存,直接将性能缓存当结果返回。 如果不是性能缓存,执行原方法。 如果原方法执行成功,更新缓存,返回结果。 如果原方法执行失败,返回获取的缓存。 如果一开始没有获取到缓存,会直接将原方法执行失败的异常返回。 性能缓存是clientcontrol自带的一个概念,对应配置参数中的performance-ttl。例如一个缓存的有效时长是10s,那性能缓存可以配置为3s,代表一个逻辑概念,标识缓存的结果离更新缓存的时间更近,不会对实际的缓存产生影响。 具体使用方式如下: pom文件添加依赖。 配置文件,参考下面配置样例。 devspore: client-control: caches: test: ttl: 60000 #此处配置的是缓存的有效时长 performance-ttl: 30000 #此处配置的是一个性能缓存,时长一般低于ttl, 当缓存的时间小于性能缓存时,clientcontrol会直接把性能缓存作为方法返回值返回 type: redis 此处配置的是 缓存类型, 支持 redis/caffine 指定具体缓存类型后,用户需要手动引入相关的依赖 maximum-size: 60000 redis-connection-factory-bean-name: redisConnectionFactory # 当使用redis的时候,需要将redis的连接工厂的bean的名称配置在这里 rules: fallbackTest: # 此处配置的是一个别名,用户可自定义,具体使用地方是在注解上 time-limit: enable: false retry: enable: false fallback: # 默认开启 enable: true # 慢调用时间(超过即为慢调用,单位s,默认60S) slow-call-duration-threshold: 30 # 慢调用熔断比例(慢调用数量达到比例则熔断,默认100等于关闭状态) slow-call-rate-threshold: 100 #失败百分比(触发断路器,默认50%) failure-rate-threshold: 50 #滑动窗口类型(COUNT_BASED/TIME_BASED,数量/时间,默认时间) sliding-window-type: COUNT_BASED #滑动窗口大小(默认100,数量:次/时间:秒) sliding-window-size: 5 #滑动窗口内最小请求数(默认100) 必须满足这个要求,才会触发断路器 不满足,不管失败率多少都不会触发 minimum-number-of-calls: 5 #进入半开所需时间(默认60s,单位ms) wait-duration-in-open-state: 10000 #半开状态允许通过的请求数量,默认10个请求(失败比例达到设置的百分比,断路器继续打开,再次等待进入半开)注:不大于滑动窗口内最小请求数,相对较小的配置优先起作用,所以如果大于滑动窗口最小请求,起作用的就是滑动窗口最小请求数了 permitted-number-of-calls-in-half-open-state: 5 目标方法上添加@ClientControl注解,且policy属性设置为CacheOrder.CACHEFIRST,rule属性选择配置文件中自己定义的rules名称(本示例中使用fallbackTest),cacheManagerName属性选择配置文件中自己定义的caches的名称(本示例使用test)。 @ClientControl(rule = "fallbackTest", policy = CacheOrder.CACHEFIRST, cacheManagerName = "test")public String testClientControlJiangji(Integer id) {int i = 1 / id;return new User(id, "vn", 12).toString();} 父主题: 使用熔断降级功能
  • 注意事项 当使用超时功能时,当前方法不能运行在异步线程中,异步会导致超时功能失效。 触发重试的机制是方法抛出异常,不管是什么异常,只要抛出了异常方法就会重试,如果抛出某些异常的时候不想重试,则可以参考配置中的ignore-exceptions,没有的时候此参数可以不配置。 配置中的policy中在提供的两种方式中选择一个即可,当使用Randomized的时候,配置randomized-wait-factor。 当使用Exponential的时候配置exponential-backoff-multiplier。
  • 认证配置 在配置文件中加入devspore相关配置,如下: devspore: auth: exclude-paths: GET:/test # 不需要认证的路径 in-header: true #token是否在header中,默认true token-name: X-Auth-Token #token在header中的参数名,inHeader设置为true时生效,默认X-Auth-Token oneaccess: ignore-ssl: true #是否校验oneaccess证书 jwt: jwk-set-uri: https://arvymzmajv.huaweicloudoneaccess.com/api/v1/oauth2/keys #对应的oneaccessjwk地址 issuer-uri: https://arvymzmajv.huaweicloudoneaccess.com/api/v1/oauth2 #签发机构 arvymzmajv.huaweicloudoneaccess.com为本文示例中使用的 域名 ,实际应用中请换成自己对应的域名。 添加完后启动项目即可开启对token的认证。
  • clientcontrol中ttl和performanceTtl的具体含义是什么 Cache配置有两个ttl,一个ttl(可靠性缓存)和一个performanceTtl(性能缓存)。 存在误解这两个为是两个缓存,其实缓存只有一个。 实际给缓存设置的缓存过期时间为ttl配置,缓存存入的时候,连同当前时间一同存入了,取出的时候就可以取出缓存存入时间,通过计算与performanceTtl进行比较得出是否是性能缓存。 父主题: 常见问题
  • 用户自定义拦截插件使用 Entry插件 继承抽象类Processor,实现doProcess接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent;import com.huawei.devspore.horizon.exception.PluginException;import com.huawei.devspore.horizon.processor.Processor;import org.springframework.stereotype.Component;/** * custom request plugin */@Componentpublic class CustomRequestPlugin extends Processor { @Override public boolean doProcess(DataEvent dataEvent) throws PluginException { // do your code ........ return true; }} 配置文件中多个插件以","分隔,多个插件按配置顺序执行。 evspore: horizon: processors: customRequestPlugin Exit插件 实现Observer接口中observer接口,可定义多个插件。 插件均需注册为bean。 import com.huawei.devspore.horizon.DataEvent;import com.huawei.devspore.horizon.exception.PluginException;import com.huawei.devspore.horizon.subscribe.Observer;import org.springframework.stereotype.Component;/** * custom response plugin */@Componentpublic class CustomResponsePlugin implements Observer { @Override public void observe(DataEvent dataEvent) throws PluginException { // do your code ...... }} 配置文件中多个插件以","分隔,多个插件按配置顺序执行。 devspore: horizon: observers: customResponsePlugin 父主题: 扩展拦截开发指南
  • 配置说明 表1 公共参数说明 参数名称 是否必选 默认值 类型 说明 devspore.security.debug 否 true String 是否为debug模式,debug模式会打印加解密调试信息。 devspore.security.provider 否 com.huaweicloud.devspore.security.crypto.DevSporeSecurityExtFactory String 自动配置时使用的加解密提供方具体工程完整类路径。 表2 jasypt参数 参数名称 是否必选 默认值 类型 说明 devspore.security.provider.jasypt.masterkey.path 是 /devsporesecurity String jasypt masterkey路径。 父主题: devspore-security使用指南
  • 配置说明 表1 参数配置说明 参数名称 是否必选 功能 devspore.auth.in-header false token是否在header中,默认true。 devspore.auth.token-name false token在header中的参数名,inHeader设置为true时生效,默认"X-Auth-Token"。 devspore.auth.oneaccess.ignore-ssl true 是否校验oneaccess证书。 devspore.auth.oneaccess.auth-patterns false 需要认证的路径。 devspore.auth.oneaccess.jwt.jwk-set-uri true 对应的oneaccessjwk地址。 devspore.auth.oneaccess.jwt.issuer-uri true 签发机构。 devspore.auth.oneaccess.jwt.jws-algorithm false 签名算法,默认RS256。 父主题: devspore-auth-oneaccess使用指南
共100000条
提示

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