跳到主要内容

按百分比灰度放量

我们将带领你使用FeatureProbe的平台,控制一个后端/前端程序,让后端/前端程序对接收到的用户请求,按百分比展示新功能。

在平台创建开关

  1. 登录我们提供的FeatureProbe演示平台,如果是第一次登录,请输入邮箱。后续可以继续使用你的邮箱访问到属于你的数据。
  2. 点击+开关新建一个开关 add
  3. 名字和标识都设置为tutorial_rollout,点击创建并发布create
  4. 从开关列表中点击tutorial_rollout,打开设置详情页 list
  5. 将默认规则的返回值更改为按百分比放量return
  6. 设置 10% 打开开关(返回true), 90% 关闭开关(返回false), 状态设置为 生效10% true
  7. 点击下方发布按钮,并确认变更 confirm

此时平台上就操作就完成了,我们创建了一个管理灰度发布的开关,下面我们要在程序中使用它,看看实际效果。

提示

开关创建后,可以在后端程序中访问,也可以在前端程序中访问,以下我们分别介绍如何在 后端代码前端代码 中使用这个开关,两者相互独立,您可以根据需要选择阅读您感兴趣的部分。

控制后端程序

我们提供一个后端的代码示例,你可以从这里开始体验后端代码如何使用开关。

编写代码

  1. 按你熟悉的语言,下载并打开相应的后端示例代码
git clone https://gitee.com/FeatureProbe/server-sdk-java.git
cd server-sdk-java

用编辑器打开src/main/java/com/featureprobe/sdk/example/FeatureProbeDemo.java文件。

  1. 打开FeatureProbe平台项目列表页面, 可以在开关详情页点击项目来打开 project
  2. 复制服务端SDK密钥sdk key
  3. 服务端SDK密钥以及FeatureProbe网址 ("https://featureprobe.io/server") 填入后端代码相应变量中
src/main/java/com/featureprobe/sdk/example/FeatureProbeDemo.java
    private static final String FEATURE_PROBE_SERVER_URL = "https://featureprobe.io/server";
private static final String FEATURE_PROBE_SERVER_SDK_KEY = // 填入 服务端SDK密钥 ;
  1. 加入以下代码,模拟100个用户访问这个开关
src/main/java/com/featureprobe/sdk/example/FeatureProbeDemo.java
    public static void main(String[] args) throws IOException {

Logger root = (Logger)LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.WARN);

final FPConfig config = FPConfig.builder()
.remoteUri(FEATURE_PROBE_SERVER_URL)
.build();

// Init FeatureProbe, share this FeatureProbe instance in your project.
final FeatureProbe fpClient = new FeatureProbe(FEATURE_PROBE_SERVER_SDK_KEY, config);

//
final String YOUR_TOGGLE_KEY = "tutorial_rollout";
for (Integer i = 0; i < 100; i++) {
FPUser user = new FPUser();
Boolean isOpen = fpClient.boolValue(YOUR_TOGGLE_KEY, user, false);
System.out.println("feature for user " + i + " is :" + isOpen);
}
fpClient.close();
}
  1. 运行编辑后的服务端程序
mvn package
java -jar ./target/server-sdk-java-1.4.0.jar

验证结果

从命令行log可以看到,有大约10%的用户进入了开关,也就是拿到了返回值true。

log示例
feature for user 0 is :false
feature for user 1 is :true
feature for user 2 is :false
feature for user 3 is :false
feature for user 4 is :false
feature for user 5 is :false
feature for user 6 is :false
feature for user 7 is :false
feature for user 8 is :false
feature for user 9 is :false
feature for user 10 is :false
feature for user 11 is :true
feature for user 12 is :false
feature for user 13 is :false
feature for user 14 is :false
feature for user 15 is :false
feature for user 16 is :false
feature for user 17 is :false
feature for user 18 is :false
feature for user 19 is :false
feature for user 20 is :false
提示

每次运行程序,进入开关的用户可能是不同的,如果需要同样id用户总是拿到相同的开关结果,需要使用FPUser的stableRollout接口

可以回到平台的开关设置页面,调整灰度比例,然后重新运行服务端程序,看看log内进入开关的比例是否有变化。

控制前端程序

我们提供一个前端的js代码示例,你可以从这里开始体验前端代码如何使用开关。

编写代码

  1. 下载示例代码
git clone https://gitee.com/FeatureProbe/client-sdk-js.git
cd client-sdk-js
  1. 打开平台获取client sdk key

    信息

    点击『项目』Tab,可以进入『项目』列表,获取各类SDK key,以及修改项目和环境信息。

    client sdk key

  2. 打开 example/index.html 填入 客户端SDK密钥 以及 FeatureProbe网址 ("https://featureprobe.io/server")

example/index.html
  const fpClient = new featureProbe.FeatureProbe({
remoteUrl: "https://featureprobe.io/server",
clientSdkKey: // Paste client sdk key here,
user,
refreshInterval: 5000,
});
  1. 模拟当前用户访问开关 tutorial_rollout ,直接获取开关状态
example/index.html
  <script>
const user = new featureProbe.FPUser();
const fpClient = new featureProbe.FeatureProbe({
remoteUrl: "https://featureprobe.io/server",
clientSdkKey: // Paste client sdk key here,
user,
refreshInterval: 5000,
});

fpClient.start();
fpClient.on("ready", function() {
const boolValue = fpClient.boolValue("tutorial_rollout", false);
document.getElementById("boolean-result").innerText = boolValue;
});
</script>

验证结果

浏览器打开 index.html , 手动刷新页面(模拟用户多次访问),可以看到页面按配置的比例可以获得 truefalse 的返回值。

页面展示示例
FeatureProbe JS SDK demo
This is a simple front-end-only application using FeatureProbe JS SDK.

boolean type
FeatureProbe evaluation boolean type toggle result is : true

可以回到平台的开关设置页面,调整灰度比例,然后重新刷新页面,看看拿到的 true/false 比例是否有变化。

提示

如果希望对同一个用户,不管他如何刷新,总是被灰度到。参考用户稳定进入灰度组,传入用户的唯一ID。