云服务器内容精选
-
热key问题 热key的危害: 在日常生活中,经常会发生各种热门事件,应用中对该热点新闻进行上万次的点击浏览和评论时,会形成一个较大的请求量。这种情况下会造成短时间内对同一个key频繁操作,会导致key所在节点的CPU和负载突然升高,从而影响落在该节点的其他请求,导致业务成功率下降。诸如此类的还有热门商品促销,网红直播等场景,这些典型的读多写少的场景也会产生热点问题。 热key问题会产生如下危害: 流量集中,达到物理网卡上限。 请求过多,缓存分片服务被打垮。 数据库击穿,引起业务雪崩。 处理思路: 针对热key问题,一般采取如下处理思路。 设计上需要考虑热key的问题,避免在数据库上产生热key。 业务侧通过增加缓存来减少热key出现的情况。考虑多级缓存解决热key问题(如Redis + 本地二级缓存) 屏蔽热点key。 比如:在业务侧进行定制,支持热key黑白名单能力,可以将热key临时屏蔽。 检测方法: 我们定义访问频率大于100000 次/min的key为热key。 热key事件分为两种类型。一种是Writes事件,代表写热点,一种是Reads事件,表示读热点。 GeminiDB Cassandra提供了热key的监测与告警。在 CES 界面,可以配置实例的热key告警,具体方法请参见设置告警规则。 当发生热key事件时,系统会第一时间发送预警通知,您可以前往CES界面查看监控事件数据,及时处理,避免业务波动。 图2 热key告警 热key告警字段说明: { "sampler_type": "WRITES", //采样类型。取值有WRITES,READS;WRITES代表写,READS代表读。 "partition_num": "2969", //分区键的热点次数 "keyspace_name": "performance", //keyspace名称 "table_id": "a10f3bb0-3626-11ec-bbdf-63e05bbb4391", //表id "table_name": "stresstable", //表名 "partition_key": "85897376" //产生热点分区键的值 }
-
总结 在线业务在使用Cassandra时,必须执行相关的开发规则和使用规范,在开发设计阶段就降低使用风险,合理的设计会降低大部份风险发生的概率。 任何表的设计都要考虑是否会造成热key或者大key的产生,是否会造成负载倾斜的问题。 建立数据过期机制,表中的数据不能无限制的增长而不删除或者过期。 针对读多写少的场景,要增加缓存机制,来应对读热点问题,并提升查询性能。 对于每个PK以及每行Row的大小,要控制大小,否则将影响性能和稳定性。超出后要及时优化。
-
大key问题 可能原因: 大key的产生,最主要的原因是主键设计不合理,使得单个分区的记录数或数据量过大。一旦某一个分区出现极大时,对该分区的访问,会造成分区所在服务器的负载变高,甚至造成节点内存溢出(OOM)等。 处理思路: 针对大key问题,一般采取如下两种处理思路。 增加缓存,优化表结构。 基于现有分区键,增加分区键散列。对数据进行打散,避免单个分区的记录过大。 检测方法: 通过长时间的业务观察,我们规定以下阈值,超过任何一个条件的阈值即为大key。 单个分区键的行数不能超过10万。 单个分区的大小不超过100MB。 GeminiDB Cassandra支持了大key的检测与告警。在CES界面,可以配置实例的大key告警,具体方法请参见设置告警规则。 当发生大key事件时,系统会第一时间发送预警通知,您可以前往CES界面查看监控事件数据,及时处理,避免业务波动。 图1 大key告警 告警字段说明如下: [ { "partition_size": "1008293497", //超大分区键的总大小 "timestamp": "2021-09-08 07:08:18,240", //大key产生时间 "partition_num": "676826", //超大分区键的总行数 "keyspace_name": "ssss", //keyspace名称 "node_id": "ae342330ded14605b6304e80e6a6efeeno06", //节点id "table_name": "zzzz", //表名称 "table_id": "024a1070-0064-11eb-bdf3-d3fe5956183b", //表id "partition_key": "{vin=TESTW3YWZD2021003}" //分区键 } ] 常见案例及解决方案: 案例1:某集群的数据量过大,导致集群存在大分区键(排查数量大概为2000+),最大的分区键达到38GB。当业务频繁访问这部分大的分区键时,会导致节点持续高负载,影响业务请求成功率。 该案例中表结构设计如下: 表设计分析: 上述movie表保存了短视频的相关信息,分区键为movieid,并且保存了用户信息(uid)。如果movieid是一个热门短视频,有几千万甚至上亿用户点赞此短视频,则该热门短视频所在的分区非常大(当前发现有38GB)。 解决方法: 针对上述案例中问题,可以通过如下方法解决。 优化表结构。 创建新表保存热门短视频信息,只保留短视频公共信息,不包含用户信息,确保该表不会产生大的分区键。热门短视频信息写入该表中。 增加缓存 业务应用先从缓存中读取热门文件信息,没有查询到,则从数据库中查询,减少数据库查询次数。 整体优化逻辑如下: 先查缓存,当缓存存在,直接返回结果。 当缓存不存在,查询热门视频缓存(缓存不存在,则查询hot表),当视频为为热门视频时,查询hotmovieaccess表。 当hotmovieaccess表存在结果时,直接返回。当hotmovieaccess表不存在记录时,查询movie表。 并缓存查询结果。 案例2:movie_meta以月度建表,每个表只存当月的数据,初始的这种设计是可以减轻或规避分区键过大问题的。由于业务频繁写入,热门视频存储的记录非常多,还是形成了大的数据分区。 解决方法: 新分区键增加一个随机数(0~999):将原来一个分区存储的信息随机离散存储到1000个分区中。采用新的分区键之后,没有形成新超过100MB的分区键,旧的超过100MB的分区键数据,随着时间过期即可。
-
修订记录 发布日期 更新特性 2024-05-30 第三十二次正式发布。 新增如下接口: 支持节点的开关机 查询GeminiDB Redis实例的大key 获取GeminiDB Redis的免密配置 支持修改GeminiDB Redis的免密配置 2024-01-30 第三十一次正式发布。 新增如下接口: 操作GeminiDB实例数据库 2023-11-30 第三十次正式发布。 新增如下接口: 获取GeminiDB Cassandra实例表级恢复的数据库信息 获取GeminiDB Cassandra实例表级恢复的表信息 2023-10-30 第二十九次正式发布。 新增如下接口: 关联LTS日志流 解除关联LTS日志流 查询LTS日志配置信息 2023-09-30 第二十八次正式发布。 新增如下接口: 查询高危命令 修改高危命令 2023-08-02 第二十七次正式发布。 新增如下接口: 查询实例可搭建双活关系的Region。 2023-04-28 第二十六次正式发布。 应用参数模板,新增GeminiDB Influx单节点实例支持此功能。 修改指定实例的参数,新增GeminiDB Influx单节点实例支持此功能。 2023-03-31 第二十五次正式发布。 查询所有实例规格信息,新增计划下线时间和替换接口。 获取参数模板列表,新增计划下线时间和替换接口。 查询资源实例,新增计划下线时间和替换接口。 2023-03-06 第二十四次正式发布。 新增如下接口: 创建数据库账号 修改数据库账号权限 重置数据库账号密码 删除数据库账号 获取数据库账号列表和详情 获取实例数据库列表 2022-10-30 第二十三次正式发布。 新增如下接口: 判断弱密码 修改数据库端口 修改副本集跨网段访问配置 删除扩容失败的节点 查询创建实例或扩容节点时需要的IP数量 查询磁盘自动扩容策略 参数模板比较 复制参数模板 查询支持参数模板的接口信息 查询数据库错误日志信息 设置慢日志脱敏状态 2022-09-30 第二十二次正式发布。 新增如下接口: 查询参数模板可应用的实例列表。 查询实例参数的修改历史。 查询参数模板应用历史。 创建冷数据存储 扩容冷数据存储 绑定/解绑弹性公网IP 切换实例SSL开关 重启实例 设置磁盘自动扩容策略 暂停/恢复容灾实例间数据同步 创建手动备份 2022-08-30 第二十一次正式发布。 新增如下接口: 查询可恢复的实例列表。 查询实例可恢复的时间段。 删除手动备份。 恢复到已有实例。 2022-07-30 第二十次正式发布。 新增如下接口: 获取容灾实例主/备角色信息。 容灾实例备升主。 容灾实例主降备。 2022-07-15 第十九次正式发布。 新增如下接口: 校验实例是否可以与指定实例建立/解除容灾关系。 搭建实例与特定实例的容灾关系。 解除实例与指定实例的容灾关系。 2022-07-01 第十八次正式发布。 数据库补丁升级,GeminiDB Cassandra支持补丁升级。 扩容实例的节点数量,GeminiDB Influx支持扩容节点数量。 2022-06-02 第十七次正式发布。 查询实例列表和详情,新增字段“lb_port”和“subnet_id”。 扩容实例的节点数量,新增字段“subnet_id”。 2022-03-18 第十六次正式发布。 缩容实例的节点数量,GeminiDB Cassandra包年/包月实例支持缩容节点数量。 2021-09-03 第十五次正式发布。 变更实例规格,GeminiDB Redis支持规格变更。 2021-08-27 第十四次正式发布。 新增接口查询专属资源列表。 创建实例、查询实例列表和详情增加参数“dedicated_resouce_id”。 2021-07-30 第十三次正式发布。 查询数据库规格、获取参数模板列表,增加“offset”和“limit”参数。 查询资源实例,“resource_instances”修改为“resource-instances”。 GeminiDB Redis新增如下接口: 查询数据库版本信息 查询数据库规格 创建实例 删除实例 查询实例列表和详情 扩容实例存储容量 扩容实例的节点数量 缩容实例的节点数量 修改实例的管理员密码 修改实例名称 变更实例安全组 GeminiDB Influx新增如下接口: 变更实例安全组 GeminiDB Mongo新增如下接口: 扩容实例存储容量 修改实例的管理员密码 修改实例名称 变更实例安全组 2021-05-18 第十二次正式发布。 错误码,新增英文错误信息。 2021-04-15 第十一次正式发布。 GeminiDB Redis监控指标更新。 2020-12-30 第十次正式发布。 GeminiDB Influx支持如下API: 查询数据库版本信息 查询数据库规格 创建实例 删除实例 查询实例列表和详情 扩容实例存储容量 修改实例的管理员密码 修改实例名称 查询自动备份策略 设置自动备份策略 2020-11-30 第九次正式发布。 GeminiDB Influx支持如下API: 获取参数模板列表 创建参数模板 修改参数模板参数 应用参数模板 修改指定实例的参数 获取指定参数模板的参数 查询实例参数配置 删除参数模板 2020-10-30 第八次正式发布。 资源标签支持20个配额。 扩容实例存储容量,支持磁盘步长为1。 2020-09-30 第七次正式发布。 GeminiDB Mongo支持如下API: 创建实例 删除实例 获取参数模板列表 创建参数模板 修改参数模板参数 应用参数模板 修改指定实例的参数 查询实例参数配置 获取指定参数模板的参数 删除参数模板 2020-08-30 第六次正式发布。 GeminiDB Influx新增2个监控指标上报CES。 GeminiDB Redis新增监控30个指标。 查询实例列表和详情,查询数据库版本信息和查询数据库规格,支持GeminiDB Mongo实例。 新增获取参数模板列表 新增创建参数模板 新增修改参数模板参数 新增应用参数模板 新增修改指定实例的参数 新增查询实例参数配置 新增获取指定参数模板的参数 新增删除参数模板 新增变更实例规格 新增修改实例的管理员密码 新增修改实例名称 新增变更实例安全组 新增查询自动备份策略 新增设置自动备份策略 2020-07-30 第五次正式发布。 新增包周期实例,创建实例和查询实例列表和详情 新增扩容实例存储容量 新增扩容实例的节点数量 新增缩容实例的节点数量 2020-04-30 第四次正式发布。 新增监控指标。 2020-03-31 第三次正式发布。 新增策略和授权项说明 新增云数据库 GeminiDB授权项说明 新增部分监控指标。 2020-03-13 第二次正式发布。 新增查询数据库慢日志 2019-11-18 第一次正式发布。
-
在费用中心续费 登录管理控制台。 单击“控制台”页面上方“费用与成本”,在下拉菜单中选择“续费管理”。 进入“续费管理”页面。 自定义查询条件。 可在“手动续费项”、“自动续费项”、“到期转按需项”、“到期不续费项”页签查询全部待续费资源,对资源进行手动续费的操作。 图3 续费管理 所有需手动续费的资源都可归置到“手动续费项”页签,具体操作请参见如何恢复为手动续费。 手动续费资源。 单个续费:在资源页面找到需要续费的资源,单击操作列的“续费”。 图4 单个续费 批量续费:在资源页面勾选需要续费的资源,单击列表左上角的“批量续费”。 图5 批量续费 选择续费时长,判断是否勾选“统一到期日”,将到期时间统一到各个月的某一天(详细介绍请参见统一包年/包月资源的到期日)。确认配置费用后单击“去支付”。 图6 续费确认 进入支付页面,选择支付方式,确认付款,支付订单后即可完成续费。
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 action 是 String 操作标识。取值: create,表示添加标签。 delete,表示删除标签。 tags 是 Array of BatchTagActionTagOption objects 标签列表。 表4 BatchTagActionTagOption 参数 是否必选 参数类型 描述 key 是 String 标签键。最大长度128个unicode字符,不能为null或者空字符串,不能为空格,校验和使用之前会自动过滤掉前后空格。 字符集:0-9,A-Z,a-z,“_”,“-”,中文。 value 否 String 标签值。最大长度255个unicode字符,可以为空字符串。 字符集:0-9,A-Z,a-z,“_”,“.”,“-”,中文。 “action”值为“create”时,该参数必选。 “action”值为“delete”时,该参数可选。 说明: 删除标签时,如果value有值,则按照key/value匹配删除;如果value没有值,则按照key删除。
-
请求示例 URI样例 POST https://gaussdb-nosql.cn-north-4.myhuaweicloud.com/v3/375d8d8fad1f43039e23d3b6c0f60a19/instances/9136fd2a9fcd405ea4674276ce36dae8in02/tags/action 添加2个标签 { "action" : "create", "tags" : [ { "key" : "key1", "value" : "value1" }, { "key" : "key2", "value" : "value2" } ] } 删除2个标签 { "action" : "delete", "tags" : [ { "key" : "key1" }, { "key" : "key2", "value" : "value3" } ] }
-
接口约束 该接口支持如下数据库实例: GeminiDB Cassandra GeminiDB Mongo GeminiDB Influx GeminiDB Redis 一个数据库实例具有20个标签配额,且标签key唯一。 添加标签时,如果请求体中存在重复key,调用该接口将会报错。 添加标签时,如果请求体中的key与指定实例已有的key重复,将会覆盖已有key对应的value的值。 如果待删除的标签不存在,调用该接口将默认处理成功,删除时,不对标签字符集范围做校验。
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 表3 请求Body参数 参数 是否必选 参数类型 描述 commands 是 Array of objects 高危命令与对应重命名命令。详情请参考表4。 表4 CommandInfo 参数 是否必选 参数类型 描述 origin_name 是 String 原高危命令,当前支持的有:keys、flushdb、flushall、hgetall、hkeys、hvals、smembers name 是 String 当前生效的命令名称,当为空时表示命令禁用,允许修改为30个字符以内数字、字母和下划线的组合 最小长度:0 最大长度:30
-
请求示例 URI样例 PUT https://{Endpoint}/v3/054e292c9880d4992f02c0196d3ea468/instances/41409e5a49ee467287d738b9b6d0adcbin12/high-risk-commands 修改高危命令 { "commands" : [ { "origin_name" : "keys", "name" : "newKeys" }, { "origin_name" : "flushdb", "name" : "newFlushdb" }, { "origin_name" : "flushall", "name" : "newFlushall" }, { "origin_name" : "hgetall", "name" : "newHgetall" }, { "origin_name" : "hkeys", "name" : "newHkeys" }, { "origin_name" : "hvals", "name" : "newHvals" }, { "origin_name" : "smembers", "name" : "newSmembers" } ] }
-
创表参数 吞吐量参数:Z00_THROUGHPUT,默认值为 big。 低吞吐量 CREATE TABLE test1 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'small'; 中吞吐量 CREATE TABLE test2 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'medium'; 高吞吐量 CREATE TABLE test3 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'big'; 指定表tokens数目:表示创建表时候表的tokens数目,tokens数目必须大于1。 CREATE TABLE test4 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z01_TABLE_TOKENS = 24; 表参数:Z00_BUFFER_SIZE 、Z00_BUFFER_NUMBER(不推荐使用)。 创表时可以指定存储层memtable的大小和个数。 Z00_BUFFER_SIZE为map类型,指定对应cf name和value值 ,value值取值范围2~32之间。 CREATE TABLE test6 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_SIZE = {'default': 16}; Z00_BUFFER_NUMBER为map类型,指定对应cf name和value值,取值范围2~8之间。 CREATE TABLE test5 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_NUMBER = {'default': 3}; 如果创建完成的表需要调整表规格,比如达到表上限,需要将表规格调小,以创建更多的表,则可以通过如下参数调整。 将所有创建表调小为medium,则可以多建一倍数量的表 ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'medium'; 将所有创建表调小为small,则可以多建两倍数量的表 ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'small';
-
创表数目计算方式 根据实例规格不同,创表需要的内存稍有不同,以4U16GB实例为例,可以简单按照单张表768MB计算。 所以创表数目上限=集群可用总内存/单表所需内存 奇数数目集群 集群可用内存=节点内存/2*(N/2+1) 偶数数目集群 集群可用内存=节点内存/2*(N/2) 例如: 3节点4U16GB实例的可用内存=16/2*(3/2+1)=16GB 创表数目上限=16*1024MB/768MB=21 4节点4U16GB实例的可用内存=16/2*(4/2)=16GB 创表数目上限=16*1024MB/768MB=21 5节点4U16GB实例可用内存=16/2*(5/2+1)=24GB 创表数目上限=24*1024MB/768MB=32 根据上述计算方式,4U16GB规格实例的节点个数和表个数对应关系,请参见表1。 表1 4U16GB规格实例的节点数和表个数对应关系 实例规格 节点数量 表个数 4U16GB 3 21 4 21 5 32 6 32 7 42 8 42 9 53 10 53 11 64 12 64 单表占用内存为768MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(768/12)*tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,8U32GB规格实例的节点个数和表个数对应关系,请参见表2。 表2 8U32GB规格实例的节点个数和表个数对应关系 实例规格 节点个数 表个数 8U32GB 3 22 4 22 5 34 6 34 7 45 8 45 9 56 10 56 11 68 12 68 单表占用内存为1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(1440/ 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,16U64GB规格节点个数和表个数对应关系,请参见表3。 表3 16U64GB规格节点个数和表个数对应关系 实例规格 节点个数 表个数 16U64GB 3 45 4 45 5 68 6 68 7 91 8 91 9 113 10 113 11 136 12 136 单表占用内存1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算,换算公式为(1440/ 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。 根据上述计算方式,32U128GB规格节点个数和表个数对应关系,请参见表4。 表4 32U128GB规格节点个数和表个数对应关系 实例规格 节点个数 表个数 32U128GB 3 68 4 68 5 102 6 102 7 136 8 136 9 170 10 170 11 204 12 204 单表占用内存1920MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算。换算公式为 (1920 / 12 )* tokens个数。 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
-
2019年9月 序号 功能名称 功能描述 阶段 相关文档 1 GeminiDB Cassandra支持实例节点扩缩容 随着业务数据的增加,原来申请的节点数量不能满足需求时,用户可以为实例添加节点。 商用 添加节点 2 GeminiDB Cassandra支持扩容实例的磁盘容量 随着业务数据的增加,原来申请的数据库存储容量不能满足需求,GeminiDB Cassandra支持为实例扩容磁盘。 商用 扩容磁盘
-
典型应用 互联网应用 GeminiDB Cassandra的超强读写、弹性扩展,以及高强度的故障容忍,能够支持大并发低延时的访问需求,具备高可用和弹性扩容能力,使其适用于具有产品目录、推荐、个性化引擎、交易流水等功能的大数据量的互联网网站。 优势: 大规模集群部署 单套集群最大支持100个节点部署,适用于写入规模和数据量大的互联网场景。 高可用易扩展 单节点宕机不会影响整个集群的可用性,计算节点和存储空间可独立快速扩容,扩容期间业务无感知。 实时高并发写入 实时高并发写入,适合电商领域高并发海量订单,写入性能高。 工业数据采集 GeminiDB Cassandra兼容Cassandra生态,帮助客户整合多种终端采集来源,实时存储采集的指标,提供聚合分析,实时统计等功能。 优势: 大规模集群部署 适用于工业制造海量指标采集存储的场景。 高可用高性能 支持7*24小时在线持续高并发写入。 极速备份恢复 通过存储快照技术实现极速备份恢复能力。 分钟级扩容 轻松应对作业/项目高峰。
-
2019年9月 序号 功能名称 功能描述 阶段 相关文档 1 GeminiDB Cassandra支持实例节点扩缩容 随着业务数据的增加,原来申请的节点数量不能满足需求时,用户可以为实例添加节点。 商用 添加节点 2 GeminiDB Cassandra支持扩容实例的磁盘容量 随着业务数据的增加,原来申请的数据库存储容量不能满足需求,GeminiDB Cassandra支持为实例扩容磁盘。 商用 扩容磁盘
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格