实现用户配置文件服务 UserProfileService

云眼About 3 min

实现用户配置文件服务 UserProfileService

本主题介绍如何设置自定义用户配置文件服务或如何使用云眼灰度实验 PHP SDK 的默认值。

使用用户配置文件服务保留有关用户的信息,并确保变体分配具有粘性。例如,如果正在处理后端网站,则可以创建一个从 Redis 或 Memcached 存储读取和保存用户配置文件的实现。

在 PHP SDK 中,没有默认实现。实施用户配置文件服务是可选的,仅当希望保持变体分配的粘性时,即使实验条件在运行过程中发生了变化(例如,受众群体、属性、变体暂停和流量分配),才需要实现该服务。否则,PHP 开发工具包是无状态的,并依赖于确定性分桶来返回一致的分配。

如果用户配置文件服务未按预期对用户进行分桶,请检查其他灰度标帜是否覆盖了分桶。有关更多信息,请参阅 分桶的工作原理

实现服务

请参阅下面的代码示例以提供您自己的用户配置文件服务。它应公开两个具有以下签名的函数:

  • lookup :获取用户 ID 字符串并返回与以下架构匹配的用户配置文件。
  • save :获取用户配置文件并保留它。

如果要将用户配置文件服务纯粹用于跟踪目的而不是粘性分桶,则只能实现save方法(始终从lookup返回nil)。

PHP

use Eyeofcloud\Logger\DefaultLogger; 
use Eyeofcloud\UserProfile\UserProfileServiceInterface; 
use Eyeofcloud\Eyeofcloud;  

class UserProfileService implements UserProfileServiceInterface 
{   
    public function lookup($userId)   
    {     
        // perform user profile lookup   
    }    
    
    public function save($userProfileMap) {     
        // persist user profile   
    } 
}  

$eyeofcloudClient = new Eyeofcloud(   
    $datafile,   
    null,   
    new DefaultLogger(),   
    null,   
    false,   
    new UserProfileService() 
);

下面的代码示例显示了用户配置文件对象的 JSON 架构。

experiment_bucket_map覆盖默认分桶行为,并为给定用户定义备用实验变体。对于要覆盖的每个实验,向Map添加一个对象。使用实验 ID 作为键,并包含一个指定所需变体的variation_id属性。如果没有实验条目,则默认分桶行为仍然存在。

在下面的示例中,^[a-zA-Z0-9]+$是实验ID。

JSON

{   
    "title": "UserProfile",   
    "type": "object",   
    "properties": {     
        "user_id": {"type": "string"},     
        "experiment_bucket_map": {"type": "object",                               
                                  "patternProperties": {                                  
                                      "^[a-zA-Z0-9]+$": {"type": "object",                                                  
                                                         "properties": {"variation_id":{"type":"string"}},                                                   
                                                         "required": ["variation_id"]}
                                                                                         
                                    }                              
                                }   
    },   
    "required": ["user_id", "experiment_bucket_map"] 
}

PHP SDK 使用您提供的 User Profile Service 在保存试验分配的情况下覆盖 Eyeofcloud Feature Experimentation 的默认存储行为。

在实现您自己的 User Profile Service 时,建议在初始化时将用户配置文件加载到 User Profile Service 中,并避免对查找功能执行成本高昂的阻塞查找,以最大程度地降低合并服务的性能影响。

在多服务器或无状态环境中实现时,我们建议将此接口与 Cassandra 或 Redis 等后端一起使用。您可以通过配置这些服务来决定要保留粘性桶的时间。

Last update:
Contributors: zhangweixue