前言
每一个卖家都想知道:
我的用户购物体验如何?
他喜欢什么样的商品?
我可以降低哪个环节的用户流失?
但是这些问题没办法获得直接的答案,这时候就需要仔细地记录下用户在网站上做了什么,据此推测用户的喜好、忠诚度、转化效果等等,然后卖家就可以有针对性地组织营销活动、优化商品、投放广告……这种记录用户行为的技术就是 “数据埋点”。
通常前端的数据埋点由网页本身的代码或脚本,由用户的行为触发产生数据,再经过一定的流程采集之后,电商卖家就可以从数据之中挖掘价值。
本文以一个基于Magento开发的电商网站为例,介绍在Oracle云(Oracle Cloud Infrastructure)上实现的埋点数据采集流程和实时分析看板。
在该架构中:
1. 电商网站产生的埋点数据首先发送给API Gateway服务;
2. 由API Gateway调用Function服务;
3. 在 Function服务中构建程序代码,实现埋点数据的解析,并传递给Streaming服务;
4. GoldenGate Stream Analytics把Streaming作为数据源,实时捕获埋点数据,并在实时仪表板上展示。
除此之外,Streaming服务中的数据还可以通过Function或其它方式写入到Oracle自治数据库。
此架构中涉及到的服务介绍见附录。
先决条件
已经包含埋点代码的电商网站:该电商网站使用开源SDK抓取用户行为,产生埋点数据。埋点数据将会发送给一个url地址,此url作为采集服务器。本例中会将此url配置为Oracle云上的API Gateway服务端点,由此开始采集流程。
密钥对、验证令牌 (AUTH TOKEN)、虚拟云网络 (VCN) 和子网、OCI的config信息等,可以按照各步骤的参考文档获取。
第一步 创建Streaming流处理服务
本步骤的目的:OCI流处理(Streaming)用于摄取可以实时使用和处理的连续、高容量的电商网站用户行为数据流。用于传递连续按顺序生成和处理数据的应用。
本步骤的过程:
参考文档 《Creating and Managing Streams》
在OCI主菜单中选择分析和AI— 流处理,点击 创建流。填写流名称、流池名称,然后点击创建。
创建完成后收集流的连接信息,用于后续连接。连接信息随时可以在OCI页面查看
第二步 创建容器注册表服务
本步骤的目的:埋点请求需要由Function服务来处理,Function的映像需要容器化的管理,使用容器注册表(Registry)可让开发者简化从开发到生产的工作流程,轻松地开发构件。
本步骤的过程:
参考文档 《 Creating a Repository》
在主菜单中选择开发人员服务— 容器注册表,点击创建资料档案库 。填写资料档案库名称, 点击 创建资料档案库。
注意:档案库名称在整个租户下是唯一的。本例名称为“my_repository/hello-python”,其中my_repository是第三步开发环境配置中指定的档案库,hello-python是创建的函数的名称,推送image时Fn命令行会根据函数名寻找此档案库。如果推送image时档案库不存在,可能会创建失败。
第三步 创建Function应用程序和部署代码
本步骤的目的:海量的埋点请求需要具有弹性、可伸缩的云服务来处理,因此用Oracle Function服务来编写代码,解析、处理、发送请求到Streaming服务。
创建应用的过程:
在主菜单中选择开发人员服务— 函数—应用程序,点击 创建应用程序 。填写名称,选择网络,点击创建。
创建后会自动进入应用程序详情界面,其中包含开发环境的配置。配置内容此处不再赘述,可参考页面提示和文档 《Functions QuickStart on Cloud Shell》
配置好环境后生成 'hello-world' 模板函数:
fn init --runtime python hello-python
复制
切换到hello-python目录,部署您的函数
fn -v deploy --app my_fnapp
复制
此过程需要花费一些时间,屏幕会输出执行过程。没有报错信息则表示成功。进入容器注册表会看到已推送的映像,此时可确认Function开发环境正确无误:
部署Function代码的过程:
同一种功能可以有很多种不同的实现方法,本例参考了GitHub上官方示例中的《Function that returns the API Gateway HTTP request information》来实现API请求的接收和解析;参考了OCI的Python文档中《StreamClient》的方法,使用oci.streaming.StreamClient.put_messages的方法向Streaming发送数据。核心代码如下:
def produce_messages(client, stream_id, value):
key = "messageKey"
msg_entry = oci.streaming.models.PutMessagesDetailsEntry()
msg_entry.key = b64encode(key.encode()).decode()
msg_entry.value = value
msgs = oci.streaming.models.PutMessagesDetails()
msgs.messages = [msg_entry]
put_message_result = client.put_messages(stream_id, msgs)
复制
编写完代码后再次部署函数
fn -v deploy --app my_fnapp
复制
第四步 2步部署API网关
本步骤的目的:前端埋点需要通过url发送到接收服务器,此架构中使用OCI API网关 (API Gateway)来接收来自客户浏览电商网站产生的埋点数据请求。
本步骤的过程:
参考文档 《API Gateway QuickStart Guide》
1.创建API网关:在主菜单中选择开发人员服务— 网关,进入列表界面,点击 创建网关 开始创建。填入名称,选择类型、网络,点击 创建网关。
2.创建网关部署:进入网关详细信息界面,点击 部署——创建部署。配置路由路径、方法,后端服务类型选择Oracle Functions,选择上一步中创建的应用程序和函数名称,完成后点击下一步,点击创建,开始创建。
完成后页面上的“端点”+网管部署中的“路由路径”是完整的API请求的地址,例如:
https://xxxxxxxx.apigateway.ap-sydney-1.oci.customer-oci.com/mydeploy/myrouting
第五步 配置电商网站的埋点SDK
本步骤的目的:配置埋点发送的地址,在Magento的后端可以指定前端埋点发送的服务器地址。
本步骤的过程:
将以上API请求的地址配置为埋点SDK发送数据的地址。本例中的埋点SDK为开源框架,仅作演示用。
在本例基于Magento的电商网站上,需要修改埋点模块中的js文件,把 server_url 设置为API请求的地址https://xxxxxxxx.apigateway.ap-sydney-1.oci.customer-oci.com/mydeploy/myrouting
上述工作都完成后,在电商网站的用户行为数据就会发送给Streaming。此时进入OCI Streaming服务的页面可以预览一分钟内接收到的消息。看到这一步,可以确认之前的配置已正确无误。
第六步 使用GoldenGate Stream Analytics实现流数据实时分析和仪表板
本步骤的目的:使用GoldenGate Stream Analytics(GGSA)来消费OCI Streaming中的实时数据,进行实时处理和展示。GGSA还支持进一步的模式分析、高级处理和实时推荐等进阶功能。
本步骤的过程:
Oracle GoldenGate Stream Analytics(GGSA)可以在OCI的应用市场直接安装,开箱即用。安装流程的官方文档请参考 《Using GoldenGate Stream Analytics on Cloud Marketplace》
按照手册安装完成后获取主机IP地址、用户名、密码,使用浏览器登录平台,进入首页:
实现流数据的分析和展现需要4个步骤:
创建Connection—用于连接OCI上的Streaming。类型选择“Kafka”,根据提示,填入第一步中创建的Streaming的连接信息;
创建Stream—用于定义流的内容。类型选择“Kafka”,选择上一步创建的Connection,定义数据结构;
创建Pipeline—用于流数据的处理,在Pipeline中可以通过拖拽构建处理流程。创建时选择上一步的Stream作为数据源。
创建可视化—在Pipeline中可以实现灵活的数据处理和分析,本例中将在最后生成可视化图表。
在Pipeline中可以实时预览前端埋点产生的数据,后续将对此数据源进行处理、分析和展现:
本例中我们创建了一个饼状图、条形图来展现点击和浏览时间汇总后的比例和数值,以及用户操作的详情表格:
除了简单的分析处理,GGSA还包含用于高级数据转换和实时分析的模式库、对处理地理空间数据的支持、对机器学习模型的支持等丰富的预置功能,无需代码即可构建强大的实时数据处理。
GGSA平台安装后在首页看到不同业务场景的demo,点击“import”即可一键部署。读者可以借此体验其丰富的功能。例如下图中构建的Pipeline可以根据实时获取到的用户信息,结合客户、商店的位置信息来丰富数据,通过模式分析,找到距离客户最近的商店,然后展现在地图上。以此作为精准营销的决策支持。
附录
API网关 (API Gateway):API 网关服务使用户能够发布具有私有端点或公共端点的 API。端点支持 API 验证、请求和响应转换、CORS、身份验证和授权以及请求限制。
函数(Function):Oracle Functions是一个完全托管、多租户、高度可扩展、按需的函数即服务平台。它由 Fn Project 开源引擎提供支持。函数使您能够部署代码,并直接调用它或触发它以响应事件。Functions 使用托管在Registry 中的Docker 容器。
容器注册表(Registry):是一个由 Oracle 管理的注册表,可让您简化从开发到生产的工作流程。Registry 使您可以轻松地存储、共享和管理开发构件,例如 Docker 映像。Oracle 云基础设施的高度可用和可扩展架构确保您可以可靠地部署和管理您的应用程序。
流处理(Streaming): Streaming 提供了一个完全托管、可扩展且持久的存储解决方案,用于摄取您可以实时使用和处理的连续、高容量数据流。您可以使用 Streaming 来获取大量数据,例如应用程序日志、操作遥测、Web 点击流数据;或用于在发布-订阅消息传递模型中连续按顺序生成和处理数据的其他用例。
GoldenGate 流分析(GoldenGate Stream Analytics):GGSA是一个完整的解决方案平台,用于构建应用程序以实时过滤、关联和处理事件。凭借独立 Spark 或 Hadoop-YARN 的灵活部署选项,它被证明是一种多功能、高性能的事件处理引擎。GGSA 支持快速数据和物联网 (IOT) – 实时提供可操作的洞察力并最大化来自各种数据源的大量高速数据的价值。
编辑:赵靖宇