云服务器内容精选

  • 热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支持为实例扩容磁盘。 商用 扩容磁盘