小红书在大促期间,线上流量相比平常激增好多倍, 在这种情况下,我们通常会选择服务降级,即关闭一些不必要的请求,来降低服务端的负载。 原先我们关于业务降级信息是写在配置文件中,修改降级信息需要修改配置文件上线才可生效,在大促这样的关键时间点这样操作具有一定的风险性。所以我们在思考有什么简单易行的方式。有考虑过使用配置管理服务disconf(见我之前的文章分享),但 disconf 还不提供 python 版实时通知服务。小红书线上有现成运维的 zookeeper,于是我们思考可以往 zk 中存储降级配置~
可能有人会疑惑写 zk 直接调用 api 就好了为啥还需要提供页面操作。这是防止操作同学调用 api 时误写错 data,所以我们开发了 web 页。负责实时降级的同学只需要在页面点击即可,操作时我们会有一定的弹窗提示是否需要操作,降低失误可能。
configcenter: 只需修改 application.yml 中 zookeeper 配置即可(确保 zk 和部署服务能连通)
config_center_client 使用说明:
from config_center_client import register_myself, config
先 register 再调用 config 获取值
register_myself('Test')
degrade_level = config('config')
1、 /api/v1/service/{name} GET 列出所有serviceName=name的配置信息
response data:
{
"success": true,
"data":[
{
"service": "Test",
"config": "config",
"v alue": true
}
]
}
2、/api/v1/service GET 列出所有服务的配置信息
response data:
{
"success": true,
"data":[
{
"service": "Test1",
"config": "config1",
"value": true
},
{
"service": "Test2",
"config": "config2",
"value": false
}
]
}
3、/api/v1/service POST 写入指定服务的配置信息,并返回该服务的所有配置
request data:
{
"service": "Test1",
"config": "config1",
"value": true
}
response data:
{
"success": true,
"data":[
{
"service": "Test1",
"config": "config1",
"value": true
},
{
"service": "Test1",
"config": "config2",
"value": false
}
]
}
>>>>>>tips: 若请求失败返回data:
{
"success": false,
"err_msg": "****"
}
以上就是我们降级平台的介绍啦~当然除了存储降级信息外在此基础上稍加开发还可以做成通用的配置中心存储配置信息。