11

ConfigCat – 动态改变程序的配置

 4 years ago
source link: https://www.taterli.com/6198/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

有没有过一种这样的需求,你发布了一个软件,但是有时候软件需要升级,查询版本号,维护数据,或者说,更新某一项参数,或者说,对某些参数负载均衡,比如某些服务器地址,但不依赖DNS(可能存在污染)

Configcat解决这个问题,免费版本有2个,除了标记数量有区别之外,其他是一样的,直接注册允许10个标记,通过GitHub学生注册允许1000个标记,其他没什么区别.更多套餐详情看首页就可以了.

Configcat首页:https://configcat.com/

创建好后就是创建Product.

73i2qub.png!web

接着创建环境,比如说是测试环境还是产品环境,免费版本可以设置两个,后续可以切换这个环境来实现功能.

nUjuYfE.png!web

接着每个环境都有配置文件,切换配置文件,也能切换一些配置.

Q7bYraI.png!web

看到可以设置4种不同的Flag.

JZ7NN3u.png!web

比如我就设置一个开关量.

MzYNzqi.png!web

下面给出了多个语言的写法.

NBjqIbn.png!web

我就写了个简单应用,应用中生成UUID,也就是唯一用户ID,然后利用这个唯一用户ID,获取这个用户是否处于内测状态.

import configcatclient
import uuid
from configcatclient.user import User

userid = uuid.uuid1()
user_object = User(userid)
configcat_client = configcatclient.create_client('EoXXCFH18gHftcXbSibRkg/LlhW7HPQMkKB9_wiQhHSMQ')
isInternalUser = configcat_client.get_value('isInternalUser', False, user_object)

print('当前是否为内测状态: ' + str(isInternalUser))

很明显,运行结果当然是否了,因为我们程序里面就没有内测开启.

vaeMZnE.png!web

如果我现在开关波到ON,自然获取到True,如果我只想20%的人进入内测呢?

vIr6NnR.png!web

程序上我们也模拟一些人.

import configcatclient
import uuid
from configcatclient.user import User

IsInternalUser = 0
NotInternalUser = 0

while True:
    userid = uuid.uuid1()
    user_object = User(userid)
    configcat_client = configcatclient.create_client('EoXXCFH18gHftcXbSibRkg/LlhW7HPQMkKB9_wiQhHSMQ')
    isInternalUser = configcat_client.get_value('isInternalUser', False, user_object)

    if(isInternalUser):
        IsInternalUser = IsInternalUser + 1
    else:
        NotInternalUser = NotInternalUser + 1

    print("内测用户:%d 非内测用户:%d 内测用户占比:%.2f %%" % (IsInternalUser,NotInternalUser,(100 * IsInternalUser) / (IsInternalUser + NotInternalUser)))

我们看看一段时间过后,是不是大约20%的内测用户.

ZjuQNvf.png!web

如果我们现在上调比例,这个比例自然也就上涨,这样可以实现逐步开放内测,当然也可以是其他标记.

另一个功能,比如发布版本号,传统发布版本号的方式很多种,比如说自建服务器,GitHub静态文本等等,这里也提供一个方法,就是Configcat的数字标签.

uuQbQbm.png!web

比如说有5个服务器负载均衡,就可以用TEXT方法,比如下图样子.

nuY3IvJ.png!web

这样如果哪个服务器压力太大,或者增减服务器也不用去修改程序,修改Configcat就行了~

每一个配置相当于一个Feature Flag,默认10个在小程序上够用了,更多的话,1000个完全就是用不完了~

另外除了主动获取,还可以被动设置,比如Laravel下,设置PHP路由/configcatchanged来刷新Configcat数据.

z2muEbV.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK