文章目录

    • 背景
    • Flagsmith 和 Unleash
    • 什么是unleash
    • 架构
      • Unleash Edge
    • 安装和使用
    • Unleash SDKs
    • 开放API Tokens访问
      • **`Server-side SDK (CLIENT)`**
      • **查询所有 Feature Toggles**
      • **查询特定 Toggle**
    • API token types
      • Client tokens
      • Frontend tokens
      • Personal access tokens
      • Service account tokens
    • go sdk demo

背景

功能管理是持续发布/持续部署 ( CI/CD ) 流程的重要组成部分,它允许开发人员与一小部分用户逐步测试新功能、打开或关闭功能以及进行 A/B 测试,以深入了解什么是最有效的,而无需发布一个全新的版本。

对项目内的功能启用进行动态控制, Feature Toggle,

Feature Toggle,顾名思义就是表示 Feature 的开关,通常可以使用 Feature Toggle 来管理不同功能开关,并且可以根据不同的参数对开关进行动态配置。在项目中引入 Feature Toggle 可以更好的对于功能进行灰度发布和定向测试。

Netflix的开源项目Unleash正是这样一款工具,它提供了一种动态管理应用程序功能开关的方式,帮助企业更有效地进行灰度发布、A/B测试和其他迭代策略。

开源方案 Unleash。Unleash 是一个开源的 Feature Toggle 服务。

Flagsmith 和 Unleash

Flagsmith 视频介绍:https://www.reddit.com/r/selfhosted/comments/o5hyug/self_hosted_feature_flag_and_remote_config/?tl=zh-hans

场景FlagsmithUnleash
快速集成适合需要 SaaS 或快速启动的项目适合愿意自托管且需要灵活策略的团队
复杂策略支持 A/B 测试和用户细分支持更复杂的自定义策略(如渐进式发布)
边缘计算本地评估减少延迟依赖中心化服务器
动态配置支持远程配置参数仅支持功能开关
特性FlagsmithUnleash
开源版本完全开源(MIT 许可证)完全开源(Apache 2.0)
企业版提供付费 SaaS 和企业支持无官方 SaaS,但有商业支持选项
社区支持活跃的社区和文档社区活跃,文档详细
  • 选择 Flagsmith 如果
    • 需要 SaaS 解决方案或快速启动。
    • 需要内置 A/B 测试或动态配置。
    • 优先考虑本地评估(如移动端或边缘场景)。
  • 选择 Unleash 如果
    • 需要完全自托管和灵活的自定义策略。
    • 专注于功能开关和渐进式发布。
    • 愿意维护自己的基础设施。

什么是unleash

官方文档:https://docs.getunleash.io/
官方仓库:https://github.com/Unleash

Unleash 是一个开源的功能标志(feature flags) 和管理平台,允许您在不中断服务的情况下安全地发布和测试新功能。它提供了一个集中式界面,用于管理和控制哪些用户可以看到哪些功能,以及如何启用这些功能。

Unleash 提供了一个简单的管理平台,我们可以在这个管理后台上进行 Feature Toggle 的管理和查看。

通过使用Unleash,您的团队可以在不依赖分支的情况下并行开发多个特性,实现敏捷开发的最佳实践。这个平台支持15个官方SDK和多个社区贡献的SDK,可与任何语言和框架无缝集成。

总而言之,Unleash 帮助团队安全地发布和管理新功能,提升了开发效率,并降低了发布风险。

Unleash广泛应用于以下场景:

  • 快速迭代:启用或禁用代码以控制新特性的发布速度。
  • 灰度发布:逐步向一小部分用户推出新特性,收集反馈并调整。
  • A/B测试:对不同用户群体实施不同的功能版本,比较效果。
  • 风险控制:若发现新特性有问题,可以通过切换关闭旗标来迅速回滚。

架构

在这里插入图片描述

Unleash Edge

官方文档:https://docs.getunleash.io/reference/unleash-edge
https://github.com/Unleash/unleash-edge/blob/main/docs/concepts.md

Unleash Proxy is in maintenance mode. Use Unleash Edge instead.Unleash Proxy 处于维护模式。请改用 Unleash Edge。

Unleash Edge 是 Unleash Proxy 的继任者。如需有关从 Proxy 迁移到 Edge 的帮助,请参阅迁移指南。

Unleash Edge 是 Unleash API 和 SDK 之间快速轻量级的代理层。它充当 Unleash 实例的只读副本,旨在帮助您扩展 Unleash。它允许您支持数千个连接的 SDK,而无需增加对 Unleash 实例发出的请求数量。

  • 使用独立于 Unleash 服务器的 Unleash Edge 进行扩展,以支持任意数量的前端客户端,而不会使您的 Unleash 实例过载.
  • 前端 SDK 通过 Unleash Edge 连接,以确保隐私、可扩展性和安全性。

Edge 目前支持 2 种不同的模式:

  • Edge - 连接到上游节点(Unleash 实例或另一个 Edge)。 支持动态令牌、指标和 其他高级功能;
  • 离线 - 没有连接到上游节点。完全控制数据和令牌;

Unleash客户端SDK,可以与Unleash前端API或Unleash代理或Unleash Edge一起使用。这使得任何Flutter应用程序使用Unleash变得非常简单。

Fetch toggles
Fetch toggles
Client
Edge
Unleash

主要特性:

  • 性能: Edge 使用内存缓存,可以在靠近最终用户的位置运行。单个实例每秒可以处理成千上万个请求。
  • 弹性:Edge 旨在在重启后继续运行,即使您与 Unleash 服务器断开连接也能保持功能。
  • 安全性: Edge 支持前端应用程序,而不会将敏感数据暴露给最终用户或 Unleash。

您可以在两种不同的模式下运行 Edge:edgeoffline。要了解有关不同模式和其他 Edge 概念的信息,请访问 Concepts。

安装和使用

参照官方文档 进行安装。

要在本地设置 Unleash,您需要在您的机器上安装 git 和 docker。
执行以下命令:

git clone git@github.com:Unleash/unleash.gitcd unleash
docker compose -f docker-compose-enterprise.yml up -d

这会拉取 unleashorg/unleash-enterprise Docker 镜像,并使用 Docker Compose 文件来配置 Unleash 服务器及其数据库。

然后将您的浏览器指向 localhost:4242 并使用以下信息登录:

username: admin
password: unleash4all

Unleash SDKs

官方github:https://github.com/Unleash/unleash?tab=readme-ov-file#unleash-sdks

To connect your application to Unleash you’ll need to use a client SDK for your programming language.要将您的应用程序连接到 Unleash,您需要使用适用于您的编程语言的客户端 SDK。

官方服务端 SDK:

  • Go SDK
  • Java SDK
  • Node.js SDK
  • PHP SDK
  • Python SDK
  • Ruby SDK
  • Rust SDK
  • .NET SDK

官方前端 SDK:

The front-end SDKs connect via Unleash Edge in order to ensure privacy, scalability and security.前端 SDK 通过 Unleash Edge 连接,以确保隐私、可扩展性和安全性。

  • Android Proxy SDK
  • Flutter Proxy SDK
  • iOS Proxy SDK
  • JavaScript Proxy SDK
  • React Proxy SDK
  • Svelte Proxy SDK
  • Vue Proxy SDK

开放API Tokens访问

官方文档:https://docs.getunleash.io/reference/api-tokens-and-client-keys

  • 后端服务(如 Go) → 选择 Server-side SDK (CLIENT) Token。
  • 前端/移动端 → 选择 Client-side SDK (FRONTEND) Token。

Server-side SDK (CLIENT) Token 默认具有 读取权限,可以查询所有 Toggles 的配置。

Client-side SDK (FRONTEND) Token 可能无法访问某些敏感接口(如 /admin/evaluate)。

default:production.5050d6c03962ca79170b3360fc8bf0bb3ccc36e1e50ffe5dc88c7257

Unleash 中创建 Token 时,选择 Token 类型 取决于你的使用场景。根据你的描述,你正在调试一个 Go 语言后端服务(通过 curl 调用 Unleash API),因此应该选择:

  • curl 调用的是 Unleash 的 Server API(如 /api/client/features),属于后端调试行为。
  • 需要读取 Feature Toggles 的完整配置(包括 enabled 状态、variantspayload 等)。

Server-side SDK (CLIENT)

  • 用于 后端服务(如 Go、Node.js、Java 等)连接 Unleash。
  • 你的代码中通过 unleash.GetVariant 调用 Unleash,属于 Server-side SDK 的使用方式。

查询所有 Feature Toggles

curl -X GET \-H "Authorization: YOUR_SERVER_SIDE_TOKEN" \"http://unleash.example.com/api/client/features"

查询特定 Toggle

curl -X GET \-H "Authorization: Bearer YOUR_SERVER_SIDE_TOKEN" \"http://unleash.example.com/api/client/features/FEATURE_NAME"

API token types

官方文档:https://docs.getunleash.io/reference/api-tokens-and-client-keys

Client tokens

客户端 token 的作用域限定为一个或多个项目和一个环境。创建客户端 token 时,您可以授予其对特定项目列表或所有当前或未来项目的访问权限。客户端 token 是机密信息,不得向最终用户公开。

Client tokens cannot be used in frontend SDKs; use frontend tokens instead.

客户端 token 不能在前端 SDK 中使用;请改用 前端 token。

Frontend tokens

使用前端 token 将 前端 SDK 通过 Unleash Frontend API 或 Unleash Edge 连接到 Unleash。它们授予用户以下权限:

  • Reading enabled flags for a given context针对给定上下文的读取启用标志
  • Registering applications with the Unleash server向 Unleash 服务器注册应用程序
  • Sending usage metrics

前端令牌的作用域限定为一个或多个项目以及单个环境。创建前端令牌时,您可以授予其对特定项目列表的访问权限,或授予其对所有当前或未来项目的访问权限。前端令牌不被认为是秘密的,可以安全地暴露在客户端。

前端令牌不能在服务器端 SDK 中使用;请改用 客户端令牌。

Personal access tokens

个人访问令牌反映了创建它们的用户所拥有的权限。如果用户的权限发生更改(例如通过添加自定义角色),令牌会自动更新以匹配新的权限。 您可以使用个人访问令牌进行测试、调试或为自动化工具提供临时访问权限。

当您使用个人访问令牌修改资源时,事件会记录该操作的令牌创建者的姓名。

具有生命周期的个人访问令牌会在过期后失效并停止工作。虽然您可以将令牌设置为永不过期,但我们建议使用具有过期日期的令牌,以遵循安全最佳实践。

个人访问令牌不适用于客户端 SDK,因为它们未绑定到环境,可能会过期或其权限可能会更改。请改用 客户端令牌。

Service account tokens

服务帐户令牌为集成和自动化工具提供 API 访问权限。 要了解更多信息,请访问服务帐户。

使用 Edge 将客户端 SDK 连接到 Unleash

To connect a client-side SDK to Unleash using Unleash Edge, you need both a client and frontend token:要想使用 Unleash Edge 将客户端 SDK 连接到 Unleash,你需要一个 客户端 token 和一个 前端 token

  • 客户端 SDK 需要一个前端 token 才能与 Edge 通信。
  • Edge 需要一个客户端 token 才能与 Unleash 服务器通信。

Diagram showing the types of tokens needed to connect a client-side SDK with Edge, and Edge with Unleash

go sdk demo

package mainimport ("fmt""log""net/http""time""github.com/Unleash/unleash-client-go/v3""github.com/Unleash/unleash-client-go/v3/context"
)func main() {// 初始化 Unleash 客户端err := unleash.Initialize(unleash.WithAppName("my-app"),unleash.WithUrl("http://127.0.0.1:4242/api"),unleash.WithCustomHeaders(http.Header{"Authorization": []string{"x:x.xxx"},}),unleash.WithRefreshInterval(5*time.Second),unleash.WithMetricsInterval(5*time.Second),unleash.WithListener(&unleash.DebugListener{}),)if err != nil {log.Fatalf("初始化失败: %v", err)}// 设置超时等待ready := make(chan struct{})go func() {unleash.WaitForReady()close(ready)}()// 等待就绪或超时select {case <-ready:fmt.Println("Unleash client is ready")case <-time.After(10 * time.Second):log.Fatal("Timeout waiting for Unleash client to be ready")}// 测试用例: 基于参考代码的请求上下文testContext("测试请求", context.Context{UserId: "123",Properties: map[string]string{"UserId":        "123"},})// 保持程序运行一段时间以观察结果time.Sleep(15 * time.Second)
}func testContext(name string, ctx context.Context) {isEnabled := unleash.IsEnabled("someToggle", unleash.WithContext(ctx))fmt.Printf("\n=== %s ===\n", name)fmt.Printf("Feature Enabled: %v\n", isEnabled)fmt.Printf("Context:\n")fmt.Printf("  UserId: %s\n", ctx.UserId)fmt.Printf("  Properties:\n")for k, v := range ctx.Properties {fmt.Printf("    %s: %s\n", k, v)}// 获取变体信息variant := unleash.GetVariant("someToggle", unleash.WithVariantContext(ctx))if variant != nil {fmt.Printf("\nVariant Information:\n")fmt.Printf("  Name: %s\n", variant.Name)fmt.Printf("  Enabled: %v\n", variant.Enabled)if variant.Enabled {fmt.Printf("  Payload Type: %s\n", variant.Payload.Type)fmt.Printf("  Payload Value: %s\n", variant.Payload.Value)}} else {fmt.Println("\nNo variant returned")}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89623.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89623.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89623.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

细胞建模“图灵测试”:解析学习虚拟细胞挑战赛

一、AI能否预测细胞的未来&#xff1f; 想象一下&#xff0c;有一天我们不必一管管地做实验&#xff0c;就能在计算机中模拟细胞对基因敲除、药物处理乃至微环境变化的反应。这不再是科幻&#xff0c;而是“虚拟细胞”&#xff08;Virtual Cell&#xff09;研究的宏大目标。然…

centos9安装docker Dify

CentOS | Docker Docs yum -y install gcc gcc-c yum-utils Docker 官方的 YUM 软件仓库配置文件到系统,设置存储库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 也可以从阿里云下(我选择上面的) yum-config-manager --add-re…

基于Jenkins和Kubernetes构建DevOps自动化运维管理平台

目录 引言 基础概念 DevOps概述 Jenkins简介 Kubernetes简介 Jenkins与Kubernetes的关系 Jenkins与Kubernetes的集成 集成架构 安装和配置 安装Jenkins 安装Kubernetes插件 配置Kubernetes连接 配置Jenkins Agent Jenkins Pipeline与Kubernetes集成 Pipeline定义…

MySQL 8.0 OCP 1Z0-908 题目解析(18)

题目69 Choose three. A MySQL server is monitored using MySQL Enterprise Monitor’s agentless installation. Which three features are available with this installation method? □ A) MySQL Replication monitoring □ B) security-related advisor warnings □ …

【mongodb】安装和使用mongod

文章目录 前言一、如何安装&#xff1f;二、使用步骤1. 开启mongod服务2. 客户端连接数据库3. 数据库指令 总结 前言 Mongodb的安装可以直接安装系统默认的版本&#xff0c;也可以安装官网维护的版本&#xff0c;相对而言更推荐安装官网维护的版本&#xff0c;版本也相当更新。…

云效DevOps vs Gitee vs 自建GitLab的技术选型

针对「云效DevOps vs Gitee vs 自建GitLab」的技术选型&#xff0c;我们从核心需求、成本、运维、扩展性四个维度进行深度对比&#xff0c;并给出场景化决策建议&#xff1a; 一、核心能力对比表 能力维度云效DevOpsGitee自建GitLab&#xff08;社区版/企业版&#xff09;代码…

CentOS 7 安装RabbitMQ详细教程

前言&#xff1a;在分布式系统架构中&#xff0c;消息队列作为数据流转的 “高速公路”&#xff0c;是微服务架构不可或缺的核心组件。RabbitMQ 凭借其稳定的性能、灵活的路由机制和强大的生态支持&#xff0c;成为企业级消息中间件的首选之一。不过&#xff0c;当我们聚焦 Cen…

Python爬虫用途和介绍

目录 什么是Python爬虫 Python爬虫用途 Python爬虫可以获得那些数据 Python爬虫的用途 反爬是什么 常见的反爬措施 Python爬虫技术模块总结 获取网站的原始响应数据 获取到响应数据对响应数据进行过滤 对收集好的数据进行存储 抵御反爬机制 Python爬虫框架 Python…

uni-app开发app保持登录状态

在 uni-app 中实现用户登录一次后在 token 过期前一直免登录的功能&#xff0c;可以通过以下几个关键步骤实现&#xff1a;本地持久化存储 Token、使用请求与响应拦截器自动处理 Token 刷新、以及在 App.vue 中结合 pages.json 设置登录状态跳转逻辑。 ✅ 一、pages.json 配置说…

21、MQ常见问题梳理

目录 ⼀ 、MQ如何保证消息不丢失 1 、哪些环节可能会丢消息 2 、⽣产者发送消息如何保证不丢失 2.1、⽣产者发送消息确认机制 2.2、Rocket MQ的事务消息机制 2.3 、Broker写⼊数据如何保证不丢失 2.3.1** ⾸先需要理解操作系统是如何把消息写⼊到磁盘的**。 2.3.2然后来…

MySQL数据库--SQL DDL语句

SQL--DDL语句 1&#xff0c;DDL-数据库操作2&#xff0c;DDL-表操作-查询3&#xff0c;DDL-表操作-创建4&#xff0c;DDL-表操作-数据类型4.1&#xff0c;DDL-表操作-数值类型4.2&#xff0c;DDL-表操作-字符串类型4.3&#xff0c;DDL-表操作-日期时间类型4.4&#xff0c;实例 …

Spring Cloud 服务追踪实战:使用 Zipkin 构建分布式链路追踪

Spring Cloud 服务追踪实战&#xff1a;使用 Zipkin 构建分布式链路追踪 在分布式微服务架构中&#xff0c;一个用户请求往往需要经过多个服务协作完成&#xff0c;如果出现性能瓶颈或异常&#xff0c;排查会非常困难。此时&#xff0c;分布式链路追踪&#xff08;Distributed…

Linux云计算基础篇(6)

一、IO重定向和管道 stdin&#xff1a;standard input 标准输入 stdout&#xff1a;standard output 标准输出 stderr&#xff1a; standard error 标准错误输出 举例 find /etc/ -name passwd > find.out 将正确的输出重定向在这个find.ou…

Python将COCO格式分割标签绘制到对应的图片上

Python将COCO格式分割标签绘制到对应的图片上 前言前提条件相关介绍COCO 格式简介&#xff08;实例分割&#xff09;&#x1f4c1; 主要目录结构&#xff1a;&#x1f4c4; JSON 标注文件结构示例&#xff1a;✅ 特点&#xff1a; 实验环境Python将COCO格式分割标签绘制到对应的…

光纤(FC)交换机与以太网(网络)交换机的区别

光纤通道交换机&#xff08;FC交换机&#xff09;与普通以太网交换机&#xff08;网络交换机&#xff09;在用途、协议、性能、可靠性等方面存在显著差异&#xff0c;主要区别如下&#xff1a; 1. 用途与网络类型 FC交换机 主要用于存储区域网络&#xff08;SAN&#xff09;&a…

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题 简单学习一下有限元法的基础理论&#xff0c;书本为电磁场有限元经典教材&#xff1a; THE FINITE ELEMENT METHOD IN ELECTROMAGNETICS, JIAN-MING JIN 目录 电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问…

云端备份与恢复策略:企业如何选择最安全的备份解决方案

更多云服务器知识&#xff0c;尽在hostol.com 想象一下&#xff0c;某个凌晨&#xff0c;你突然发现公司所有重要数据都被加密&#xff0c;系统崩溃&#xff0c;业务停摆。有人给你打来电话说&#xff1a;“一切都被勒索了&#xff0c;恢复费用可能需要几百万。”这时&#xf…

OSPF高级特性之FRR

一、概述 众所周知,IGP当中链路状态路由协议(OSPF、ISIS)之所以可以代替我们的矢量路由协议(RIP),就是因为链路状态路由协议可以根据某些特性快速的感知到路由的变化从而改变路径。 前面我们已经介绍过了OSPF的其中一个快速收敛的机制,SPF算法,本章节将介绍另一个快速收敛机制,…

多元化国产主板,满足更高性能、更高安全的金融发展

在金融行业数字化转型的浪潮中&#xff0c;对于核心硬件的性能与安全需求达到了前所未有的高度。国产主板应运而生&#xff0c;凭借其卓越的多元化特性&#xff0c;为金融领域带来了高性能运算与高安全防护的双重保障&#xff0c;成为推动金融行业发展的关键力量。以高能计算机…

数据库分布式架构:ShardingSphere 实践

一、数据库分布式架构概述 1.1 分布式架构概念 在当今数字化时代&#xff0c;随着业务的不断拓展和数据量的爆炸式增长&#xff0c;传统的单机数据库架构逐渐暴露出诸多局限性。例如&#xff0c;在电商大促期间&#xff0c;海量的订单数据和用户访问请求会让单机数据库不堪重…