华为云用户手册

  • 应用场景 传统原理图设计软件尚未形成完整工具链,上下游工具/作业未完全打通,无法并行设计/远程协同,数据保存在用户个人电脑,数据安全难以保障。pEDA-Schematic基于电子设计数据管理平台实现与下游其他设计工具联通,云端SaaS化支持远程协同设计,数据保存在云端,保障企业数据安全。 板级EDA设计流程互联互通的典型场景:可联通板级EDA工具链云服务中各个子服务(如版图设计服务),实现数据及作业协同。 设计工具迁移和使用的典型场景:存量工程/元器件库一键转换,兼容用户习惯,0转换成本。 设计文档安全可靠的典型场景:设计数据不落地,保障企业数据安全。 设计工具效率提升的典型场景:多人实时并行设计、在线检视等。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的IaaS、PaaS和SaaS各类各项云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的IaaS、PaaS和SaaS类各项云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火墙、API网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 产品架构 pEDA-Schematic产品架构如图1所示。 图1 pEDA-Schematic产品架构 pEDA-Schematic集成了多个设计需要的应用和服务,为企业用户提供了一站式原理图设计作业平台。 原理图工程辅助服务:支持在线检视功能,使工程师能快速收到评审意见并及时修改,提升原理图设计的效率。 原理图设计核心能力:提供工程管理、原理图编辑、设计库编辑、器件审查和位号分配等功能,支持高效和高质量电路板设计活动。 电子设计数据管理:提供元件数据的管理能力。
  • 响应示例 { "from": 0, "total": 1, "sessions": [ { "id": "178fa687-2e8a-41ed-a439-b00de60bb176", "state": "dead", "appId": null, "log": [ "stdout: ", "stderr: ", "YARN Diagnostics: " ], "sc_type": "A", "cluster_name": "test", "create_time": 1531906043036 } ] }
  • URI URI格式: GET /v2.0/{project_id}/batches 参数说明 表1 URI参数 参数名称 是否必选 参数类型 说明 project_id 是 String 项目编号,用于资源隔离。获取方式请参考获取项目ID。 表2 query参数说明 参数名称 是否必选 参数类型 说明 job_name 否 String 批处理作业的名称。 job-id 否 String 根据作业ID查询批作业。 cluster_name 否 String DLI队列名称,不填写则获取当前Project下所有批处理作业(不推荐使用)。 queue_name 否 String DLI队列名称,根据队列查询批作业(推荐使用)。 from 否 Integer 起始批处理作业的索引号,默认从0开始。 size 否 Integer 查询批处理作业的数量。 state 否 String 根据作业状态查询批作业。 owner 否 String 提交作业的用户。
  • 响应消息 表3 响应参数说明 参数名称 是否必选 参数类型 说明 from 否 Integer 起始批处理作业的索引号。 total 否 Integer 返回批处理作业的总数。 sessions 否 Array of objects 批处理作业信息。详细说明请参见表4。 create_time 否 Long 批处理作业的创建时间。 表4 sessions参数 参数名称 是否必选 参数类型 说明 duration 否 Long 作业运行时长,单位毫秒。 id 否 String 批处理作业的id。 state 否 String 批处理作业的状态。 appId 否 String 批处理作业的后台app id。 log 否 Array of Strings 显示当前批处理作业的最后10条记录。 sc_type 否 String 计算资源类型。用户自定义时返回CUSTOMIZED。 cluster_name 否 String 批处理作业所在队列。 create_time 否 Long 批处理作业的创建时间。是单位为“毫秒”的时间戳。 name 否 String 批处理作业名称。 owner 否 String 批处理作业所属用户。 proxyUser 否 String 批处理作业所属代理用户(资源租户)。 kind 否 String 批处理作业类型,只支持spark类型参数。 queue 否 String 批处理作业所在队列。 image 否 String 自定义镜像。格式为:组织名/镜像名:镜像版本。 当用户设置“feature”为“custom”时,该参数生效。用户可通过与“feature”参数配合使用,指定作业运行使用自定义的Spark镜像。 req_body 否 String 请求参数详情。 update_time 否 Long 批处理作业的更新时间。是单位为“毫秒”的时间戳。
  • 响应示例 { "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 }
  • 响应消息 表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 请求参数详情。
  • 响应示例 { "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" }
  • 响应消息 表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"]。
  • 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 分页查询偏移量。
  • 到期与欠费 客户欠费后,可以查看欠费详情。为防止相关资源被停止或者释放,需要客户及时进行充值,帐号将进入欠费状态,需要在约定时间内支付欠款,详细操作请参考欠费还款。 当您的帐号欠费后,会对您的资源使用产生如下影响: 包年/包月资源:如果您的包年/包月资源到期未续订,首先会进入宽限期。如果您在宽限期内仍未续订包年/包月资源,那么就会进入保留期。 您无法对处于宽限期或者保留期的包年/包月资源执行任何操作,比如当您的带宽处于宽限期或者保留期时,您无法修改带宽大小。 按需计费资源:如果您的按需资源欠费时,首先会进入宽限期。如果您在宽限期内仍未缴清按需资源的欠费,那么就会进入保留期。 您可以对处于宽限期的按需计费资源正常执行操作,当进入保留期后,您无法对该资源执行任何操作。 关于宽限期和保留期的详细内容,请参见宽限期保留期。
  • 公网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个。
  • 私网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。
  • 修订记录 发布日期 修订记录 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实例,这两个实例必须在不同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类型是类似的,使用起来学习成本很低,业务侧改造成本相对也比较低。
  • 响应示例 状态码: 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" }] }
  • 请求示例 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 }
共100000条