产品与解决方案 大促稳定性之线上动态降级平台

ymsun · 2018年03月20日 · 最后由 Gakki 回复于 2018年03月23日 · 1530 次阅读

使用背景

小红书在大促期间,线上流量相比平常激增好多倍, 在这种情况下,我们通常会选择服务降级,即关闭一些不必要的请求,来降低服务端的负载。 原先我们关于业务降级信息是写在配置文件中,修改降级信息需要修改配置文件上线才可生效,在大促这样的关键时间点这样操作具有一定的风险性。所以我们在思考有什么简单易行的方式。有考虑过使用配置管理服务disconf(见我之前的文章分享),但 disconf 还不提供 python 版实时通知服务。小红书线上有现成运维的 zookeeper,于是我们思考可以往 zk 中存储降级配置~

简介

  • configcenter:基于 Java Spring 框架:主要支持往 zookeeper 中增加、修改降级信息,还支持查询不同节点降级数据。有简单 web 前端支持,可通过前端页面新增、修改和查询。
  • 获取降级信息 config_center_client:由于业务需要提供 python,供业务降级逻辑调用。在本地 cache 了服务关注的降级信息,每次 zk 上数据变化时,触发事件更新本地数据。读取数据时,直接读取本地内存缓存的值,保证了高性能并且即使 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": "****"
}

优化与改进

以上就是我们降级平台的介绍啦~当然除了存储降级信息外在此基础上稍加开发还可以做成通用的配置中心存储配置信息。

gitHub 地址:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册