华为云用户手册

  • 初始化SLB 业务自行解析好配置,作为Properties入参传入。 GraySDKManager.getInstance().init(Properties params, Object lbsServiceFactory)。 表1 参数说明 参数 说明 传空说明 Properties params 将Properties对象传入 将不能使用Gray SDK功能。 不能传空。 Object lbsServiceFactory lbsServiceFactory对象传入 不能使用LBS国家省市IP库功能。 在业务不使用LBS国家省市灰度时,可传空。 业务指定好Properties路径,properties文件路径传入。 GraySDKManager.getInstance().initWithPropertiesPath (String path, Object lbsServiceFactory)。 表2 参数说明 参数 说明 传空说明 String path 将Properties文件全路径传入。 传空时,会按照以下顺序尝试补参: 尝试以系统参数指定的路径找文件System.getProperty(“graysdk.properties.file_path”)。 尝试从classpath的文件系统路径下找graysdk.properties或者graysdk-config.properties。 Object lbsServiceFactory LbsServiceFactory对象传入。 不能使用LBS国家省市ip库功能。 在业务不使用LBS国家省市灰度时,可传空。
  • 服务消费端集成示例 照常通过 CS E调用服务提供者,无需额外编码。 例如,参考CSE的消费端开发,从消费端调用服务提供端(demoB),无需额外修改。 package com.service.demo.controller; import org.springframework.stereotype.Component; import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder; import org.springframework.web.client.RestTemplate; @Component publicclass DemoDelegate { public String helloworld(String name){ if ( null == name || "".equals(name)) { return "thename is empty, no need send to beckend MS"; } RestTemplate restTemplate = RestTemplateBuilder.create(); String rslt = ""; String qryStr = ""; qryStr = "name=" + name; // to call another MicroService, name is demoB. path:/demo,interface:helloworld rslt = restTemplate .getForObject("cse://demoB/demo/helloworld?" + qryStr, String.class); return rslt; } }
  • 初始化Cloud Map 使用NUWA框架,只要增加对应配置,框架即会完成Cloud Map的初始化。 这些配置需要写到nuwa框架可以读到的文件里,一般是nuwa-xxx.properties,nuwa-xxx.yaml文件。因为Cloud Map的Client全局单例,所以可以直接通过NuwaMapClientFactory.getNuwaMapClient()获取client对象,也可以在Spring上下文中获取NuwaMapClient的Bean。
  • 常见问题 Domain not registered或Service not registered 领域或微服务没有进行注册,请根据STS 2.0业务接入指南的指导自行注册领域或微服务。 connect timed out或read timed out 它有两种原因,connect timed out或read timed out: 可以在sts.properties中添加超时配置,单位为毫秒: sts.connect.timeout=10000 //遇到 connect timed outsts.socket.timeout=10000 //遇到 read timed out Encrypt Permission Denied 这是因为管理台上注册微服务时,默认将微服务注册成了NORMAL。只有角色为PLATFORM的微服务才有权限调用加密接口。 fail to init session key fail to init session key fail to get master key from sts 这是因为集成了STS 1.0,也就是集成了sts-cse-sdk,从STS 1.0的服务器获取master key失败。因为STS 1.0的服务器需要业务自己去搭建,在没有搭建的情况下,当然会获取失败。 如果已经搭建,检查业务的yaml文件中配置的environment参数和STS 1.0微服务中的environment是否一致,如果不一致则修改成一致。 mac check in GCM failed 这个错误的原因就是密钥和密文不匹配导致无法解密。需要确认业务配置文件中的密文是从哪里来的? 通过IaC由配置中心下发: 检查IaC代码中配置的敏感配置项ID中的服务或微服务名是否属于该运行的微服务。 服务级:Service/{ServiceName}/{SensitiveName}/{tag} 微服务级:MicroService/{ServiceName}/{MicroServiceName}/{SensitiveName}/{tag} 通过StsAgent加密后,手工配置: 检查加密的时候使用的服务级别servicekek还是微服务级别kek,和密文中的级别是否一致,服务名和微服务名是否和该运行的微服务一致?加密得到密文的STS环境和运行的STS环境是否一致?例如测试环境加密的密文是不能在生产环境解密。 # 使用微服务kek加密 # /opt/huawei/apps/wisesecurity/stsagent/stsagent encrypt -s ServiceName -m MicroServiceName -x -h 10.33.102.162:8080 # 使用服务servicekek加密 # /opt/huawei/apps/wisesecurity/stsagent/stsagent encrypt -s ServiceName -m MicroServiceName -ts ServiceName -x -h 10.33.102.162:8080 中间件的口令解密 业务集成了Cloud Map对接中间件,业务不用关心口令解密的问题。 业务使用sts agent加密明文口令后配置到相应管理台。参考2,看加密用的密钥和代码中解密的密钥是否对应(服务级还是微服务级kek),以及加密时使用的微服务名和服务名是否一致。 不同微服务的证书不可混用,业务使用自己微服务的证书及配置文件进行SDK的初始化,解密自己微服务的配置。 Undefined provider local 当创建AESCryptor时,如果不用@指定KeyProvider,那么它会默认调用local KeyProvider。在使用kek或servicekek时,要指定KeyProvider为@sts。 //错误 AESCryptor cryptor = new AESCryptor.Builder().withKey("kek").withAlg(CryptoAlg.AES_GCM).build(); //正确 AESCryptor cryptor = new AESCryptor.Builder().withKey("kek@sts").withAlg(CryptoAlg.AES_GCM).build(); 申请证书时Make sure haveged is running步骤或try active service步骤报错。 这是因为机器上没有启动haveged服务。haveged是一个随机数的熵的提供方,它可以解决在某些情况下,系统熵过低的问题。 规避办法:在部署步骤前面加上sudo步骤;或者,到机器上,手动执行service haveged start命令,启动haveged服务。 解决方案:在申请证书步骤前添加sudo和shell-exec步骤,确保haveged服务为启动状态。 sudo systemctl enable haveged.service && sudo systemctl start haveged.service非EulerOS可以使用sudo service haveged start命令。 service ini config file not exists 这是因为STS在初始化时,找不到初始化配置文件(ini 文件)或者微服务名称.sts.p12证书文件不存在。该文件是在部署微服务过程中,通过stsagent申请证书时生成的,默认路径在/opt/huawei/certs/{serviceName}/{microServiceName},业务也可以通过相应参数来修改。 解决办法: 首先确认配置的STS参数: 通过配置文件配置的,查看sts/sts.properties 文件,检查sts.config.path配置的文件是否存在。 通过NUWA配置文件,检查microservice.yaml文件中nuwa.security.sts.configPath配置的文件是否存在。 nuwa:security:sts:serverDomain: 10.33.102.109:8080configPath: /opt/huawei/certs/{ServiceName}/{MicroServiceName}/{MicroServiceName}.ini 通过Java Bean方式配置的,也就是通过类似以下代码初始化,检查sts.config.path配置的文件是否存在 Properties properties = new Properties();properties.setProperty("sts.server.domain", "10.33.102.162:8080");properties.setProperty("sts.config.path", "D:/Test/ConsumerService/ConsumerMicroService1/ConsumerMicroService1.ini");StsKeyApi.initWith(properties); 如果配置的是相对路径,则必须是相对于resource目录的路径。如果是在IDEA中运行使用,则检查target下是否有该文件,如果没有则重新compiler,IDEA最终是从target下获取resource文件。 另外,请确认部署过程中证书申请的步骤在业务安装和启动流程之前,如果业务先启动,之后才进行证书的申请,配置文件还未生成,也会出现找不到配置文件的问题。 若不存在,则要参考STS 2.0业务接入指南申请证书。如果配置的文件路径不是stsagent生成的默认路径,则需要手工将** /opt/huawei/certs/{ServiceName}/{MicroServiceName}/**拷贝到相应的路径下。 Fail to derive key with master key 这是因为STS没有初始化,就去调用了获取认证凭据的接口。 解决办法:检查是否调用了StsKeyApi.init()或StsKeyApi.initWith(properties)。 如何解密微服务证书的口令 微服务证书的口令使用本地随机的根密钥和工作密钥加密,口令明文使用StsKeyStoreUtil.getKeyStoreValue()进行解密。 Access Permission Denied 微服务集成STS SDK,获取相应微服务的Credentials时报如下错误Reqeust sts server fail, Request Token form xxxx&yyyy failed, Access Permission Denied。 这是由于provider没有该微服务配置相应的ACL(Access Control List),导致没有权限获取访问该provider的credentials。 Invalid api name STS Agent执行的时候报Invalid api name,这是由于 IaC 中使用了STS Agent高版本能力,但主机上STS Agent版本过低并且IaC中没有强制升级STS Agent导致的。通过IaC或手动更新STS Agent,使用1.1.5.100及之前的部署包时请打开force_install开关。 微服务有测试,镜像,海外,灰度等不同的环境,STS管理台如何管理这些敏感配置项? STS管理台在不同站点是分开部署。同一站点下假如想区分不同的场景,例如生产和灰度,开发,测试和镜像,则可以使用敏感配置项标签区分。 STS管理台敏感配置项最大长度是多少? 5000个字符。 本地缓存的STS KEK,ServiceKEK以及认证凭据是如何保护? key.json由本地随机生成的rootkey和workkey加密保护,kek.json由STS KEK保护。 加密算法采用AES GCM。 部署过程report certificate to cms报错,提示"An unknown error occurred when report certificates!"。 首先检查/opt/huawei/certs/{service}/{microservice}下stscerttool.log中是否有错误信息。 若日志中出现异常提示[Errno -2] Name or service not known,请使用以下命令确认系统版本是否为欧拉OS 2.9 [EulerOS release 2.0 (SP9)]: lsb_release -a 检查主机hostname是否超过64个字符,如果是的话,修改主机名。 主机存在无法解析出主机IP的问题,参考如下步骤检查: 检查/etc/nsswitch.conf中是否包含hosts项,且对应配置包含files或myhostname。 若添加配置files,检查/etc/hosts,添加当前主机的IP映射[host_ip] [hostname],例如:10.33.100.100 host-10-33-100-100。 若添加配置myhostname,通常无需进行其他修改。 运行以下命令检查是否有其他异常。 hostname -i python -c "import socket; print(socket.gethostbyname(socket.getfqdn(socket.gethostname())))" 如何手工注册微服务 使用IaC部署在WiseDBA上创建数据库实例,报没有注册STS的错误,如果业务还没有接入STS,可以在STS管理台进行手工注册该微服务。 如何将服务器上生成的STS微服务证书信息迁移到window机器上调试。 将服务器上/opt/huawei/certs/{serviceName}/{microServiceName}目录下的所有问题打包下载到本机。修改{microServiceName}.ini 文件中 a_file,b_file ,c_file,d_file 的路径,该路径支持绝对路径或相对路径(相对于ini文件的路径,一般为{microServiceName}/apple/a)。修改sts.properties中 sts.config.path为实际的ini文件的路径。 missed = in sensitive string value / missed value in sensitive string 解密敏感配置项的时候报missed = in sensitive string value错误,这是由于敏感配置密文格式不正确。敏感配置项密文格式如下: kek加密密文格式: ENC(key=kek, value=xxxx) servicekek加密密文格式: ENC(key=servicekek, value=xxxx) Unable to execute refresh credentials function 微服务日志STS SDK抛出如下异常,这是由于对端开启了STS的微服务认证,MapConnectCoreService&MapConnectCoCreateService未给该微服务配置ACL。 解决方案:让对端给该微服务配置ACL。 com.huawei.wisesecurity.sts.sdk.exception.StsException: Unable to execute refresh credentials function for service.identity=MapConnectCoreService&MapConnectCoCreateService STS对JDK/JRE有什么要求? 建议使用最新的1.8版本JDK/JRE。 invalid common name STS SDK抛出如下异常: InvocationException: code=403;msg=errorCode=1002;errorMessage=invalid common name: AppGalleryPromotionUserService 这是由于CSE的yaml文件中配置的微服务名和使用的STS微服务证书中的微服务名不一致导致的,使用部署时采用STSAgent自动签发的证书,里面是标准的PBI服务名和微服务名。 STS管理台敏感配置修改后如何刷新到微服务的配置文件中? 敏感配置项是通过配置服务发布到微服务配置文件中。在STS管理台修改后,需要在部署服务上重新发布修改的配置项。 在配置中心找到该配置项 重新发布该配置项: fail to parser work key json file 检查work_key.json格式是否正确,文件中的description,mac字段需要删除。 Odd number of characters 业务加载工作密钥文件的时候报Odd number of characters异常,这是由于在STS管理台配置的hex编码的密钥明文的少或多了一个char。Hex编码字符串必须是偶数个字符。 fail to get master key from sts 业务集成了STS 1.0的认证能力,需要从STS 1.0 Server上获取主密钥失败。STS 1.0 Server是部署在业务集群中,注册到业务同一个注册中心: 在相应注册中心上检查WiseSecurity:SecurityTokenService微服务是否存在,如果不存在,则找到相应部署机器启动该微服务。 检查业务的yaml文件中配置的environment参数和STS 1.0微服务中的environment是否一致,如果不一致则修改成一致。 missed header x-sts-token / x-sts-session provider通过STS SDK认证请求时,从http消息中无法获取到相应的STS认证header信息。 直接用postman访问,会缺少相应的认证凭据而失败。因此如果测试需要,可以将微服务的STS认证放通开关打开。放通开关配置在sts.properties配置文件中的sts.bypass.enable参数:true表示放通,false表示不放通,默认是不放通。 consumer侧开启了放通,但provider侧没有放通。 sts.properties文件中未配置sts.config.path指定STS微服务证书加载路径(如果是IDEA中执行的,检查一下target下是否存在sts.properties)。STS SDK默认加载sts/sts.properties,业务也可以通过jvm启动参数sts.properties修改该文件的路径。 如果是通过NUWA初始化STS的,检查yaml文件中是否有配置nuwa.security.sts.configPath。 nuwa: security: sts: serverDomain: 10.33.102.109:8080 configPath: /opt/huawei/certs/{ServiceName}/{MicroServiceName}/{MicroServiceName}.ini 如果通过Java Bean方式初始化,检查是否有设置sts.config.path配置项。 Properties properties = new Properties(); properties.setProperty("sts.server.domain", "10.33.102.162:8080"); properties.setProperty("sts.config.path", "D:/Test/ConsumerService/ConsumerMicroService1/ConsumerMicroService1.ini"); StsKeyApi.initWith(properties); STS管理台录入敏感配置项使用什么加密算法加密。 敏感配置项采用STS给业务分配的KeK/ServiceKek(256位)使用AES/GCM加密。 Unable to resolve non-exist credentials StsCseClientFilter中发送请求时报如下异常和错误,这是由于无法获取到访问该微服务凭据抛出异常。检查服务初始化STS SDK时是否有异常(查看 logback或log4j中配置的com.huawei.wisesecurity.sts包路径的日志文件)。 invalid certificate 回答:确认服务名和证书名是一致的,证书是重新下发的,再判断业务连接的STS server1.0上的证书是否有修改。 注意:需要确定当前环境连接的STS服务器是正确的,可以确认性能环境所对应的注册中心,然后在这个注册中心的portal界面上查找并确认STS 1.0是哪台服务器注册上去的。 get sts token --Timestamp out of range/Timestamp is more earlier or later 这是由于STS开启防重放攻击(和STS服务器之间时间差小于5分钟),检查业务服务器的时间是否正确。 configId can not be blank 部署服务或者NUWARutime获取敏感配置项时,请求要获取的敏感配置项的列表中有值为空。 管理台上服务下无法选到相应的微服务。 在安全管理台上配置敏感配置项、证书时,服务下只显示已经在相应环境下在STS上注册过的微服务。需要让站点的业务SRE在运维管理台上进行微服务注册。 KeyStoreException: empty private key or certificate 出现该提示,是因为主机上STS实例证书(位于/opt/huawei/certs/{服务}/{微服务}/下)并不完整,很可能是由于前一次部署过程中出错导致,请检查该证书是否有效,可使用以下命令对证书进行检查。 /opt/huawei/apps/wisesecurity/stsagent/stsagent check -s {服务} -m {微服务} 如果提示校验错误信息,请重新执行stsagent-install部署步骤进行证书的重新申请。 Unable to find SecretKey version=0 业务代码中使用STS密钥解密非STS加密的数据导致的错误。 Micro service xxx&yyy not registered 微服务没有在STS管理台进行注册。 Fail to read service info from keystore STS SDK初始化是需要从STS的身份证书jks文件中读取服务和微服务信息,加载jks文件的时候异常了。一般是该jks文件有异常。 SDK会根据service ini文件中的subject的CN项作为微服务名读取证书文件 {微服务名}.sts.p12 [cert] subject = C=CN,O=Huawei,OU=Huawei CBG Cloud MicroService,CN=SecurityTokenServiceDemoSelfConsumer ip = 127.0.0.1 invalid timestamp 检查业务主机的时间和标准时间差异是否超过5分钟。 timeout awaiting response headers sts-go-sdk内的 ResponseHeaderTimeout参数值设置过小,目前默认为100,在初始化时传入参数“sts.responseHeader.timeout”修改该值大小。 not an SSL/TLS record client和server两边SSL不一致:client通过HTTP访问,但Server是提供的HTTPS的服务。 如果是 tomcat + NUWA/CSE,tomcat最终对外提供是http还是https是由tomcat的配置文件决定的,NUWA/CSE的yaml文件中定义的只是注册到注册中心告诉对端提供的是 http还是https。 Some config items not found iac provider在plan阶段会去校验敏感配置项是否存在于STS管理台,如果没有录入敏感配置项,或者敏感配置项的坐标不正确,则报此错,需要业务自己检查坐标是否正确。 fail to get provider ** credentials consumer集成sts-go-sdk在获取provider端访问凭据的时候失败,需要在provider端配置ACL,管理台录入ACL后,需等十分钟才生效。 启动时如果发现类似错误: either 'jasypt.encryptor.password', one of ['jasypt.encryptor.private-key-string', 'jasypt.encryptor.private-key-location'] for asymmetric encryption, or one of ['jasypt.encryptor.gcm-secret-key-string', 'jasypt.encryptor.gcm-secret-key-location', 'jasypt.encryptor.gcm-secret-key-password'] for AES/GCM encryption must be provided for Password-based or Asymmetric encryption 那么可以按两个方向排查: 检查启动类是否添加@EnableStsEncryptableProperties ,需要添加该注解,才能初始化StsStringEncryptor对象。 如果已经添加,那可能是触发自动解密的地方距离启动太早,导致 spring context 初始化还未完成,不能获取到StsStringEncryptor对象。例如,Eureka应用的bootstrap.yml中如果包含敏感配置项,就会报这个错,需要将敏感配置项移到其他配置文件中,即可解决。 Unable to refresh credentials for service SecurityTokenService&SecurityTokenMicroService 该问题是STS初始化的时候,从kek.json或者keys.json获取本地密钥失败,导致无法从STS-Server获取凭据。 解决方法:找到密钥的缓存地址,/${HOME}/.sts/服务名/微服务名/kek.json,删除kek.json和keys.json文件,重新启动即可。 父主题: STS SDK
  • 初始化STS 在启动类中增加注解@EnableStsAutoInitialization(value = "sts.properties"),注解的含义是启动STS自动初始化,其中value是指定STS的配置文件路径。 使用注解时,是通过加装Bean的方式初始化STS和解密敏感配置项,由于Bean的加载顺序不固定,有时会出现使用STS解密的代码被加载了,初始化STS的Bean还没有被加载。如果出现这种情况,可以在使用STS的类方法上添加如下方法解决此问题: @Import(value = {StsEncryptablePropertiesConfiguration.class})
  • 配置STS 在微服务的ClassPath下增加添加配置文件sts/sts.properties(该文件路径可以通过环境变量sts.properties进行修改),内容为: sts.server.domain=10.202.251.196:8080 #STS服务器的地址 sts.config.path=/opt/huawei/certs/xxxService/xxxMicroService/xxxMicroService.ini #STS微服务证书路径,基础设施即代码(Infrastructure as Code,简称IaC)会将证书放在固定路径下,格式为/opt/huawei/certs/服务名/微服务名/微服务名.ini
  • logger名称和描述 Rainbow SDK需要配置的logger名称和描述如表1所示。 表1 logger说明 Logger名称 建议日志级别 说明 com.huawei.rainbow com.huawei.wisecloud.jetcd INFO Rainbow SDK运行日志,建议打开,方便定位问题。 com.huawei.dcg.rainbow.switch INFO Rainbow双云状态大数据日志。 com.huawei.dcg.rainbow.access INFO Rainbow SDK接入大数据日志。
  • 异常3:NodeDataSource can't init或者init dataSource Params Error! 异常:com.huawei.rainbow.exception.RainbowRunTimeException: NodeDataSource can't init: dsKey=xx.xx.xx.xx:3306@mysql或者Caused by: com.huawei.rainbow.exception.DbNodeInitialException: [ConfigError]init dataSource Params Error! config is 原因1:大部分就是密码为null或者空串。 定位: 请认真检查密码配置是否解密成功。通过搜索Rainbow日志关键字:Password is Empty! 请检查解密类是否继承了基类com.huawei.rainbow.utils.PasswordCoder。 搜索rainbow日志关键字:DbNodeConfig Check,查看是否校验失败。 解决:使用正确的密码。 原因2:如果用的是cloud+stsl连的高斯数据库,原因是没有STS的调用步骤。 通过搜索rainbow日志关键字:Password is Empty! 解决:正确调用STS。 原因3:本地连接报这个错。 解决: 先把配置信息删除,给Schema创建新的业务账号,新增配置信息。 把config目录下的rainbow.properties里面的ETCD地址和密码注释掉。
  • 异常2:Access denied for user 异常:java.sql.SQLException: Access denied for user 'xxxx'@'xx.xx.xx.xx' (using password: YES) 原因1:密码错误或者服务器分配权限错误。现网问题定位占了60%左右。数据库登录密码是否使用了明文! 定位: 请认真检查密码配置,检查MySQL权限是否分配正确。 通过dump内存,搜索相关关键字判断解密字符为需要的字符串。 解决:使用正确的密码。 原因2:或者是业务账号配错。 解决:删除SDK配置信息,重新在wisedba新建业务账号,在SDK配置重新录入配置信息。
  • 异常5:Key not found, cause 或者 item lose 异常:类似 Key not found, cause: /Dbmonitor/status/DB/Services/xzjDB/xzjDB/activeDBs/mysql222, at index: 211562166 或者: item lose 关键字 或者:Caused by: com.huawei.rainbow.exception.ParameterErrorException: xxxx can not be null, length need bigger than 0
  • 异常6:datasource.properties没有更新,或者没有拉取到某个数据库配置 原因1:ETCD地址是否配错。 原因2:检查是否配置了DBDataSource的懒加载模式,只有当用数据库的时候才初始化,拉取配置。 定位: 检查ETCD地址是否配错,查看日志是否有ETCD连接相关的错误。如果有,请修改重启。 检查是否配置了DBDataSource的懒加载模式、只有当用数据库的时候才初始化,拉取配置。如果是,触发一次数据库操作,看下是否更新。
  • 异常4:dbGroupKey can not be null 异常:ParameterErrorException: dbGroupKey can not be null, length need bigger than 0(或者类似参数异常错误)。 原因1:dbGroupKey为null或者空串。 必填字段会做参数校验,请检查相关参数是否设置。 原因2:确定是否在rainbow.properties 中配置ETCD地址。 解决: 找到设置参数的地方,咨询核对配置的appName,dbGroupKey,dbName是否正确。
  • 配置Rainbow 修改Rainbow SDK配置,切换SDK数据源,新增Cloud Map配置、STS配置,配置如下: nuwa: sts: serverDomain: 10.33.102.162:8080 configPath: certs/WiseCloudNuwaService/WiseCloudNuwaCloudMapAdminService/WiseCloudNuwaCloudMapAdminService.ini enable: true cloudmap: serverAddr: http://10.33.113.125:8080 namespaceName: cn_dev_default rainbow: db0: datasource: beanName: rainbowDs dataSourceName: xxxx //与运维中心WiseDBA服务SDK配置界面的值保持一致 appName: xxx //业务的服务名 dbGroupKey: xxx //实例名称 dbName: xxxxx //Schema名称 connectionProperties: characterEncoding=utf8;connectTimeout=10000;socketTimeout=10000;autoReconnect=true;useUnicode=true;serverTimezone=Asia/Shanghai useSts: true mybatis: base-package: com.huawei.nuwa.map.demo.consumer.middleware.dao mapper-locations: classpath:mapper/rainbow/*.xml
  • 初始化Rainbow SDK 代码如下: package com.huawei.demo.serviceb.config; import javax.sql.DataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Import; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.support.TransactionTemplate; import com.huawei.nuwa.map.client.NuwaMapClient; import com.huawei.nuwa.map.spring.boot.autoconfigure.NuwaCloudMapAutoConfiguration; import com.huawei.rainbow.jdbc.DbGroupDataSource; import com.huawei.wisesecurity.sts.springboot.security.configuration.StsEncryptablePropertiesConfiguration; /** * Rainbow启动 */ @Configuration @Order(Ordered.HIGHEST_PRECEDENCE) @Import(value = {NuwaCloudMapAutoConfiguration.class, StsEncryptablePropertiesConfiguration.class}) public class ApplicationAutoConfig implements EnvironmentAware { private Environment environment; /** * Rainbow需要依赖STS和Cloud Map启动,创建dataSource * * @param client NuwaMapClient值对象 * @return DataSource 初始化完成的数据源数据源 */ @Bean @DependsOn({"stsBootStrap"}) public DataSource createDataSource(NuwaMapClient client) { DbGroupDataSource dataSource = new DbGroupDataSource(); dataSource.setUseSts(true); dataSource.setAppName(environment.getProperty("wiseDba.appName")); dataSource.setDbGroupKey(environment.getProperty("wiseDba.groupKey")); dataSource.setDbName(environment.getProperty("wiseDba.dbName")); dataSource.init(); return dataSource; } /** * 事务管理创建 * * @param dataSource 数据源 * @return DataSourceTransactionManager 事务管理 */ @Bean public DataSourceTransactionManager createTransaction(DataSource dataSource) { DataSourceTransactionManager transaction = new DataSourceTransactionManager(); transaction.setDataSource(dataSource); return transaction; } @Bean public JdbcTemplate createJdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean("sqlSessionFactoryBean") public SqlSessionFactoryBean createMybatisSqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); // 数据源配置项 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); // 允许jdbc自动生成主键 configuration.setUseGeneratedKeys(true); // 使用列标签代替列名 configuration.setUseColumnLabel(true); // 打开下划线命名自动转换为驼峰命名开关 configuration.setMapUnderscoreToCamelCase(true); sessionFactoryBean.setConfiguration(configuration); return sessionFactoryBean; } @Bean public TransactionTemplate createTransactionTemplate(DataSourceTransactionManager dataSourceTransactionManager) { TransactionTemplate template = new TransactionTemplate(); template.setTransactionManager(dataSourceTransactionManager); return template; } @Bean public MapperScannerConfigurer createMapperScannerConfigurer() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setBasePackage("com.huawei.demo"); configurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean"); return configurer; } @Override public void setEnvironment(Environment environment) { this.environment = environment;
  • 常见问题 SDK初始化失败 SDK初始化失败,graysdk的run和debug日志会打印初始化失败原因,一般原因有如下几种: ETCD服务器配置错误(检查conf/graysdk.properties文件中server配置是否正确)。 ETCD未启动或者网络原因不可用(检查网络以及ETCD是否正常)。 ETCD中不存在此微服务名称的灰度配置。 ETCD未启用用户名/密码认证方式,但是SDK配置了认证(检查conf/graysdk.properties文件是否配置了username)。 jsonRuleFilePath没有配置。 灰度规则匹配失败 调用SDK接口执行灰度规则匹配失败,一般原因有如下几种: 实际传入的参数和值,不满足配置的微服务灰度规则。 灰度开关关闭(检查conf/graysdk.properties文件graySwitch是否为1)。 灰度规则执行异常(检查graysdk的debug日志)。 联系灰度平台开发人员定位。 灰度参数的设置 消费端需要在CSE的invocation设置想要进行灰度的参数,有两种方法: 确定需要进行灰度的参数 ,在后端的接口中使用@RequestParam参数来指定。 业务直接在消费端设置参数,例如:ContextUtils.getInvocationContext().addContext("x-is-gray", "1")。 第一种方式直接在请求流量的URL中通过设置参数的值来标识灰度流量,第二种是业务在调用SDK之前改变invocation中参数的值来标识灰度。 后端灰度节点的判断 后端的节点在自己的microservice.yaml文件中设置参数描述(参照CSE开发网站)。 按照版本筛选灰度节点,需要在yaml中的service_description中先定义版本号,然后在管理台上选择按照版本进行灰度,填入定义的版本。 按照自定义参数筛选灰度节点,需要在yaml中的instance_description中先自定义灰度参数,并填入值,接着在管理台选择按照自定义参数进行灰度,填入自定义的参数。
  • 常见问题 表1 Cloud Map常见问题 问题 报错原因 解决办法 “code”:403,no permission to access 业务没有权限访问中间件资源 登录Cloud Map管理台查看资源的授权信息。 如果自身的服务或微服务不在授权范围内,则没有访问权限,需要确认注册中间件资源时所设置的授权信息(一般是集群所属的服务才有权限)。 sds报错no permission,在sds管理台新增SDK配置时没有填写正确的微服务名。 Rainbow使用共享服务报错no permission,需要将Rainbow资源在sdk管理台注册到自己的服务下,而不是其他服务下。 微服务不为*,则只有一个微服务有权限。如果需要改成*,需要在相应管理台同步配置时不要选微服务名。 “code”:404,resource is not exist 业务要找的资源不存在 先确认资源是否存在,登录Cloud Map管理台查找资源,如果不存在,参考开发指南注册资源。 如果资源确实存在,请检查资源的属性和业务配置属性是否一致,如namespace、服务名、集群名等。 debug查看调用Cloud Map接口的数据(如serviceName)是否正常。 共享服务的,请检查配置是否正确。 检查NUWA版本是否过低,建议3.0.5.101以上。 Too many connections 低版本asynchttpclient连接数超过设置最大值(默认为cpu核数,不超过4) 升级SDK版本号。 修改asynchttpclient连接数。 父主题: Cloud Map SDK
  • 初始化Cloud Map 在启动类中增加@EnableDiscoveryClient注解,同时在启动类中完成将RestTemplate放到spring容器中,后续微服务间调用就使用注册到spring容器中的RestTemplate,代码如下: package com.huawei.demo.servicea; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; import com.huawei.wisesecurity.sts.springboot.security.annotation.EnableStsAutoInitialization; @SpringBootApplication @EnableStsAutoInitialization(value = "application.properties") @EnableDiscoveryClient public class ServiceASpringbootApplication { public static void main(String[] args) { SpringApplication.run(ServiceASpringbootApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
  • 配置Cloud Map 在微服务的application.yaml配置文件中添加以下配置项: nuwa: cloudmap: read: cloudmap #使用Cloud Map方式进行微服务间通信 clusterName: clusterName-example #微服务注册到Cloud Map的集群 provider: cluster: clusterName-example #提供服务的其他同样被注册到Cloud Map的微服务集群名 serverAddr: http://10.34.32.243:80 #Cloud Map访问地址 version: 1.0.0.100 #微服务版本号 namespaceName: cn_dev_default #Cloud Map访问命名空间
  • 概述 Cloud Map SDK服务软件开发工具包是对服务发现(Cloud Map)服务提供的REST API进行的封装,以简化用户的开发工作。 Cloud Map是注册发现中心,主要用于注册发现微服务、中间件/数据库、一方/二方/三方服务,单体应用无需对接Cloud Map(微服务不使用任何中间件/数据库,也不依赖任何其他服务/微服务),用户直接调用Cloud Map SDK提供的接口函数即可实现使用Cloud Map服务业务能力的目的。 父主题: Cloud Map SDK
  • AI原生应用引擎SDK功能介绍 表5 AI原生应用引擎SDK功能矩阵 接口类型 接口名 函数名 Python 大模型相关接口 文本生成 ModelRouter.chat.completion.create √ 向量生成 ModelRouter.embeddings.create √ 文生图 ModelRouter.images.generate √ 图生文 ModelRouter.images.image2text √ 知识库相关接口 知识库查询 KnowledgeRetriever.retrieve √ Filter构造 KnowledgeFilterCondition. single_filter_condition √ Filter融合 KnowledgeFilterCondition. combine_filter_condition √ Order构造 KnowledgeSortCondition. single_order_condition √ Order融合 KnowledgeSortCondition. combine_order_condition √ Prompt相关接口 生成prompt模板 PromptTemplate.from_template √ 实例化prompt模板 PromptTemplate.format √ 应用相关接口 调用应用 ApplicationCenter.get_tools √
  • 运行时引擎SDK类型介绍 运行时引擎为开发者提供访问凭证管理服务(Access Credential Management Service,简称ACMS)、服务发现(NUWA Cloud Map,简称Cloud Map)、负载均衡(Software/Server Load Balancer,简称SLB)和数据库治理(WiseDBA)的SDK,方便开发者将运行时引擎的能力快速集成到自己的应用中。 表1 SDK列表 SDK分类 说明 编程语言 下载地址 参考文档 ACMS的SDK:STS SDK STS SDK(Security Token Service,简称STS)服务软件开发工具包是对访问凭据管理服务(ACMS)提供的REST API进行的封装,以简化用户的开发工作。用户直接调用SecurityTokenService SDK提供的接口函数即可实现使用ACMS业务能力的目的。 使用STS SDK即可使用运维中心ACMS的敏感配置项托管和微服务之间请求认证功能。 Java nuwa-open-sdk-1.1.0-20240204093135.zip 完整性校验nuwa-open-sdk-1.1.0-20240204093135.zip.sha256 下载包nuwa-open-sdk-1.1.0-20240204093135.zip中的文件介绍请参见表2。 STS SDK Cloud Map的SDK:Cloud Map SDK Cloud Map SDK服务软件开发工具包是对服务发现(Cloud Map)服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用Cloud Map SDK提供的接口函数即可实现使用Cloud Map服务业务能力的目的。 Java Cloud Map SDK SLB的SDK:Gray SDK Gray SDK负责业务的负载均衡,Nginx组件通过反向代理实现了业务的负载均衡,通过丰富的扩展功能,可以对HTTP消息定制丰富的控制策略。 使用Gray SDK即可使用运维中心负载均衡(SLB)的灰度管理功能。 Java Gray SDK WiseDBA的SDK:Rainbow SDK Rainbow SDK构建云原生DevOps全流程可信build-in的数据库治理解决方案。使用Rainbow SDK即可使用运维中心的数据库治理(WiseDBA)功能。 提供MySQL/Cassandra/ GaussDB /DRDS全流程设计、开发、发布、运维(管理、治理、诊断)方案。 可信build-in:过程可信,结果可信,接入安全(无人工接入密码),操作(资源高危操作)安全。 Java Rainbow SDK 表2 SDK jar包介绍 文件夹 SDK分类 对应的jar包 nuwa-cse-sdk:适用于基于NUWA框架且不使用spring boot的项目 STS SDK sts-key-sdk-1.1.17.109.jar sts-sdk-base-1.1.17.109.jar cloudsoa-security-1.1.13.100.jar Cloud Map SDK nuwa-cloudmap-config-servicecomb-1.0.12.100.jar nuwa-cloudmap-core-1.0.12.100.jar nuwa-cloudmap-registry-cse3-1.0.12.100.jar nuwa-cloudmap-registry-servicecomb-common-1.0.12.100.jar Gray SDK graysdk-core-1.4.14.500.jar graysdk-cse3-1.4.14.500.jar nuwa-apaas-graysdk-3.1.5.100.jar Rainbow SDK rainbow-proxy-1.2.18.102.jar gpaas-middleware-common-2.2.6.100.jar NUWA基础SDK nuwa-boot-container-3.1.5.100.jar nuwa-core-3.1.5.100.jar nuwa-cse-foundation-3.1.5.100.jar nuwa-share-libs-3.1.5.100.jar nuwa-tenant-sdk-3.1.5.100.jar spring-cloud-sdk:适用于基于Spring Cloud框架的项目 STS SDK sts-key-sdk-1.1.19.100.jar sts-sdk-base-1.1.19.100.jar sts-spring-boot-1.1.19.100.jar cloudsoa-security-1.1.14.101.jar Cloud Map SDK nuwa-cloudmap-core-1.0.12.100.jar nuwa-cloudmap-spring-boot-starter-1.0.12.100.jar spring-cloud-starter-cloudmap-discovery-1.0.12.100.jar Gray SDK 不支持 Rainbow SDK gpaas-jetcd-api-2.0.0.106.jar gpaas-jetcd-v2-2.0.0.106.jar gpaas-middleware-common-2.2.6.100.jar nuwa-gpaas-rainbowproxy-3.2.2.100.jar nuwa-rainbowproxy-spring-boot-starter-3.2.2.100.jar rainbow-api-1.2.18.201.jar rainbow-core-1.2.18.201.jar rainbow-core-drds-1.2.18.201.jar rainbow-core-gaussdb-1.2.18.201.jar rainbow-proxy-1.2.18.201.jar NUWA基础SDK nuwa-boot-container-3.2.2.100.jar nuwa-core-3.2.2.100.jar nuwa-core-spring-boot-starter-3.2.2.100.jar spring-cse-sdk:适用于基于NUWA框架且使用spring boot的项目 STS SDK sts-key-sdk-1.1.19.100.jar sts-sdk-base-1.1.19.100.jar sts-spring-boot-1.1.19.100.jar cloudsoa-security-1.1.14.101.jar Cloud Map SDK nuwa-cloudmap-config-servicecomb-1.0.12.100.jar nuwa-cloudmap-core-1.0.12.100.jar nuwa-cloudmap-registry-cse3-1.0.12.100.jar nuwa-cloudmap-registry-servicecomb-common-1.0.12.100.jar nuwa-cloudmap-spring-boot-starter-3.2.2.100.jar nuwa-gpaas-cloudmap-3.2.2.100.jar Gray SDK graysdk-core-1.4.14.500.jar graysdk-cse3-1.4.14.500.jar nuwa-apaas-graysdk-3.2.2.100.jar nuwa-graysdk-spring-boot-starter-3.2.2.100.jar Rainbow SDK nuwa-gpaas-rainbowproxy-3.2.2.100.jar nuwa-rainbowproxy-spring-boot-starter-3.2.2.100.jar rainbow-proxy-1.2.18.102.jar gpaas-middleware-common-2.2.6.100.jar NUWA基础SDK nuwa-boot-container-3.2.2.100.jar nuwa-core-3.2.2.100.jar nuwa-core-spring-boot-starter-3.2.2.100.jar nuwa-cse-foundation-3.2.2.100.jar nuwa-cse-foundation-spring-boot-starter-3.2.2.100.jar nuwa-tenant-sdk-3.2.2.100.jar tools:configparser为自定义参数解析工具,通过NUWA部署时,解析参数模板,将模板中的参数变量,替换为实际的配置项值,具体使用方式请参见使用configparser工具优化代码。 -
  • AI原生应用引擎SDK介绍 AI原生应用引擎面向开发者提供了一套搭建原生应用的Python SDK,包含了模型调用,知识获取,工具调用等功能。开发者可以使用SDK调用AI原生应用引擎的各种能力,快速构建大模型应用。 AI原生应用引擎SDK获取地址:wiseagent-dev-sdk-python。您也可以参考下载SDK获取AI原生应用引擎SDK并进行完整性校验。 AI原生应用引擎SDK参考文档:AI原生应用引擎SDK介绍。
  • 解密敏感配置 在微服务业务代码的application.yml文件中配置敏感配置项,样例如下: nuwa: security: config: sensitiveWords: spring.redis.password,org.app.protocol-login.oauth.clientSecret,org.app.jwt-key 启动敏感配置项自动解密。 在微服务的启动类中添加@EnableStsEncryptableProperties注解。
  • 更多操作 表2 相关操作 操作 说明 配置流控服务 单击流控服务列表中的服务名称,在流控服务详情页面新增资源、新增流控规则、新增黑白名单及熔断规则,具体介绍请参见在SLB中配置负载均衡OLC服务。 发布流控服务 单击流控服务列表操作列的“发布”,将OLC服务应用到SLB,具体介绍请参见在SLB中发布负载均衡OLC服务。 编辑流控服务 单击流控服务列表操作列的“编辑”,在弹出的编辑窗口,单击认证密钥后的“重置”,可以重置认证密钥。 删除流控服务 单击流控服务列表操作列的“删除”,在弹出的提示框中单击“确定”,即可删除服务。
  • 新增黑白名单 黑名单规则会直接流控满足规则的请求,白名单规则会放通满足规则的请求。 在流控服务详情页面,选择“黑白名单”页签,单击“新增黑白名单”。 配置黑白名单相关参数,参数说明如表6所示。配置完成后单击“保存”。 表6 新增黑白名单参数说明 参数 说明 资源名称 选择全局黑白名单或具体资源,全局黑白名单不限制微服务/接口,资源黑白名单则限制特定的微服务/接口。 参数名称 参数级规则的参数名。 字符长度0~50,可以由字母、数字、下划线、短横线、点组成,不能包含特殊字符,例:black_rule-001。 名单类型 白名单 黑名单 每个资源或全局黑白名单下,同一参数名称只支持添加黑白名单各一条。 开启黑白名单 选择是否开启黑白名单。 名单列表 黑白名单列表。如果存在多个,使用英文逗号分隔,不允许存在空格。 在弹出框中单击“确认”。
  • 新增流控规则 流控规则支持针对微服务/接口的资源流控、不区分微服务接口的全局参数流控和节点级动态流控规则。 在流控服务详情页面,选择“流控规则”页签,单击“新增流控规则”。 配置流控规则相关参数,配置完成后单击“保存”。 资源流控 表3 资源流控参数说明 参数 说明 限流控制类型 选择资源流控,针对微服务/接口资源进行流控。 资源名称 选择新增资源中创建的资源名称,与微服务/接口绑定,每个资源最多创建4条规则,规则的限流控制类型和是否集群流控不能重复。 流控类别 QPS:每秒速率流控。 配额:特定时间的请求阈值。 限流阈值 流控阈值,整个微服务/接口调用总量的阈值,如果请求总量超过该阈值,后续请求会被流控;0表示不流控。 禁用时间 当限流控制类型为QPS时,显示该参数。 流控后禁用时间内的所有请求不再判断请求量,直接全部流控。 允许的突增量 当限流控制类型为QPS时,显示该参数。 流控突发量,该参数可以调整令牌桶的大小,令牌桶大小为(阈值+突增量)/时间窗口,时间窗口单位为s。 是否集群限流 选择“是”或“否”。开启后对集群内此资源的调用总量进行限制。 集群限流阈值模式 当流控类别为QPS,开启集群限流时,显示该参数。 单机均摊 总体阈值 本地配额缓存数 当流控类别为配额,开启集群限流时,显示该参数。 防止DCS热点key的参数,可以减少DCS的访问,默认值为5。 该参数需要合理配置,配置过小容易造成热点key问题,配置过大可能导致部分节点放通部分节点流控的问题。 时间窗口 填写时间,单位为秒,表示间隔多少秒允许一个请求通过。默认为1秒,取值范围为1~86400。 是否开启流控规则 选择是否开启流控规则。 新增参数 单击“新增参数”,可以根据需要新增多条流控规则。 参数名称:参数级规则的参数名。 限流阈值:默认的参数阈值,如果没有指定参数值,都按该阈值进行流控。 单击新增参数列表前的,单击“新增参数值”,可以为参数配置多条参数值。 参数值:参数级规则的参数值。 参数阈值:指定的参数值按该阈值进行流控。 全局参数流控 全局参数流控规则与资源流控的参数级规则含义类似,仅不对微服务/接口做限制。 表4 全局参数流控参数说明 参数 说明 限流控制类型 选择全局参数 参数名称 填写参数名称。 流控类别 QPS:每秒速率流控。 配额:特定时间的请求阈值。 限流阈值 流控阈值,默认的参数阈值,如果没有指定参数值,都按该阈值进行流控。 禁用时间 当限流控制类型为QPS时,显示该参数。 流控后禁用时间内的所有请求不再判断请求量,直接全部流控。 允许的突增量 当限流控制类型为QPS时,显示该参数。 流控突发量,该参数可以调整令牌桶的大小,令牌桶大小为(阈值+突增量)/时间窗口,时间窗口单位为s。 是否集群限流 选择“是”或“否”。开启后对集群内此资源的调用总量进行限制。 集群限流阈值模式 当流控类别为QPS,开启集群限流时,显示该参数。 单机均摊 总体阈值 本地配额缓存数 当流控类别为配额,开启集群限流时,显示该参数。 防止DCS热点key的参数,可以减少DCS的访问,默认值为5。 该参数需要合理配置,配置过小容易造成热点key问题,配置过大可能导致部分节点放通部分节点流控的问题。 时间窗口 填写时间,单位为秒,表示间隔多少秒允许一个请求通过。默认为1秒,取值范围为1~86400。 是否开启流控规则 选择是否开启流控规则。 新增参数 单击“新增参数值”,配置多条参数值。 参数值:参数级规则的参数值。 参数阈值:指定的参数值按该阈值进行流控。 节点级动态流控 表5 节点级动态流控参数说明 参数 说明 限流控制类型 选择节点级动态流控。 是否开启流控规则 选择是否开启流控规则。 CPU过载阈值 CPU利用率超过该值时,接口的放通比例开始降低,直到降低至最低放通比例;CPU利用率越高,接口放通比例下降越快。该阈值要求为小数,范围为0~1,支持精度为小数点后四位。 CPU恢复阈值 CPU利用率小于该值时,接口的放通比例开始恢复,直到恢复至100%;CPU利用率越低,接口放通比例恢复越快。该阈值要求为小数,范围为0~1,支持精度为小数点后四位,并且小于CPU过载阈值。 最低放通比例 配置各个接口等级对应的最低放通比例,在CPU始终处于过载状态时,仍然能放通该比例的请求。 范围为0~1,支持精度为小数点后四位。 在弹出框中单击“确认”。
  • 服务资源介绍 Cloud Map根据服务注册和发现方式不同,把管理的服务资源分为三种:微服务、中间件、接入地址(URL),具体介绍如表1所示。 表1 服务资源说明 服务形态 描述 微服务 微服务之间通过微服务框架点对点通信,微服务提供方(Provider)实例节点把自己的IP和端口注册到Cloud Map,并通过心跳的方式维持注册。调用方(Consumer)实例查询Provider的所有实例列表,实现点对点调用。微服务属于一个服务,一个微服务可能有多个集群。 中间件 中间件对应一个中间件集群,Cloud Map里记录连接这个中间件集群,中间件SDK所有需要的配置,包括地址、秘钥,密码信息等。一个服务可能会申请多个中间件集群 。 说明: 当前仅支持WiseDBA管理台纳管的数据库。 接入地址 业务之间调用都是通过一个地址进行访问,对于内部服务,URL地址挂在提供方服务下面,由提供方提供。对于公有云、以及外部的服务地址,挂在使用方服务下面,由使用方自己维护。一个服务可能会开放多个接入地址,也会依赖多个接入地址。 服务资源在Cloud Map中注册和发现的方式如表2所示。 表2 服务注册和发现 场景 注册 发现 服务之间 服务提供方通过IaC注册地址。 通过Cloud Map SDK查询。 服务内部微服务之间 通过Cloud Map SDK注册机器IP,并维持心跳。 通过Cloud Map SDK发现。 数据库 通过IaC申请数据库,数据库管理台自动注册。 通过中间件SDK访问。 接口类型服务 使用方通过IaC注册地址。 通过Cloud Map SDK发现。 外部地址 使用方通过IaC注册地址。 通过Cloud Map SDK发现。 中间件 通过IaC申请中间件集群,中间件管理台自动注册。 通过中间件SDK访问。 Cloud Map SDK的使用方法请参见Cloud Map SDK。
  • 流控类型介绍 支持的流控类型有节点级流控,服务级流控,接口级流控,IP流控,自定义参数流控,多参数组合流控,配额流控及并发连接流控,流控类型介绍如表1所示。每种类型的流控只能添加一次,SLB流控的顺序按照页面从上往下匹配,页面支持上下移动流控的顺序。 表1 流控类型说明 类型 流控维度 窗口类型 限制 节点级流控 所有请求 漏桶 请求速率 服务级流控 以请求的Host字段为维度 漏桶 请求速率 接口级流控 以请求的uri路径为维度 漏桶 请求速率 IP流控 以取得的请求IP为维度 漏桶 请求速率 自定义参数流控 以自定义的单个参数为维度 漏桶 请求速率 多参数组合流控 以自定义的多个参数为维度 漏桶 请求速率 配额流控 以自定义的多个参数为维度 固定窗口。 请求量。 并发连接流控 以自定义的多个参数为维度 N/A 并发量。 窗口类型 漏桶:请求被均匀地限制,支持突发量配置。一般情况下,建议业务进行评估,并加上适当突发量,突发量一般不超过1秒的量。 固定窗口:只要在窗口内部超限即可。 例如同为100个/秒的限制,滑动窗口下,第0.1秒只能有10个请求,当然,滑动窗口下有个突发量的配置,在突发量10个的情况,可以在业务瞬间突发时额外再支持10个,突发池用满以后,即不可再用,只有等请求量下滑低于正常流控量时,再慢慢恢复突发池;固定窗口下,第0.1秒也可以允许100个请求。 限制类型 请求量:并不关注请求是否为并发,例如10个请求不论到来和处理的时间是否有并发情况,都记为10个。 并发量:只看某时间点,正在处理的请求的个数。如果请求1的开始时间到响应时间这个时间段,与请求2的开始时间到响应时间的时间段并不相互交叠,则请求1和请求2不是并发。否则存在并发关系。
  • 追加到数组变量 需要先定义一个数组变量,可将“值”内填写的数据,以字符串的形式追加到数组变量中。例如,先定义一个变量名为data的变量,类型为数组,值为【“123”】,使用追加到数组变量后,可在下拉框内选择data,传入值456,运行即可获得变量data,类型为数组,值为【“123”,“456”】。 输入参数 用户配置追加到数组变量执行动作,相关参数说明请参考表1。 表1 追加到数组变量输入参数说明 参数 说明 变量名 选择参数类型(暂无数据)。 值 设定参数的预设值。 输出参数 该执行动作无输出参数。
  • 变量定义 输入参数 用户配置初始化变量执行动作,相关参数说明请参考表5。 表5 变量定义参数说明 参数 是否必填项 说明 示例 变量名 是 用于指定将要命名的变量的名称。 re 类型 是 变量的类型。目前包含字符串、整数、布尔、浮点数、数组、对象。 字符串 整数 布尔 浮点数 数组 对象 值 否 用于指定该变量的值。 这是一句话 12345 true 3.1415 [1,2,3,4,5] {"key":"value"} 输出参数 该执行动作无输出参数。
共100000条