华为云用户手册

  • 响应消息 表2 响应参数 参数名称 是否必选 参数类型 说明 id 否 String 批处理作业的id。 appId 否 String 批处理作业的后台app id。 name 否 String 批处理作业名称。 owner 否 String 批处理作业所属用户。 proxyUser 否 String 批处理作业所属代理用户(资源租户)。 state 否 String 批处理作业的状态,请参见创建批处理作业中的表7。 kind 否 String 批处理作业类型,只支持spark类型参数。 log 否 Array of Strings 显示当前批处理作业的最后10条记录。 sc_type 否 String 计算资源类型。用户自定义时返回CUSTOMIZED。 cluster_name 否 String 批处理作业所在队列。 queue 否 String 批处理作业所在队列。 create_time 否 Long 批处理作业的创建时间。是单位为“毫秒”的时间戳。 update_time 否 Long 批处理作业的更新时间。是单位为“毫秒”的时间戳。 feature 否 String 作业特性。表示用户作业使用的Spark镜像类型。 basic:表示使用 DLI 提供的基础Spark镜像。 custom:表示使用用户自定义的Spark镜像。 ai:表示使用DLI提供的AI镜像。 spark_version 否 String 作业使用spark组件的版本号,在“feature”为“basic”或“ai”时填写,若不填写,则使用默认的spark组件版本号2.3.2。 image 否 String 自定义镜像 。格式为:组织名/镜像名:镜像版本。 当用户设置“feature”为“custom”时,该参数生效。用户可通过与“feature”参数配合使用,指定作业运行使用自定义的Spark镜像。关于如何使用自定义镜像,请参考《 数据湖探索 用户指南》。 req_body 否 String 请求参数详情。
  • 响应示例 { "id": "0a324461-d9d9-45da-a52a-3b3c7a3d809e", "appId": "", "name": "", "owner": "", "proxyUser": "", "state": "starting", "kind":"", "log": [ "stdout: ", "stderr: ", "YARN Diagnostics: " ], "sc_type": "A", "cluster_name": "test", "queue": "test", "create_time": 1531906043036, "update_time": 1531906043036 }
  • 响应示例 { "is_success": true, "message": "", "templates": [ { "name": "test2", "body": { "auto_recovery": false, "max_retry_times": 20, }, "group": "", "description": "", "type": "SPARK", "id": "3c92c202-b17c-4ed7-b353-ea08629dd671" } ], "count": 1 }
  • 响应参数 表3 响应参数 参数 参数类型 说明 is_success Boolean 执行请求是否成功。“true”表示请求执行成功。 message String 系统提示信息,执行成功时,信息可能为空。 count Integer 返回的模板个数。 templates Array of Objects 模板信息列表。请参考表4。 表4 templates参数说明 参数 参数类型 说明 type String 模板类型。 id String 模板ID。 name String 模板名字。 body Object 模板内容,请参考表5。 group String 模板所在分组名。 description String 模板描述信息。 language String 语言。 owner String 模板的创建者。 表5 body参数说明 参数 参数类型 说明 file String 用户已上传到DLI资源管理系统的类型为jar或pyFile的程序包名。也支持指定OBS路径,例如:obs://桶名/包名。 className String 模板的Java/Spark主类。 cluster_name String 用于指定队列,填写已创建DLI队列的队列名称。 说明: 推荐使用“queue”参数,“queue”参数与“cluster_name”参数两者不能同时存在。 args Array of Strings 传入主类的参数,即应用程序参数。 sc_type String 计算资源类型,目前可接受参数A, B, C。如果不指定,则按最小类型创建。具体资源类型请参见表3。 jars Array of Strings 用户已上传到DLI资源管理系统的类型为jar的程序包名。也支持指定OBS路径,例如:obs://桶名/包名。 pyFiles Array of Strings 用户已上传到DLI资源管理系统的类型为pyFile的资源包名。也支持指定OBS路径,例如:obs://桶名/包名。 files Array of Strings 用户已上传到DLI资源管理系统的类型为file的资源包名。也支持指定OBS路径,例如:obs://桶名/包名。 modules Array of Strings 依赖的系统资源模块名,具体模块名可通过查询组内资源包(废弃)接口查看。 DLI系统提供了用于执行跨源作业的依赖模块,各个不同的服务对应的模块列表如下: CloudTable/ MRS HBase: sys.datasource.hbase CloudTable/MRS OpenTSDB: sys.datasource.opentsdb RDS MySQL: sys.datasource.rds RDS PostGre: 不需要选 DWS: 不需要选 CSS : sys.datasource.css resources Array of Objects JSON对象列表,填写用户已上传到队列的类型为JSON的资源包名和类型。具体请见表4。 groups Array of Objects JSON对象列表,填写用户组类型资源,格式详见请求示例。如果“resources”中的“name”未进行type校验,只要此分组中存在这个名字的包即可。具体请见表5。 conf Object batch配置项,参考Spark Configuration。 name String 创建时用户指定的批处理名称,不能超过128个字符。 driverMemory String Spark应用的Driver内存,参数配置例如2G, 2048M。该配置项会替换“sc_type”中对应的默认参数,使用时必需带单位,否则会启动失败。 driverCores Integer Spark应用Driver的CPU核数。该配置项会替换sc_type中对应的默认参数。 executorMemory String Spark应用的Executor内存,参数配置例如2G, 2048M。该配置项会替换“sc_type”中对应的默认参数,使用时必需带单位,否则会启动失败。 executorCores Integer Spark应用每个Executor的CPU核数。该配置项会替换sc_type中对应的默认参数。 numExecutors Integer Spark应用Executor的个数。该配置项会替换sc_type中对应的默认参数。 obs_bucket String 保存Spark作业的obs桶,需要保存作业时配置该参数。 auto_recovery Boolean 是否开启重试功能,如果开启,可在Spark作业异常失败后自动重试。默认值为“false”。 max_retry_times Integer 最大重试次数。最大值为“100”,默认值为“20”。 feature String 作业特性。表示用户作业使用的Spark镜像类型。 basic:表示使用DLI提供的基础Spark镜像。 custom:表示使用用户自定义的Spark镜像。 ai:表示使用DLI提供的AI镜像。 spark_version String 作业使用Spark组件的版本号。 如果当前Spark组件版本为2.3.2,则不填写该参数。 如果当前Spark组件版本为2.3.3,则在“feature”为“basic”或“ai”时填写。若不填写,则使用默认的Spark组件版本号2.3.2。 image String 自定义镜像。格式为:组织名/镜像名:镜像版本。 queue String 用于指定队列,填写已创建DLI的队列名。必须为通用类型的队列。 说明: 兼容“cluster_name”参数,即如果使用“cluster_name”指定队列仍然有效。 推荐使用“queue”参数,“queue”参数与“cluster_name”参数两者不能同时存在。 catalog_name String 访问元数据时,需要将该参数配置为dli。
  • URI URI格式: GET /v3/{project_id}/templates?type=spark 参数说明 表1 URI参数说明 参数 是否必选 参数类型 描述 project_id 是 String 项目编号,用于资源隔离。获取方式请参考获取项目ID。 表2 query参数说明 参数 是否必选 参数类型 说明 type 是 String 模板类型。 取值范围: SPARK:Spark模板。 当前只支持配置Spark类型的模板。 keyword 否 String 模板名过滤关键字,模糊匹配,获取模板名含有该关键字的所有模板。 page-size 否 Integer 每页显示的最大结果行数,范围: [1, 100]。默认值为:50。 current-page 否 Integer 当前页码,默认为第一页。
  • 响应示例 { "name": "test2", "body": { "auto_recovery": false, "max_retry_times": 20, }, "group": "", "description": "", "type": "SPARK", "id": "3c92c202-b17c-4ed7-b353-ea08629dd671" }
  • 响应示例 { "is_success": true, "message": "", "count": 2, "elastic_resource_pools": [ { "owner": "ei_dlics_d00352221", "id": 1026, "elastic_resource_pool_name": "elastic_pool_0622_10", "description": "", "max_cu": 0, "min_cu": 0, "actual_cu": 0, "cidr_in_vpc": "172.16.0.0/12", "create_time": 1624366266826, "current_cu": 64, "status": "AVAILABLE", "resource_id": "ecc98d89-3fd1-4dec-b572-aa6e2ef82391", "fail_reason": "", "enterprise_project_id": "0", "prepay_cu": 0, "charging_mode": 1 }, { "owner": "ei_dlics_d00352221", "id": 1002, "elastic_resource_pool_name": "elastic_pool_0622_0", "description": "test", "max_cu": 684, "min_cu": 0, "actual_cu": 0, "cidr_in_vpc": "172.16.0.0/12", "create_time": 1624353878084, "status": "AVAILABLE", "resource_id": "ecc98d89-3fd1-4dec-b572-aa6e2ef82391", "fail_reason": "", "enterprise_project_id": "0", "prepay_cu": 0, "charging_mode": 1 } ] }
  • URI URI格式 GET /v3/{project_id}/elastic-resource-pools 参数说明 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目编号,用于资源隔离。获取方式请参考获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 limit 否 Integer 每页的数量。默认为100。 name 否 String 通过弹性资源池名称进行模糊匹配。 offset 否 Integer 偏移量。默认为0。 status 否 String 弹性资源池状态。具体参数范围如下: AVAILABLE:可使用 SCALING:规格变更中 CREATING:创建中 FAILED:已失败 tags 否 String 查询根据标签进行过滤。
  • URI URI格式: DELETE /v2.0/{project_id}/datasource/enhanced-connections/{connection_id}/routes/{name} 参数说明 表1 URI参数说明 参数 是否必选 参数类型 描述 project_id 是 String 项目编号,用于资源隔离。获取方式请参考获取项目ID。 connection_id 是 String 跨源id。 name 是 String 路由名称。
  • 响应示例 { "is_success": true, "message": "", "count": 2, "privileges": [ { "is_admin": true, "privileges": [ "ALL" ], "user_name": "tenant1" }, { "is_admin": false, "privileges": [ "SUBMIT_JOB" ], "user_name": "user2" } ], "queue_name": "queue1" }
  • URI URI格式: GET /v1.0/{project_id}/queues/{queue_name}/users 参数说明 表1 URI 参数 参数名称 是否必选 参数类型 说明 project_id 是 String 项目编号,用于资源隔离。获取方式请参考获取项目ID。 queue_name 是 String 队列名称。 表2 query参数 参数名称 是否必选 参数类型 说明 limit 是 Integer 分页查询数量。 offset 是 Integer 分页查询偏移量。
  • 响应消息 表3 响应参数 参数名称 是否必选 参数类型 说明 is_success 否 Boolean 执行请求是否成功。“true”表示请求执行成功。示例值:true。 message 否 String 系统提示信息,执行成功时,信息可能为空。示例值:空。 queue_name 否 String 队列名称。示例值:queue1。 privileges 否 Array of Object 有权限使用该队列的用户及其对应的权限数组。 具体参数请参考表4。 count 否 Long 用户的总个数。 表4 privileges参数 参数名称 是否必选 参数类型 说明 is_admin 否 Boolean 判断用户是否为管理员。示例值:false。 user_name 否 String 用户名称,即该用户在当前队列上有权限。示例值:user2。 privileges 否 Array of Strings 该用户在队列上的权限。示例值:["SUBMIT_JOB"]。
  • 配置方法 执行条件,指流水线阶段任务执行时需要满足的前提条件,通过配置执行条件,可以控制阶段任务是否执行。 编辑/添加流水线阶段任务。 在弹出的侧滑框中单击“任务配置”卡片。 添加任务时,需先添加插件才能进行配置。 参数项 说明 ID 任务的ID,同一条流水线上的任务ID不能重复。 执行条件 可根据需要设置如下四种条件。 前置任务未选择仍执行:上一个任务状态执行成功或未选择,都继续执行当前任务。 前置任务成功时执行:上一个任务执行成功才执行当前任务。 前置任务失败时执行:上一个任务执行失败才执行当前任务。 始终执行:始终执行当前任务,上一个任务状态是失败、成功、中止或忽略执行,都继续执行当前任务。 表达式:表达式形式为“${{ }}”,由流水线上下文、操作符、函数或常量任意组合而成,当前置任务到达终态(成功、失败、中止或忽略执行),且表达式结果为“true”时,执行当前任务,否则不执行。 表达式编写请参考表达式。 流水线上下文请参考流水线上下文。 父主题: 执行条件
  • 到期与欠费 客户欠费后,可以查看欠费详情。为防止相关资源被停止或者释放,需要客户及时进行充值,帐号将进入欠费状态,需要在约定时间内支付欠款,详细操作请参考欠费还款。 当您的帐号欠费后,会对您的资源使用产生如下影响: 包年/包月资源:如果您的包年/包月资源到期未续订,首先会进入宽限期。如果您在宽限期内仍未续订包年/包月资源,那么就会进入保留期。 您无法对处于宽限期或者保留期的包年/包月资源执行任何操作,比如当您的带宽处于宽限期或者保留期时,您无法修改带宽大小。 按需计费资源:如果您的按需资源欠费时,首先会进入宽限期。如果您在宽限期内仍未缴清按需资源的欠费,那么就会进入保留期。 您可以对处于宽限期的按需计费资源正常执行操作,当进入保留期后,您无法对该资源执行任何操作。 关于宽限期和保留期的详细内容,请参见宽限期保留期。
  • 私网NAT网关 关于私网NAT网关的使用,您需要注意以下几点: 公共限制 用户需要在VPC下手动添加私网路由,即通过创建对等连接或开通云专线/VPN连接远端私网。 SNAT规则和DNAT规则不能共用同一个中转IP。 私网NAT网关支持添加的DNAT规则和SNAT规则的数量如下: 小型:DNAT规则和SNAT规则的总数不超过20个。 中型:DNAT规则和SNAT规则的总数不超过50个。 大型:DNAT规则和SNAT规则的总数不超过200个。 超大型:DNAT规则和SNAT规则的总数不超过500个。 SNAT限制 VPC内的每个子网只能添加一条SNAT规则。 DNAT限制 DNAT的全端口模式不能和具体端口模式共用同一个中转IP。
  • 公网NAT网关 关于公网NAT网关的使用,您需要注意以下几点: 公共限制 同一个公网NAT网关下的多条规则可以复用同一个弹性公网IP,不同网关下的规则必须使用不同的弹性公网IP。 一个VPC支持关联多个公网NAT网关。 SNAT、DNAT可以共用同一个弹性公网IP,节省弹性公网IP资源。但是在选用全端口模式下,DNAT优先占用全部端口,这些端口不能被 SNAT 使用。因此SNAT规则不能和全端口的DNAT规则共用EIP,以免出现业务相互抢占问题。 公网NAT网关支持转换的资源类型不包括企业型VPN。 当云主机同时配置弹性公网IP服务和公网NAT网关服务时,数据均通过弹性公网IP转发。 出于安全因素考虑,部分运营商会对下列端口进行拦截,导致无法访问。建议避免使用下列端口: 协议 不支持端口 TCP 42 135 137 138 139 444 445 593 1025 1068 1434 3127 3128 3129 3130 4444 4789 4790 5554 5800 5900 9996 UDP 135~139 1026 1027 1028 1068 1433 1434 4789 4790 5554 9996 SNAT限制 VPC内的每个子网只能添加一条SNAT规则。 SNAT规则中添加的自定义网段,对于虚拟私有云的配置,必须是虚拟私有云子网网段的子集,不能相等。 SNAT规则中添加的自定义网段,对于云专线的配置,必须是云专线侧网段,且不能与虚拟私有云侧的网段冲突。 公网NAT网关支持添加的SNAT规则的数量没有限制。 DNAT限制 一个云主机的一个端口对应一条DNAT规则,一个端口只能映射到一个EIP,不能映射到多个EIP。 公网NAT网关支持添加的DNAT规则的数量为200个。
  • 修订记录 发布日期 修订记录 2022-11-29 第十五次发布。 更新: 计费说明(公网NAT网关),添加公网NAT网关按需(天)模式的计费周期。 2022-11-08 第十四次发布。 新增:安全章节。 2022-07-27 第十三次发布。 更新: 计费说明(私网NAT网关),私网NAT网关价格计算器已上线。 产品规格,添加提升公网NAT网关的DNAT规则数的办法。 2022-06-15 第十二次发布。 更新:私网NAT结束公测,涉及全篇修改。 2022-04-13 第十一次发布。 新增:计费说明(私网NAT网关)。 2021-12-23 第十次发布。 新增:私网NAT网关优势。 更新:权限管理。 2021-11-12 第九次发布。 更新: 与其它服务的关系(新增 云审计 服务)。 2021-08-19 第八次发布。 新增:图解NAT网关章节。 2020-05-26 第七次发布。 “华北-北京四”支持“NAT网关多实例”场景。 2020-03-30 第六次发布。 产品介绍新增“计费说明”。 2020-02-10 第五次发布。 NAT系统权限名称变更。 2019-11-05 第四次发布。 新增SNAT高可用场景。 2019-02-26 第三次发布。 新增与其它服务的关系。 2018-09-30 第二次发布。 新增基本概念。 2018-04-30 第一次发布。
  • 使用临时AK/SK做签名 如果使用临时AK/SK对请求签名,您将签名SDK集成到应用时,请在消息头添加以下参数和参数值: X-Security-Token:{securityToken} 然后使用临时AK/SK对请求进行签名,签名SDK与AK/SK的签名SDK一致。 创建一个API,安全认证选择“华为 IAM 认证”,并发布。 获取当前账号的临时AK/SK与{securityToken},请参考IAM接口文档。 例如获得响应参数为: { "credential": { "access": "P0HEQUQ4XBWXY5WD69X0", "expires_at": "2022-10-17T18:51:25.231000Z", "secret": "3WJu****hDVs", "securitytoken": "XXXXXX......" } } 构造请求,填写签名参数。 ... request.setKey("P0HE****69X0"); request.setSecret("3WJu****hDVs"); request.setMethod("GET"); request.setUrl("url"); request.addHeader("X-Security-Token", "XXXXXX......"); ... 父主题: 常见问题
  • AK/SK签名认证操作流程 AK/SK签名认证操作流程如下: API调用信息收集。 需要获取以下信息,包括: 用于组成请求URL的Endpoint和URI。 用于签名和认证的AK/SK。 用于区分租户的项目ID、子项目ID。 用于区分租户的账号名、账号ID。 用于Host的域名信息。 表1 信息收集项 信息项 说明 Endpoint 地区与终端节点,即云服务在不同Region有不同的访问域名。 获取方式请参考获取EndPoint。 URI API接口的调用路径及参数。 请参考各云服务的详细接口章节获取。 AK/SK 访问密钥对,包含密钥ID与密钥。AK/SK用于对请求内容进行签名。 获取方式请参考获取AK/SK。 Project_Id 项目ID,在大多数API接口调用时需要配置在URI中,用以识别不同的项目。 获取方式请参考获取项目ID。 X-Project-Id 子项目ID,在多项目场景中使用。如果云服务资源创建在子项目中,AK/SK认证方式下,操作该资源的接口调用需要在请求消息头中携带X-Project-Id。 获取方式请参考获取项目ID。 X-Domain-Id 账号ID,用途: Token认证方式下 获取Token 。 AK/SK认证方式下,全局服务的接口调用,需在请求消息头中配置X-Domain-Id。(全局服务:服务部署时不区分物理区域。如OBS、CDN等。) 获取方式请参考获取账号名和账号ID。 Host API接口所属分组的调试域名或独立域名。 请参考各云服务的接口所属API分组中的域名信息。 API调用。 本手册提供Java、Go、Python、C等多种不同语言的签名SDK和调用示例,您可以从签名SDK与demo中选择需要的语言,然后参考示例与API调用说明部分,将SDK集成到您的应用中。 API选择华为IAM认证,也支持临时AK/SK,具体请参考使用临时AK/SK做签名。 父主题: AK/SK签名认证操作指导
  • 需要使用Hashtag的多Key命令 以下命令需要使用hashtag,否则会报crossslot错误。 表4 需要使用Hashtag的多Key命令 命令类型 命令 String msetnx List blpopbrpop brpoplpush brpoplpush Set sdiffsdiffstore sinter sinterstore smove sunionsunionstore Sorted Set zinterstore zunionstore Stream xread xreadgroup HyperLogLog pfcount pfmerge Geo georadius georadiusbymember Bitmap bitop Lua eval evalsha
  • Bloom Filter GeminiDB Redis的布隆过滤器底层使用Hash结构实现,请不要使用Hash类型的同名Key。 bf.loadchunk和bf.scandump命令用于迁移,因存储方式不同,不予支持。 出于安全考虑,bf.reserve初始设置的capacity上限为2621440(2M), 当输入的capacity值超过2M时会将capacity自动设置为2M。如需要更大的capacity,请使用布隆过滤器的扩展功能;expansion参数上限为10,超过限制时会自动调整为10。 详情请参考Bloom Filter介绍和Bloom Filter命令说明。 表3 Bloom Filter支持的命令 命令 是否支持 备注 bf.add √ - bf.exists √ - bf.info √ - bf.insert √ - bf.madd √ - bf.mexists √ - bf.reserve √ -
  • 企业级特性介绍 GeminiDB Redis接口基于云原生分布式架构,实现了计算与存储分离,完全兼容社区版Redis5.0及以下版本,提供了更多的企业级特性。 资源独享,分片不限流 计算节点部署在独享容器,租户隔离,稳定性高。面对高并发流量,节点不被限流。 内置独享型负载均衡器,转发性能和稳定性更高。 计算节点支持绑定公网IP,方便用户迁移上云和远程调试。 秒级弹性伸缩,轻松应对业务峰谷 支持存储和计算各自独立伸缩。单实例最大支持千万级QPS和36TB容量。 数据量增长场景,容量的扩容只需一键即可秒级完成,业务应用无感知。 业务量突增的场景(比如游戏、电商的活动期间,临时有更高的QPS诉求),可通过增加节点和提升规格两种方式进行扩容,后续可轻松缩容,对业务的影响仅为秒级连接重连。 一库替代多库,简化业务架构 基于高性能存储池,实例自动加载高频访问的热数据在计算节点的内存中,内部自动完成冷热数据交换,业务优先从内存中读取热数据,兼顾数据的高可靠和低时延。 GeminiDB Redis接口适合存储持续增长的重要业务数据(比如游戏玩家数据、用户画像、行为日志、文章资讯等),相比使用Redis+MySQL的架构场景,架构更简洁、数据存储更可靠,同时还具备更高的综合性能和性价比。 支持3AZ部署 3AZ实例支持将计算和存储资源都会均匀分布在3个可用区,部署规则严格遵循反亲和组,实例具备超高可靠性。 支持故障节点秒级接管,在独有的存算分离架构下,即使发生N-1节点同时故障的极端场景,依然可以秒级恢复业务访问,超高可用。 支持跨Region双活容灾 支持企业级双活容灾能力,用户可创建2个独立的实例(同Region或跨Region),并搭建容灾关系,如果其中一个实例出现极端场景的故障,另一个实例能继续提供可靠的数据库服务。 支持双向数据同步,支持断点续传。 账号管理,支持DB级权限控制 支持使用65536个DB,支持创建200个子账号。 用户不但可以为子账号设置只读或读写权限,还可为子账号配置可访问的DB列表,从根本上避免多租户之间数据误操作风险。 支持为Hash key的Field单独设置过期时间 开源Redis只支持为Hash key整体设置过期时间。GeminiDB Redis接口新增了一组hash命令,这一新功能让用户可以为一个Hash key中的指定Field单独设置过期时间,将业务层面的淘汰逻辑下沉到数据库中实施,简化业务架构。 数据强一致,不会发生脏读 开源Redis采用异步复制,数据副本间弱一致。在计数器、限流器、分布式锁等常见业务场景中,会带来脏读隐患,可能会导致业务逻辑错乱。 GeminiDB Redis接口将数据副本下沉到高性能存储池中,一旦写入成功,将保障数据3副本强一致存储,后续业务访问不会发生脏读。 增强版事务功能 支持事务功能,即MULTI/EXEC。相比开源Redis的伪事务,GeminiDB Redis接口实现了真事务,即支持ACID,在底层实现了对回滚的支持,满足了事务的原子性。 增强版前缀扫描 当用户对实例执行Scan类扫描命令时,如指定前缀匹配(match prefix*),则此时的扫描性能将远远超越开源Redis。这是因为GeminiDB Redis接口将该场景下达命令复杂度优化到了O(logN + M),其中N是整体数据量,M是匹配的数据量。而开源Redis的扫描复杂度则是更慢的O(N)。 父主题: 产品介绍
  • 使用须知 该功能目前为公测阶段,如需使用,请联系客服申请开通相应的操作权限。 搭建双活关系前,需要提前创建好两个GeminiDB Redis实例,这两个实例必须在不同VPC下,VPC不允许使用192和172开头的IP,主备实例使用的VPC网段不重叠,需要确保实例所在的VPC网络互通,同region使用对等连接,跨region使用云连接,具体操作请参见网络配置。 搭建双活关系前,需要确保创建的两个GeminiDB Redis实例的规格、磁盘、节点个数保持一致,且端口必须是8635。 搭建双活关系过程中,主实例会有多次秒级中断,需要业务具备重试机制,备实例不能处理业务,备实例的数据会被清空,最终与主实例数据一致。搭建时长取决于节点个数和数据容量。 搭建双活关系后,不允许在主实例和备实例同时进行添加节点、删除节点和规格变更操作。 搭建双活关系后,支持主备实例变更存储容量,用户要避免主备实例容量长期不一致。 搭建双活关系后,不支持flushall命令。 双写的场景,需要业务避免同一时刻或相近的时刻修改同一个key,否则有可能导致数据不一致。备实例不支持flushdb命令。 跨region场景的同步时延主要取决于云连接时延,还取决于写流量和云连接配置的域间带宽是否匹配。如果写流量大于云连接带宽,将会导致同步数据堆积,支持在节点监控上通过“rsync的同步WAL堆积大小”指标查看数据堆积大小并设置告警规则,具体请参见查看监控指标。 双活仅支持集群版实例,不支持主备版实例。 父主题: 双活容灾
  • 应用场景 频控场景 频控指的是对用户在一定时间内(例如一天、一周、一个月)进行某种操作的次数进行限制,可以控制特定广告或信息在一定时间内在特定平台上的展示次数,以避免过度曝光和广告疲劳,同时优化广告效果和用户体验;对于广告来说,也可以提高广告的效果和转化率。此外,频控还可以避免恶意行为,如刷流量、刷评论、刷点赞等。 频控的3个要素包含用户ID、广告ID、触发次数;以用户ID为key,广告ID为field,指定时间内的触发次数为value,恰好构成频控的三要素。先配置好各个广告的指定频控策略,如下图所示即可根据如下的方式来实现频控: 图1 频控Hash方案 最左边通过Hash类型来实现,通过expire命令设置User_1的过期时间为一天,每推送一次通过hincrby来增加指定广告的推送次数,每次推送指定广告前在一天内的推送次数则可以通过hget获取进行判断,一天后该用户的数据自动过期无需手动清理,这样便可以简单地实现频控。但这个方案的缺点在于对于每个用户(即每个key)只能设置一个过期时间,无法做到例如8小时3次这样指定时间段内的灵活的频控策略。 为了做到对每个广告都配置指定时间段内的灵活频控,如中间图所示可以通过将时间戳拼接在value里的方式用Hash类型来实现,但这种方案无疑是增加了业务侧开发的工作量。 如最右图所示,支持给field设置过期时间的exHash类型可以很完美地解决Hash类型面对频控场景的缺点。由于Field支持过期时间设置,那么该场景下,平台可以给每个广告都配置不同时间段内的频次要求,假设此时给AD_2配置的频控策略为8小时内2次,那么如图所示在下一次再准备给User_1推送AD_2广告前,先通过exhget User_1 AD_2命令获取到了该值已经是2时,便可以判断出此时根据平台频控策略,不应该再给User_1推送AD_2广告了。而当8小时一过,User_1的AD_2这个field过期后,exhget无法再获取到这个field的信息,则可以继续给User_1推送AD_2广告了。 购物车场景 双十一期间,相信很多同学购物车里都填满了各种想要清空的宝贝,这里就以购物车场景为例介绍该场景的几种不同Redis类型的实现,并比较这几种实现方案的优缺点。 基于String实现购物车功能 如图图2所示,基于String可以轻松地实现各个用户的购物车功能,该方案需要将用户ID与商品ID进行拼接作为key,例如User_1#Earphones_1,key对应的value为购物车中用户准备购买的数量,其中可能有部分商品为限时特购,所以有过期时间,为key对应的过期时间。 图2 String方案 涉及命令如下: incrby User_N#Product_N [Number] # 增加商品数量 set User_N#Product_N [Number] # 设置商品数量 expire User_N#Product_N Time_N # 设置指定用户购物车中指定物品的过期时间 get User_N#Product_N # 获取商品数量 scan 0 match User_N* # 查找所有User_N下的所有商品 del User_N#Product_N # 删除指定用户购物车中的指定商品 该方案会存在如下问题: 额外拼接增加编、解码开发工作量。 某个用户获取自己的购物车清单时还需要通过scan命令前缀匹配扫描所有key,并通过get命令去获取对应的值。 想要直接获取清单长度时,仍然需要遍历整个前缀key的数目,方法复杂。 存在大量重复的用户名前缀,浪费存储空间。 基于Hash实现购物车功能 可以根据如图3所示的Hash类型来实现购物车的管理,用户ID作为key,商品ID作为field,value为购物车中对应商品的数量。其中对于部分限时特购的商品,其过期时间通过拼接的方式放到field对应的value里。 图3 Hash方案 涉及命令如下: hset User_N Product_N [Number#Time_N] # 设置指定用户购物车中指定商品的数量和过期时间 hincrby User_N Product_N [Number] # 增加指定用户购物车中的指定商品数量 hgetUser_N Product_N # 获取指定用户购物车中指定商品的信息 hgetall User_N # 获取指定用户的所有商品信息 hlen User_N # 获取指定用户购物车中的总商品数量 hdel User_N Product_N # 删除指定用户购物车中的指定商品 该方案相对于String类型的方案有了不少优化: 获取某个用户购物车中的所有商品清单仅需要一个hgetall命令即可。 获取某个用户的清单长度时直接hlen获取即可。 不存在大量重复的用户名前缀问题。 然而该方案仍存在一个明显的缺点,即对于部分限时特购的商品处理起来复杂:对于User_1的Keyboard_1商品,如果要再加一个数量,不能直接使用hincrby,而是需要先hget获取Keyboard_1商品的值并解码,再加上指定的数量再编码后hset对应的值。 基于exHash实现购物车功能 根据如图4所示的exHash类型来实现购物车的管理,同Hash类型一样,用户ID作为key,商品ID作为field,value为购物车中对应商品的数量。其中对于部分限时特购的商品,由于exHash类型可以为Field设置过期时间,其过期时间可通过hset命令直接设置。 图4 ExHash方案 涉及命令如下: exhset User_N Product_N ex Time_N # 设置指定用户购物车中指定商品的数量和过期时间 exhincrby User_N Product_N [Number] keepttl # 增加指定用户购物车中的指定商品数量,保留原先过期时间exhget User_N Product_N # 获取指定用户购物车中指定商品的信息 exhgetall User_N # 获取指定用户的所有商品信息 exhlen User_N # 获取指定用户购物车中的总商品数量 exhdel User_N Product_N # 删除指定用户购物车中的指定商品 del User_N # 清空指定用户的购物车 该方案相对于Hash类型的优化主要体现在可以直接为各field设置过期时间,使业务侧使用起来简单又高效。可以看到exHash类型相关的命令和Hash类型是类似的,使用起来学习成本很低,业务侧改造成本相对也比较低。
  • 请求示例 POST https://{Endpoint}/v3/619d3e78f61b4be68bc5aa0b59edcf7b/redis/instances/a6d3c8a9857b4c81b3c1fe4802dfa4d0in12/slow-logs { "start_time" : "2022-09-06T10:41:14+0800", "end_time" : "2022-09-16T10:41:14+0800", "limit" : 100, "line_num" : "1595659490239433658", "operate_type" : "set", "node_id" : "2997329fe3cb4b3faedcade16df6966eno12", "keywords" : [ "log", "test" ], "max_cost_time" : 100.12, "min_cost_time" : 50.12 }
  • 响应示例 状态码: 200 Success { "slow_logs": [{ "node_name": "test_worker_node_1", "node_id": "dbd0b65ed0c34125a0b04d4e5ba67e66no02", "whole_message": "testDb", "operate_type": "SET", "cost_time": 60.12, "log_time": "2022-09-15T22:49:38.643000Z", "line_num": "1595659490239433659" }] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 slow_logs Array of objects 慢日志具体信息。详情请参考表5。 表5 RedisSlowLogDetail 参数 参数类型 描述 node_name String 节点名称。 node_id String 节点ID。 whole_message String 执行语句。 operate_type String 语句类型。 cost_time Double 执行时间。单位:ms。 log_time String 日志产生时间,UTC时间。格式为“yyyy-mm-ddThh:mm:ssZ”。其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 line_num String 日志单行序列号。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 start_time 是 String 开始时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 注:开始时间不得早于当前时间30天。 end_time 是 String 结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 注:结束时间不能晚于当前时间。 limit 是 Integer 表示每次查询的日志条数,最大限制100条。 line_num 否 String 日志单行序列号,第一次查询时不需要此参数,下一次查询时需要使用,可从上一次查询的返回信息中获取。说明:当次查询从line_num的下一条日志开始查询,不包含当前line_num日志。 operate_type 否 String 语句类型,取空值,表示查询所有语句类型。支持查询的所有语句类型如下(以“、”分割):set、get、del、incr、incrby、incrbyfloat、decr、decrby、getset、append、mget、keys、setnx、setex、psetex、delvx、mset、 msetnx、getrange、substr、setrange、strlen、exists、expire、pexpire、expireat、pexpireat、ttl、pttl、persist、type、 scanx、pksetexat、sort、hdel、hset、hget、hgetall、hexists、hincrby、hincrbyfloat、hkeys、hlen、hmget、hmset、hsetnx、 hstrlen、hvals、hscan、hscanx、pkhscanrange、pkhrscanrange、lindex、linsert、llen、lpop、lpush、lpushx、lrange、lrem、 lset、ltrim、rpop、rpoplpush、rpush、rpushx、zadd、zcard、zscan、zincrby、zrange、zrevrange、zrangebyscore、 zrevrangebyscore、zcount、zrem、zunionstore、zinterstore、zrank、zrevrank、zscore、zrangebylex、zrevrangebylex、 zlexcount、zremrangebyrank、zremrangebyscore、zremrangebylex、zpopmax、zpopmin、sadd、spop、scard、smembers、sscan、 srem、sunion、sunionstore、sinter、sinterstore、sismember、sdiff、sdiffstore、smove、srandmember、bitset、bitget、 bitcount、bitpos、bitop、bitfield、pfadd、pfcount、pfmerge、geoadd、georadiusbymember、georadius、geohash、geodist、 geopos、xadd、xack、xgroup、xdel、xtrim、xlen、xrange、xrevrange、xclaim、xpending、xinfo、xread、xreadgroup。 node_id 否 String 节点ID,取空值,表示查询实例下所有允许查询的节点。具体取值请参考表10中的“id”。 keywords 否 Array of strings 根据多个关键字搜索日志全文,表示同时匹配所有关键字。 最多支持10个关键字。 每个关键字最大长度不超过512个字符。 max_cost_time 否 Double 支持根据最大执行时间范围查找日志。单位:ms。 min_cost_time 否 Double 支持根据最小执行时间范围查找日志。单位:ms。
  • 监控指标 云数据库 GeminiDB提供基于 云监控服务 CES的资源和操作监控能力,帮助用户监控账号下的GeminiDB实例,执行自动实时监控、告警和通知操作。用户可以实时掌握实例运行过程中产生的运行指标和存储用量等信息。 关于GeminiDB Redis支持的监控指标,以及如何创建监控告警规则等内容,请参见支持的监控指标。 关于GeminiDB Influx支持的监控指标,以及如何创建监控告警规则等内容,请参见支持的监控指标。 关于GeminiDB Cassandra支持的监控指标,以及如何创建监控告警规则等内容,请参见支持的监控指标。 关于GeminiDB Mongo支持的监控指标,以及如何创建监控告警规则等内容,请参见支持的监控指标。
  • 身份认证 用户访问云数据库 GeminiDB时支持对数据库用户进行身份验证,包含密码验证和IAM验证两种方式。 密码验证 您需要对数据库实例进行管理,通过控制台登录Web客户端页面时,需要对账号密码进行验证,验证成功后方可进行操作。 IAM验证 您可以使用 统一身份认证 服务(Identity and Access Management, IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。您创建的IAM用户,需要通过验证用户和密码才可以使用GeminiDB资源。具体请参见创建IAM用户并登录。
共100000条