实施清单

云眼About 8 min

实施清单

本主题介绍使用云眼灰度实验 SDK 时要采用的重要配置详细信息和最佳实践。

准备在生产环境中实施云眼灰度实验时,最好彻底熟悉配置详细信息和最佳实践,以简化整个过程。

📘 注意

如果使用的是 2018 年 <> 月或更早发布的 SDK 版本,请参阅本主题的先前变体open in new window

架构图

这些关系图提供了此清单中多个项的高级上下文。

系统上下文图显示了 云眼 和应用的顶级视图:

1151
overview architectural diagram high level full stack SDKs.jpg

系统示意图

SDK 和应用容器图显示了更多详细信息:

1151
containers architectural diagram high level full stack SDKs.jpg

容器图

数据文件管理

数据文件是 云眼Config 的 JSON 表示形式。它包含在 云眼 功能实验项目中交付和跟踪环境中的环境的功能和实验所需的所有数据。详细了解数据文件

可以使用以下选项在云眼灰度实验项目和应用程序之间同步数据文件:

  • (推荐)“拉取”方法:我们的 SDK 提供基于轮询的数据文件管理实现,以您在实例化 SDK 时设置的任何频率处理最新版本的获取。
  • “推送”方法:使用 webhook 根据应用程序更改获取和管理数据文件。
  • 自定义方法:如果需要自定义或扩展访问实现的数据文件的方式,可以使用 Eyeofcloud CDN 链接访问数据文件。有关详细信息,请参阅获取数据文件

数据文件管理的其他重要注意事项包括:

  • 缓存和持久性。
  • 开发工具包实例之间的同步
  • 网络可用性

📘 注意

要确保 Webhook 请求源自 云眼,请使用请求标头中的令牌保护 Webhook

开发工具包配置

云眼灰度实验 SDK 是高度可配置的,可以满足任何生产环境的需求,但充分的扩展可能需要覆盖某些默认行为才能最好地满足应用程序的需求。

记录

详细日志至关重要。默认的无操作 SDK 记录器提供了创建自定义记录器的基架。它是完全可定制的,可以支持将日志写入内部日志记录服务或供应商等用例。但是,它是故意开箱即用的非功能。创建一个适合您需求的记录器,并将其传递给 云眼 客户端。

有关详细信息,请参阅记录器和 SimpleLogger 参考实现open in new window的文档。

错误处理程序

在生产环境中,必须在整个应用程序中一致地处理错误。云眼灰度实验 SDK 允许你提供自定义错误处理程序来捕获配置问题,例如未知实验键或未知事件键。此处理程序应导致应用程序正常失败,以提供正常的用户体验。它还应该 ping 外部服务(如 Sentry),以提醒团队出现问题。

🚧 重要

如果不提供处理程序,则应用程序中不会显示错误。

用户配置文件服务

构建用户配置文件服务 (UPS) 有助于在测试配置设置更改时保持用户之间一致的变体分配。

云眼灰度实验开发工具包通过确定性哈希函数对用户进行分桶,因此只要数据文件和用户 ID 一致,它就会始终计算出相同的变体。当测试配置设置更改时,添加新版本或更改流量分配可能会更改用户的变体并改变用户体验。

在云眼灰度实验中了解有关分桶行为的更多信息。

UPS 通过在数据存储中保留有关用户的信息来解决此问题。它至少应创建用户 ID 到变体分配的映射。实现 UPS 需要公开一个查找和保存函数,该函数返回或保留用户配置文件字典。我们的文档包含此字典的 JSON 架构。此服务还假定所有用户 ID 在所有用例和会话中保持一致。

📘 注意

我们建议在首次查找后缓存用户信息,以加快将来的查找速度。

让我们来看一个例子。使用 Redis 或 Cassandra 作为缓存,可以将用户配置文件存储在键值对映射中。可以使用散列电子邮件地址映射到变体分配。要一次保持粘性分桶 6 小时,请在每条记录上设置生存时间 (TTL)。当 云眼 对每个用户进行分桶时,UPS 将与此缓存接口,并在正常存储之前进行读/写以检查分配。

构建开发工具包包装器

许多开发人员更喜欢使用包装器来封装 SDK 的功能并简化维护。这可以对上述所有配置选项完成。我们的 GitHub 存储库包括一些示例;请参阅演示应用和 SDK 包装器open in new window

环境

云眼灰度实验的环境功能使您能够在隔离的环境(如开发或暂存)中确认行为并运行测试。这样可以更轻松地在生产环境中安全地部署测试。环境是可自定义的,应模仿团队的工作流程。大多数客户使用两种环境:开发和生产。这允许工程和 QA 团队在隔离环境中安全地检查测试,同时站点访问者将接触到在生产环境中运行的测试。

将生产视为实际工作负载。过渡环境应模拟生产的各个方面,以便可以在部署之前进行测试。在这些环境中,SDK 的所有方面(包括调度程序和记录器)都应该是生产级的。在测试或开发等本地环境中,可以改用现成的实现。

环境通过自己的数据文件彼此分开和隔离。为了提高安全性,云眼灰度实验允许创建安全的环境,这些环境需要对数据文件请求进行身份验证。我们的服务器端 SDK 支持使用这些经过身份验证的数据文件进行初始化。建议仅在专门使用服务器端 SDK 和实现的项目中使用此功能。如果在客户端环境中获取数据文件,最终用户可能会访问它们

用户标识和属性

用户 ID 标识测试中的唯一用户。在制作环境中,仔细选择用户 ID 的类型并制定更广泛的策略以跨渠道保持一致的 ID 尤为重要。我们的文档探讨了选择用户 ID 的不同方法和最佳实践。

属性允许根据特定属性定位用户。在云眼中,可以定义测试中应包含哪些属性。然后,在代码本身中,可以基于每个用户将属性字典传递给 SDK,这将确定用户看到的变体。

📘 注意

属性字段和用户 ID 始终通过展示和转化事件发送到 云眼 的后端。由您负责处理可能包含个人身份信息 (PII) 的字段(例如,电子邮件地址)。许多客户使用标准哈希函数来混淆 PII。

集成

使用通知侦听器构建与云眼灰度实验的自定义集成。使用通知侦听器以编程方式观察和处理 SDK 中发生的各种事件,并通过将数据传递到外部服务来启用集成。

以下是一些示例:

  • 将数据发送到分析服务,并报告user_123已分配给变体 A。
  • 使用 SDK 事件向 New Relic 和 Datadog 等数据监控工具发送警报,以更好地可视化和了解 A/B 测试如何影响服务级别指标。
  • 将所有事件传递到外部数据层(如数据仓库),以进行其他处理并利用商业智能工具。

质量保证和测试

在您进行测试之前,我们有一些最后的提示:

  • 考虑质量检查选项。要手动测试不同的体验,请使用强制分桶或许可名单强制自己加入变体。
  • 确保在测试或暂存环境中与从 云眼 中的测试环境生成的相应数据文件配对时一切顺利运行。这将确认数据文件准确无误,可以通过检查 SDK 日志进行验证。
  • 运行 A/A 测试以仔细检查是否正确捕获了数据。这有助于确保对照处理和变异处理之间的转化没有差异。阅读有关 A/A 测试open in new window的更多信息。

如有疑问,请联系支持人员open in new window。如果认为发现了错误,请在 SDK 的 GitHub 存储库中提交问题,我们将尽快进行调查。

Last update:
Contributors: “zhangweixue”