事件批处理
事件批处理
本主题介绍云眼特性标帜(Feature Flag)AB实验 Python SDK 如何使用事件处理器将展示次数和转化事件批处理到单个有效负载中,然后再将其发送到云眼。
云眼特性标帜(Feature Flag)AB实验 Python SDK 允许批处理事件,并包括用于设置最大批处理大小和刷新间隔超时的选项。事件批处理的好处意味着,对于相同数量的决策和转化事件,跟踪的网络流量更少。
默认情况下,在 Python SDK 3.3.0 中禁用事件批处理。请继续了解如何利用 Python SDK 中的事件批处理。
📘 注意
事件批处理适用于现成事件调度程序和自定义事件调度程序。
确保未将个人身份信息 (PII) 发送到云眼特性标帜(Feature Flag)AB实验。事件批处理过程不会从事件中删除 PII。
配置事件批处理
可以通过使用BatchEventProcessor
。我们提供了两个主要选项来配置事件批处理:batch_size
和flush_interval
。可以在创建BatchEventProcessor
实例时传入这两个选项,也可以在创建 Eyeofcloud 客户端期间传递创建的实例。使用BatchEventProcessor
时,事件将保留在队列中,直到:
- 事件数达到定义的
batch_size
. - 最旧的事件在队列中存在的时间超过了定义的
flush_interval
,以秒为单位指定。然后刷新队列,并在单个网络请求中将所有排队的事件发送到 Eyeofcloud 功能实验。 - 收到新的数据文件修订版。仅当启用了实时数据文件更新时,才会发生这种情况。
Python
from eyeofcloud import eyeofcloud
from eyeofcloud import event_dispatcher as eyeofcloud_event_dispatcher
from eyeofcloud.event import event_processor
# Set event dispatcher that the
# You can reference your own implementation of event dispatcher here
event_dispatcher = eyeofcloud_event_dispatcher.EventDispatcher
# Create instance of BatchEventProcessor.
#
# In this example here we set batch size to 15 events
# and flush interval to 50 seconds.
# Setting start_on_init starts the consumer
# thread to start receiving events.
#
# See table below for explanation of these
# and other configuration options.
batch_processor = event_processor.BatchEventProcessor(
event_dispatcher,
batch_size=15,
flush_interval=50
start_on_init=True,
)
# Create Eyeofcloud client and pass in instance
# of BatchEventProcessor to enable batching.
eyeofcloud_client = eyeofcloud.Eyeofcloud(
sdk_key='<Your SDK Key here>',
datafile='<Your datafile here>',
event_processor=batch_processor
)
下表定义了可用于配置 BatchEventProcessor 的这些选项和其他选项。
名字 | 默认值 | 描述 |
---|---|---|
event_dispatcher | 无默认值。必需参数。 | 用于管理网络调用的事件处理程序。 提供一种接收 URL 和参数并调度请求的dispatch_event 方法。 |
记录器可选 | NoOpLogger | 用于记录问题的记录器实现。 |
flush_interval_可选_ | 30 | 事件在刷新之前可以存在于队列中的最长持续时间(以秒为单位)。 |
batch_size_可选_ | 10 | 队列中要保留的最大事件数。达到此数字后,将刷新所有排队的事件并将其发送到云眼灰度实验。 |
start_on_init_可选_ | 假 | 布尔值,如果设置为 true,则在初始化BatchEventProcessor . 默认情况下,该值为 False,因此使用者线程尚未准备好接收任何事件。始终可以通过BatchEventProcessor 调用start 。 |
timeout_interval_可选_ | 5 | 表示加入使用者线程之前的时间间隔(以秒为单位)的数字。 |
event_queue_可选_ | 六.移动.队列.队列 | 允许在调度事件之前累积事件的组件。 |
notification_center_可选_ | 通知中心 | eyeofcloud.notification_center.NotificationCenter 实例。 默认情况下,将创建一个notification_center.NotificationCenter 实例。 |
更多信息,请参见初始化SDK。
📘 注意
最大有效负载大小为 3.5 MB。如果生成的批处理有效负载超过此限制,请求将被拒绝,并显示 400 响应代码,
Bad Request Error
。
副作用
下表列出了使用此类可能触发的其他云眼特性标帜(Feature Flag)AB实验功能。
功能性 | 描述 |
---|---|
日志事件 | 每当事件处理器生成一批事件时,将使用事件工厂创建一个 LogEvent 对象。 它包含一批转换和决策事件。 此对象将使用提供的事件调度程序进行调度,并且还将发送给通知订阅者。 |
通知侦听器 | 如果订阅了LOG_EVENT通知侦听器,则刷新将调用此侦听器。 |
注册日志事件侦听器
注册日志事件通知侦听器
Python
def on_log_event():
pass
eyeofcloud_client.notification_center.add_notification_listener(enums.NotificationTypes.LOG_EVENT, on_log_event)
日志事件
LogEvent 对象是使用 EventFactory 创建的。它表示我们发送到云眼特性标帜(Feature Flag)AB实验后端的一批决策和转换事件。
对象 | 类型 | 描述 |
---|---|---|
http_verb 必需(非空) | 字符串 | 调度日志事件时要使用的 HTTP 谓词。它可以是获取或发布。 |
网址为必填(非空) | 字符串 | 要将日志事件调度到的 URL。 |
参数必需(非空) | 字典 | 事件批处理。它包含有关批处理的每个事件的所有信息。包括包含用户事件的访问者列表。 |
头 | 字典 | 请求标头 |
在应用程序退出时停止批处理事件处理器
如果启用事件批处理,则必须在退出**之前调用“**stop”方法batch_processor.stop()
。这可确保尽快刷新排队的事件,以避免数据丢失。
❗
警告
由于 BatchEventProcessor 维护排队事件的缓冲区,因此必须在关闭应用程序之前调用 BatchEventProcessor 实例上的
stop()
。
方法 | 描述 |
---|---|
停止() | 停止并刷新事件队列。 注意:我们建议将此方法连接到正在运行的进程的终止信号。 |