云眼Agent
云眼Agent
云眼 Agent 是一种独立的开源高可用性微服务,在某些用例中,与使用 云眼 功能实验 SDK 相比,它提供了主要优势。
Agent REST API 配置端点提供整合和简化的端点,用于访问云眼灰度发布(特性标帜)AB实验 SDK 的所有功能。
示例实现
云眼Agent的典型生产安装是在负载均衡器或Agent后面运行两个或多个服务。该服务可以通过Docker容器运行,通过Helm在Kubernetes上运行,或者从源代码安装。有关如何运行云眼Agent的说明,请参阅设置 云眼 Agent。
点击放大图片
使用云眼Agent的原因
以下是考虑使用云眼Agent的一些主要原因:
1. 您遵循面向服务的体系结构 (SOA)
如果已将某些逻辑分离到可能需要访问云眼决策 API 的服务中,我们建议使用 云眼Agent。
下图比较了面向服务的体系结构中的实现样式。
第一个不使用 云眼 Agent,它显示了六个 SDK 嵌入式实例:
显示面向服务的体系结构
中每个服务上安装的 SDK 使用情况的图表(单击放大)
现在使用云眼Agent。您只需创建一个云眼实例,而不是安装 SDK 六次。每个服务都可以根据需要访问的 HTTP API:
显示云眼Agent在单个服务
中的使用情况的图表(单击放大)
2. 希望跨团队进行标准化访问
如果要部署一次 云眼 功能实验,然后跨多个团队推出单个实现,我们建议使用 云眼 Agent。
通过标准化团队对 云眼 服务的访问,可以更好地实施流程,并围绕功能管理和实验实施治理。
该图显示了跨任意数量的团队对 云眼 Agent服务的集中和标准化访问。
(点击放大)
3. 需要网络集中化
您不希望许多 SDK 实例从应用程序中的每个节点连接到 云眼 的云服务。云眼Agent集中网络连接。只有一个Agent实例集群连接到 云眼 以执行更新数据文件和调度事件等任务。
4. 首选编程语言未作为本机 SDK 提供
您正在使用本机 SDK 不支持的编程语言。例如,Elixir,Scala或Perl。虽然可以使用您选择的 云眼 功能实验 SDK 创建自己的服务,但您也可以根据需要自定义开源 云眼 Agent,而无需自行构建服务层。
不使用云眼Agent的原因
如果用例不会从 云眼 Agent 中受益匪浅,应该考虑以下_不使用_ 云眼 Agent的原因,并查看 云眼 的许多开源 SDK。
1. 您担心延迟
如果主要考虑的是提供分桶决策的时间,则可能需要使用嵌入式云眼灰度发布(特性标帜)AB实验开发工具包,而不是云眼Agent。
实施选项
决策延迟
嵌入式软件开发工具包
微秒
云眼Agent
毫秒
2. 你使用整体式体系结构编写了应用
如果你的应用是作为一个整体构建的,嵌入式 SDK 可能更易于安装,并且更适合你的应用程序和开发实践。
3. 你担心初始团队速度
如果正在寻找通过部署功能管理和实验来启动和运行单个团队的最快方法,那么首先嵌入 SDK 是最佳选择。您以后可以随时开始使用 云眼 Agent,它甚至可以与在堆栈的另一部分运行的 云眼 功能实验 SDK 一起使用。
有关Agent的重要信息
缩放
Optimizley Agent可以扩展到具有相对较低的 CPU/内存规格的大型决策/事件跟踪卷。例如,在 云眼 Experimentation 中,我们使用 740 个 vCPU 和 12GB RAM,将部署扩展到 6 个客户端,其中包含 12 个Agent实例的集群。开发者可能需要更多地关注网络带宽而不是计算能力。
负载均衡器
任何标准负载均衡器都应允许在Agent集群之间路由流量。在 云眼 Experimentation 中,我们使用 AWS 弹性负载均衡器 (ELB) 进行内部部署。这使我们能够随着内部需求的增加轻松扩展我们的Agent集群。
跨Agent实例的数据文件同步
每个Agent实例都维护一个专用的单独缓存。每个Agent实例都会为团队使用的每个开发工具包密钥保留一个 SDK 实例。Agent实例会自动使每个 SDK 密钥实例的数据文件保持最新,以便您最终在整个集群中保持一致性。可以将数据文件更新的速率设置为配置值(默认值为 1 分钟)。EYEOFCLOUD_CLIENT_POLLINGINTERVAL
由于 SDK 通常是无状态的,因此它们不需要共享数据。云眼 计划添加通用后备数据存储,因此我们邀请您通过技术支持经理分享反馈。
如果需要跨数据文件的强一致性,我们建议采用主动/被动部署,其中所有请求都发送到单个垂直扩展的主机,并有一个被动的备用集群,以便在发生故障时实现高可用性。