#unleash #edge #proxy #flags #api-client #cache #instance

bin+lib unleash-edge

Unleash edge 是 Unleash 的代理。它可以返回 Unleash 客户端 API 的评估功能开关以及原始数据

56 个稳定版本 (19 个主要版本)

19.3.0 2024年7月22日
19.1.3 2024年5月23日
18.0.1 2024年3月14日
17.1.0 2024年1月24日
0.5.1 2023年3月15日

#4 in #edge

Download history 733/week @ 2024-04-16 119/week @ 2024-04-23 23/week @ 2024-04-30 225/week @ 2024-05-07 194/week @ 2024-05-14 161/week @ 2024-05-21 1/week @ 2024-05-28 2/week @ 2024-06-04 118/week @ 2024-07-02 101/week @ 2024-07-09 101/week @ 2024-07-16 53/week @ 2024-07-23 5/week @ 2024-07-30

每月下载261

MIT 许可证

515KB
12K SLoC

Unleash Edge

crates.io Documentation MIT licensed Dependency Status CI Coverage Status downloads

警告:Unleash Edge 需要 Unleash v4.15.0 或更高版本

Unleash Edge 是 Unleash Proxy 的继任者。

Unleash Edge 位于 Unleash API 和您的 SDK 之间,并提供您 Unleash 实例的缓存读取副本。这意味着您可以将您的 Unleash 实例扩展到数千个连接的 SDK,而无需增加对您的 Unleash 实例的请求数量。

Unleash Edge 提供两个重要功能

  • 性能:Unleash Edge 在内存中缓存,可以运行在接近您的最终用户的地方。单个实例可以处理每秒数十万到数百万个请求。
  • 弹性:Unleash Edge 被设计成在重启时存活,并且即使您失去了与您的 Unleash 服务器的连接,也能正常工作。

Unleash Edge 是为了帮助您扩展 Unleash 而构建的。

  • 如果您正在寻找连接客户端 SDK 的最简单方法,您可以查看我们的 前端 API
  • 如果您想了解如何扩展您自己的功能标志系统,为什么不查看我们关于构建和扩展 功能标志 的建议

从代理迁移到 Edge

有关迁移的更多信息,请查看迁移指南,其中详细说明了Edge和代理之间的差异以及如何在Edge中实现类似的行为。

快速入门

使用推荐设置在Docker中运行Edge

docker run -it -p 3063:3063 -e STRICT=true -e UPSTREAM_URL=<yourunleashinstance> -e TOKENS=<yourclienttoken> unleashorg/unleash-edge:<mostrecentversion> edge

Edge行为

截至版本19.2.0,Unleash Edge在边缘模式下运行时支持两种行为:严格动态。我们建议采用新的严格行为,而动态行为则作为遗留选项保留,将在未来的版本中弃用并删除。

出于遗留原因,动态行为仍然是默认设置。但是,启动时会记录一条警告消息,以指示其弃用。

请注意,这些行为是互斥的。

严格行为

如果使用--strict标志或STRICT环境变量启动,Edge现在将以严格行为启动,并在启动时必须提供令牌。

Edge将拒绝来自具有比初始令牌更广泛或不同访问范围的SDK的请求。具体来说,这意味着传入请求必须有一个与环境和绑定到该令牌中指定的项目或项目完全匹配的令牌。

例如,如果您使用一个具有对开发环境访问权限的通配符令牌*:development.<somelongrandomstring>启动,并且您的客户端使用具有对开发环境中特定项目访问权限的各种令牌,Edge将过滤功能,仅授予对更窄范围的访问权限。

动态行为

在动态行为下,Edge的行为与自v1.0.0以来一致。任何新的客户端令牌都会与上游进行验证,如果验证为有效,则会配置一个刷新作业,使用能够检索Edge看到的所有项目和环境的最低令牌集。使用--dynamicDYNAMIC环境变量设置。(19.2.0 / 2024年7月4日):我们正在考虑弃用此行为。如果您需要此行为,请通过Slack与我们联系,最终决定尚未确定。在19.2.0中,此行为仍然是默认设置,但Edge将记录您应选择动态或严格行为的通知。当选择动态行为(默认或选择)时,Edge将打印有关计划弃用的警告。

部署

请参阅我们的部署Edge页面

获取Unleash Edge

Unleash Edge以二进制文件和Docker镜像的形式分发。

二进制文件

  • 您可以从我们的发布页面下载二进制文件。
  • 我们目前正在为linux x86_64、windows x86_64、darwin (OS X) x86_64和darwin (OS X) aarch64 (M1/M2 macs)构建。

Docker

  • docker镜像被上传到dockerhub和Github Package registry。
  • 对于dockerhub,请使用以下坐标unleashorg/unleash-edge:<version>
  • 对于Github package registry,请使用以下坐标ghpr.io/unleash/unleash-edge:<version>
  • 如果您想处于“尖端”(意指最新版本),可以使用标签edge。这是从每次提交的HEAD构建的。
  • 运行Docker镜像时,与运行二进制文件时相同的CLI参数在您的docker run命令中也是可用的。为了成功启动,您需要确定您正在运行哪种模式。
    • 如果在edge模式下运行,您的命令应该是
      • docker run-p3063:3063 -eUPSTREAM_URL=<YOUR_UNLEASH_INSTANCE>unleashorg/unleash-edge:<version>edge
    • 如果在offline模式下运行,您需要提供一个包含您的功能开关文件的卷。示例在examples文件夹中可用。要使用此示例,可以使用以下命令
      • docker run-v./examples:/edge/data-p3063:3063 -eBOOTSTRAP_FILE=/edge/data/features.json-eTOKENS='my-secret-123,another-secret-789'unleashorg/unleash-edge:<version>offline

Cargo/Rust

如果您已安装Rust工具链,您可以通过克隆此仓库并运行以下命令来为运行平台构建二进制文件:cargo build --release。这将在./target/release中生成一个unleash-edge二进制文件。

概念

请参阅我们的边缘概念页面

度量

❗ 注意:为了正确注册SDK使用度量,您的Unleash实例必须是v5.9.0或更高版本。! 注意:如果您正在级联,您需要至少Edge 17.0.0作为任何Edge 19.0.0的上游,以保留度量。

由于Edge旨在避免过载其上游,Edge在将一批度量上传到上游之前会收集和累积来自SDK的度量(METRICS_INTERVAL_SECONDS)。这减少了Unleash实例的负载,使其每隔一个间隔进行一次调用,而不是每个客户端都向Unleash发布更新度量。运行版本低于4.22的Unleash实例无法处理Edge发布的批量格式,这意味着您将无法看到连接到Edge实例的客户端的任何度量,直到您能够更新到4.22或更高版本。

兼容性

Unleash Edge在API和CLI层遵循语义版本控制(SemVer)。如果您将Unleash Edge用作项目中的库,请谨慎行事,内部代码库更改可能会在任何版本发布中发生(包括次要和补丁版本),这可能会破坏您的实现。

性能

请参阅我们的边缘基准测试页面

调试

您可以通过调整RUST_LOG环境变量来查看更详细的日志输出。例如,为了获取直接来自Edge但不是其依赖项的日志,可以将默认日志级别从error提升到warning并将Edge设置为debug,如下所示

RUST_LOG="warn,unleash_edge=debug" ./unleash-edge #<command>

有关可用的日志记录和日志级别的更多信息,请参阅https://docs.rs/env_logger/latest/env_logger/#enabling-logging

故障排除

上游服务器中缺少度量

可能的原因

  • 旧的Edge版本。为了确保在较新的Unleash版本上保证度量,您需要使用Edge v17.0.0或更高版本
  • 旧的SDK客户端。我们注意到一些客户端,特别是早期的Python(1.x分支)以及较早的.NET SDK(我们建议您使用4.1.5或更高版本)在Edge要求的严格头信息下发布度量有困难。

开发

请参阅我们的贡献指南以及我们的开发指南

依赖项

~49–66MB
~1.5M SLoC