更新时间:2024-01-05 gmt 08:00

开发运维规范-凯发k8国际娱乐官网入口

本章节结合华为云数据库开发运维经验,从开发和运维角度为您提供geminidb redis产品使用规范。根据这些建议,您可以有效评估以及改善业务系统稳定性。

开发规范

在开发业务程序时需重点关注以下开发规范,避免因使用方式不当影响业务稳定。

表1 geminidb redis开发规范

编号

开发规范

说明

1

业务程序需具备合理的自动重连机制。

在规格变更、补丁升级、ha倒换、网络链路抖动或丢包等场景中,业务程序与数据库实例的连接可能出现短暂中断。业务程序应当支持自动重连。
说明:

尽量避免使用lettuce客户端,因为该客户端在请求多次超时后,不再发起自动重连。建议使用更稳定的jedis客户端替换lettuce客户端。

2

针对部分重要操作,业务程序需要具备合理的命令重试机制。

在连接中断或请求超时等场景,业务程序请求可能会短时内执行失败。因此,针对部分重要操作需要设计业务容错机制,使用合理的命令重试间隔和次数,确保重要数据写入或修改成功。

3

使用正确的高可用连接地址,避免单点故障场景影响业务。

业务程序内网连接数据库时,应使用负载均衡地址,实现高可用。应避免将业务程序直连到某个单独的计算节点。

说明:

针对公网访问数据库的场景,同样应避免将业务程序直连到某个单独的计算节点,请参考使用外置elb进行配置。

4

使用连接池,避免使用单连接以及大量短连接。

由于单连接有高可用风险,而短连接性能差且会消耗大量数据库cpu和网络资源,容易造成瓶颈,因此建议业务程序使用主流sdk的连接池连接geminidb redis实例。

5

当实例中key数量大于1000个时,禁止执行keys命令

keys命令是典型的高危命令,会一次性获取整个实例中的全部数据内容并返回给客户端。当实例中key数量较多时,执行keys命令会引起请求阻塞或实例状态异常。

6

避免元素value过大,避免单key包含的元素数量过多。

根据最佳实践,建议string类型key的value小于10kb,hash/list/zset/set等类型key中包含元素数小于5000,且单个元素value小于1kb。

说明:

与社区redis一样,geminidb redis对大key存储并不做严格约束,因此需要用户根据规范合理开发业务程序。

7

避免单个命令中一次性操作过多元素或产生过大的网络收发包。

  • 建议mset/mget等批量操作key命令中同时操作的key数量小于1000。
  • 建议hmset、hgetall、lrange、zadd、zrange等同时操作key中多元素的命令同时操作元素数量小于1000。
  • 由于社区redis语法中zremrangebyscore命令不提供limit参数,无法控制单次删除的元素数量,建议使用zrangebyscore (带limit) zrem的先查后删方式替代。
    说明:

    与社区redis一样,geminidb redis对大key访问并不做严格约束,因此需要用户根据规范合理开发业务程序。

8

合理打散key分布,避免出现热点key或热点hashtag瓶颈。

对单个key或具有同hashtag的一组key的高频访问依赖会产生热key问题,容易引发计算资源倾斜,请求排队,响应变慢等瓶颈问题。热key的产生往往来自业务设计对key的拆分程度不足,需要业务拆分优化。

说明:

反面案例:

  • 对全局超大排行榜高频集中访问。
  • 全实例中仅保存几个hash key,每个key用于存储一整张表格的信息量。
  • 商品库存业务中,全实例key仅使用少量hashtag分桶,导致热点hashtag查询排队。

9

单次pipeline中打包命令数量建议小于300条。

使用pipeline时应遵循“单次少量,分多次”原则。不合理的pipeline用法将可能导致实例cpu、带宽等资源瓶颈,甚至引起请求阻塞。
说明:

与社区redis相比,geminidb redis对pipeline的使用并不做严格约束,因此需要用户根据规范合理开发业务程序。

10

避免在lua脚本中引入高耗时代码。

使用lua脚本时应遵循轻量化原则,避免引入执行命令次数过多、长时间sleep、大的循环语句等不合理用法。

11

避免在事务中打包过多命令。

使用事务时应遵循轻量化原则,避免单次事务中打包过多命令或复杂度过高的命令。执行的事务中包含命令过多会引起请求阻塞或实例状态异常。

12

避免在不同数据类型下使用相同的key名称。

社区redis强制禁止在不同数据类型下使用相同的key名称。虽然geminidb redis对此不做强制约束,但开发时应当避免此类用法,保持程序清晰和易维护。

运维规范

在日常运维工作中需关注以下运维规范,预防潜在风险并掌握关键应急方案。

表2 geminidb redis运维规范

编号

运维规范

说明

1

确保您的华为云账号绑定的电话号码、电子邮箱等凯发k8国际娱乐官网入口的联系方式有效,以便及时收到服务相关通知信息。

华为云服务会在变更、升级、故障通知等必要场景通过网站、邮箱、短信、站内信等方式向您送达通知信息,请确保账号绑定的凯发k8国际娱乐官网入口的联系方式有效。

2

订阅重要告警

  • 订阅例如大key访问、存储容量高、连接数使用率高、cpu使用率高等告警,从而在数据库实例出现风险时提早发现并及时处理。
  • 推荐告警配置请参考设置告警规则

3

使用负载均衡地址访问时,需要配置访问控制管理,而不是安全组。

负载均衡地址不支持安全组,创建完成后请配置ip访问控制,如未配置白名单,所有与vpc互通的ip地址均可访问实例。具体操作请参考。

4

配置实例自动扩容

geminidb redis支持自动扩容,可以有效避免数据量突增问题。建议参见开启自动扩容。

5

保持负载处于健康水位

  • 如业务数据量长期高于80%,建议及时扩容。
  • 如业务流量超过实例qps基准,或cpu利用率长期高于80%,建议及时升级规格或增加节点,避免过载影响业务访问。
  • 在业务流量、连接数等指标突增导致实例算力资源超载的紧急场景,应通过水平添加节点快速提升集群算力。垂直升配cpu规格为滚动模式,耗时较长,不建议用于紧急场景。

6

重命名高危命令

对于高危命令(如flushall、keys),建议您禁用或重命名,以增强实例的安全性。具体操作请参考文档。

7

定期进行大key在线诊断

大key访问是redis使用中的常见问题。建议在控制台定期查看实例的大key诊断报告。具体操作请参考。

9

割接结束后执行dbsize

dbsize可以保证最终一致性,例如,在割接场景,无过期key,数据导入完成后的的数分钟执行,可得到准确值,确保数据导入前后的一致。

分享:
网站地图