云数据库 GEMINIDB-开发运维规范:开发规范
开发规范
在开发业务程序时需重点关注以下开发规范,避免因使用方式不当影响业务稳定。
编号 |
开发规范 |
说明 |
---|---|---|
1 |
业务程序需具备合理的自动重连机制。 |
在规格变更、补丁升级、HA倒换、网络链路抖动或丢包等场景中,业务程序与数据库实例的连接可能出现短暂中断。业务程序应当支持自动重连。
说明:
尽量避免使用Lettuce客户端,因为该客户端在请求多次超时后,不再发起自动重连。建议使用更稳定的Jedis客户端替换Lettuce客户端。 |
2 |
业务程序需使用连接池并配置足够连接数。 |
为避免并发激增时程序获取不到连接,建议业务程序使用连接池,并配置合理的连接池参数。客户端的连接池推荐配置请参考客户端连接池参数配置。 |
3 |
针对部分重要操作,业务程序需要具备合理的命令重试机制。 |
在连接中断或请求超时等场景,业务程序请求可能会短时内执行失败。因此,针对部分重要操作需要设计业务容错机制,使用合理的命令重试间隔和次数,确保重要数据写入或修改成功。 |
4 |
使用正确的高可用连接地址,避免单点故障场景影响业务。 |
业务程序内网连接数据库时,应使用负载均衡地址,实现高可用。应避免将业务程序直连到某个单独的计算节点。
说明:
针对公网访问数据库的场景,同样应避免将业务程序直连到某个单独的计算节点,请参考通过弹性负载均衡绑定弹性公网IP连接实例使用外置ELB进行配置。 |
5 |
使用连接池,避免使用单连接以及大量短连接。 |
由于单连接有高可用风险,而短连接性能差且会消耗大量数据库CPU和网络资源,容易造成瓶颈,因此建议业务程序使用主流SDK的连接池连接GeminiDB Redis实例。 |
6 |
当实例中Key数量大于1000个时,禁止执行Keys命令 |
Keys命令是典型的高危命令,会一次性获取整个实例中的全部数据内容并返回给客户端。当实例中Key数量较多时,执行Keys命令会引起请求阻塞或实例状态异常。 |
7 |
避免元素Value过大,避免单Key包含的元素数量过多。 |
根据最佳实践,建议String类型Key的Value小于10KB,Hash/List/Zset/Set等类型Key中包含元素数小于5000,且单个元素Value小于1KB。
说明:
与社区Redis一样,GeminiDB Redis对大Key存储并不做严格约束,因此需要用户根据规范合理开发业务程序。 |
8 |
避免单个命令中一次性操作过多元素或产生过大的网络收发包。 |
|
9 |
合理打散Key分布,避免出现热点Key或热点hashtag瓶颈。 |
对单个Key或具有同hashtag的一组Key的高频访问依赖会产生热Key问题,容易引发计算资源倾斜,请求排队,响应变慢等瓶颈问题。热Key的产生往往来自业务设计对Key的拆分程度不足,需要业务拆分优化。
说明:
反面案例:
|
10 |
单次Pipeline中打包命令数量建议小于100条。 |
使用Pipeline时应遵循“单次少量,分多次”原则。
根据使用经验,并非Pipeline打包数量越大性能越好,不合理的Pipeline用法将可能导致实例CPU、带宽等资源瓶颈,甚至引起请求阻塞。
说明:
与社区Redis相比,GeminiDB Redis对Pipeline的使用并不做严格约束,因此需要用户根据规范合理开发业务程序。 |
11 |
避免在Lua脚本中引入高耗时代码。 |
使用Lua脚本时应遵循轻量化原则,避免引入执行命令次数过多、长时间sleep、大的循环语句等不合理用法。 |
12 |
避免在事务中打包过多命令。 |
使用事务时应遵循轻量化原则,避免单次事务中打包过多命令或复杂度过高的命令。执行的事务中包含命令过多会引起请求阻塞或实例状态异常。 |
13 |
避免在不同数据类型下使用相同的Key名称。 |
社区Redis强制禁止在不同数据类型下使用相同的Key名称。虽然GeminiDB Redis对此不做强制约束,但开发时应当避免此类用法,保持程序清晰和易维护。 |
14 |
谨慎使用批量删除命令 |
若针对一个包含大量元素的LIST/ZSET对象使用批量删除命令(例如LREM/LTRIM/ZREMBYSCORE等),要避免在单条命令中删除过多的数据(比如删除数万或者数十万元素)。过多的数据删除可能导致该条删除命令耗时过长,影响其它正常命令,或者导致系统内存OOM进程重启,实例异常;极端场景下,造成服务进程反复拉起失败。 |
- ModelArts推理部署_OBS导入_模型包规范-华为云
- GaussDB安装_GaussDB数据库安装_高斯数据库安装-华为云
- GaussDB测试_GaussDB数据库测试_高斯数据库测试-华为云
- 华为云CodeArts API_API质量_API规范_API审核
- GaussDB数据库搭建_GaussDB怎么样_高斯数据库搭建
- GaussDB数据库怎么转换类型_GaussDB安装_高斯数据库转换类型
- ModelArts推理部署_创建AI应用_自定义镜像规范-华为云
- GaussDB原理_GaussDB数据库原理_高斯数据库原理-华为云
- GaussDB数据库模型_GaussDB是什么_高斯数据库模型
- 华为云CodeArts API_如何在CodeArts API中设置API的设计规范?