基于Hybris平台的电商个性化服务实践

2023-11-07

个性化服务是什么?

下面例举几个典型的电商网站的个性化服务案例:

  • 对于浏览过新品推荐的客户,电商网站主动为此类客户推荐一款新上市的商品
  • 对于单笔订单总金额达到1000,并且该订单中包含化妆品的客户,此用户将被升级为金牌客户,后续电商网站定期为金牌客户推荐买一送一优惠促销
  • 对于完成注册的新客户,电商网站将推送优惠卷为新客户
  • 对于五月份生日的客户,电商网站主动为客户送出生日祝福广告

根据这些典型的个性化服务案例,我们可以看出个性化服务是依据客户属性、行为等特征,来识别目标客户,进而向客户提供、推荐相关的个性化信息、服务,以满足客户的需求。从整体上说,个性化服务打破了传统的被动服务模式,能够充分利用客户自身的资源,主动开展以满足客户个性化需求为目的的全方位服务。

实现个性化服务的步骤:

通过个性化服务案例,我们归纳出电商网站进行个性化服务实施所需要具备的两个基本的步骤:

1. 识别目标客户
2. 提供个性化服务

图片描述

个性化服务流程图

一个完整的服务场景是通过两个串联的步骤有序完成,首先电商网站动态的
收集客户属性、行为等特征,将具有相同属性或者特征行为的客户进行整理、分类、归纳到特定的目标客户群,最终电商网站主动向目标客户群提供个性化的服务。

那么,基于Hybris电商平台构建的电商网站,如何一步一步的提供个性化服务呢?近期,我们利用Hybris多个服务模块特点,成功的将个性化服务引入到某大型电商网站,并取得了很好的效果。下面,我们将为读者分享这个实践过程。

基于Hybris的个性化服务体系架构

对Hybris有使用经验的读者可能都知道Hybris提供个性化模块。但这个个性化模块是基于我们前面提到的第一步的结果来提供个性化服务。例如,当客户A登录到系统中,而客户A 已经被归为化装品产品系列的金牌客户,个性化模块依据这个分类,按照事先定义好的金牌客户的促销手段去展示一个买一送一的商品。

那么如何做到第一步,如何把客户归类就成为这个解决方案中很重要的一环。很自然想到的就是通过线下的方式,例如运行一个周期性的Job去扫描数据,来进行数据分析,提取客户特征,进而进行客户的分类。这种依赖于整体数据扫描的办法会有很大的计算量并且实时性比较差。我们希望在客户购买了某个商品之后,购买额达到一定程度就立即将其归为某一个特殊的客户群并在客户此次浏览网站的时候就会看到相应的内容。那么,如何做到高效和实时呢?这就是我们要介绍的解决方案中的另一个关键模块 — 规则引擎模块。

在Hybris中,规则引擎模块主要是用于促销的业务,所解决的问题是为让电商网站中的所有客户平等的获得享受促销的权利。换而言之,这是一种广泛性的促销应用。那么,如何提供个性化的促销服务呢?这就是我们在项目实践中一个创造性的应用,即把规则引擎用于个性化的服务。

下面我们先从体系架构上把规则引擎模块和个性化服务模块如何集成在一起进行阐述,接下来会针对这两个模块逐一细化具体使用的要点。

架构设计中考虑的问题

1. 模块之间集成

一个完整的个性化服务场景是通过两个基本步骤有序串联完成。因此,规则引擎与个性化模块需要有效的集成在一起,最终为电商网站提供一整套全方位的业务服务。为此,我们在架构体系中引入另外一个自定义模块,通过这个自定义模块有效的将规则引擎与个性化模块集成在一起,减少集成过程中出现业务,代码相互浸入的问题,保持模块的功能单一性原则。

2. 模块定制化

在选择规则引擎模块后,我们抛出了一种假设,是否需要定制化规则引擎模块?由于Hybris自身的实现机制,当前的规则引擎是服务于促销的,也就是说规则引擎是通过Promotion Source Rule来驱动执行的。但是我们面对的业务是收集客户的属性与行为,显而易见,业务的不同让继续使用Promotion Source Rule变得不合理。因此,创建新的Segment Source Rule不仅能够满足当前的业务需求,而且能够与Promotion Source Rule进行隔离,避免交叉影响。

3. 可测性分析

能否快速进行功能性测试,以及代码单元测试是架构设计中需要考虑的一个问题。通过测试能够衡量出模块之间是否存在着深度依赖,而导致局部无法测试的问题。针对于当前的架构,规则引擎与个性化模块处于高聚合,低耦合模式,两者能够独立运行,满足功能可测性要求。

4. 数据存储

通过自定义模块解决数据存储问题,这部分数据在服务于不同的功能模块同时,又进行中心化存储,便于数据维护工作。

5. 维护性与扩展性

规则引擎与个性化模块提供了友好的维护界面,业务人员可以通过后台系统全方位的进行数据、功能的维护。与此同时,模块内部扩展性很高,易于添加新功能或修改现有功能。

体系架构

图片描述

“UserToSegment”模块就是我们前面提到的自定义模块,“UserToSegment”模块不但能够衔接两个模块之间的功能性整合,同时也反应出数据层面上的整合。

图片描述

个性化模块数据模型

个性化模块是通过不同数据模型间的关联联系进行支撑,与数据集成相关的模型如下:

  • Segment反映有共同偏好,喜好的客户群
  • UserToSegment 对象用于记录User与Segment的关联关系

通过数据模型,我们可以发现,个性化服务最终落实在客户群(Segment)上,客户群与客户的映射关系被保存在UserToSegment表中,而规则引擎所反映出的分配结果通过“UserToSegment”模块将两者进行关联,即创建或者修改一条客户与客户群关系的记录。可见,规则引擎为个性化模块提供了必要的基础数据准备。因此,无论是从功能角度,还是从数据角度,“UserToSegment”模块都是完成两个模块集成的最佳切入点,同时这是一种是非侵入式的整合,意味着规则引擎与个性化模块仍然可以独立运行。

到此,我们展现并阐述了个性化服务体系架构,以及明确了规则引擎与个性化模块在体系中各自功能职责,那么这两个模块应该如何具体利用呢?下面,将为读者一一阐述。

基于Hybris规则引擎收集客户属性与行为,构建客户群

收集客户属性、行为等特征是开展个性化服务的依据,体现购物过程中的方方面面,具有动态性特点。通过属性,行为可以衍生出复杂的业务条件用于构建客户群,那么,如何利用规则引擎呢?

首先,将收集客户特征行为所涉及的现实业务条件映射到规则引擎,通过规则引擎的规则条件进行描述。其次,将客户整理,归纳到目标客户群抽象为规则引擎的业务决策。

最终,通过不同的规则条件来驱动目标客户的分类。

业务规则映射

1. 规则条件

基于客户属性,购物行为,产生不同的规则条件。比如:

  • 客户属性(包括但不限于)
    生日,年龄,注册时间、来源、状态,常用支付方式。
  • 购物行为(包括但不限于)
    购物车商品总数、是否包含特殊商品,订单日期、数量、金额,下订单频率,浏览商品分类,访问特殊页面。

技术实现:Condition defines

图片描述
图片描述
图片描述

2. 业务决策

当命中规则条件后,将客户归类到目标客户群是期望的业务决策。

技术实现:Action define

图片描述
图片描述

利用Hybris 个性化模块提供个性化服务

Hybris个性化模块应用在CMS组件以及促销上,并服务于目标客户群。因此,将实际的个性化表现行为抽象为不同的CMS组件,或者促销是利用个性化模块的基础准备,最终借助自动触发机制向目标客户群提供个性化服务。具体实现步骤如下:

1. 根据个性化表现行为抽象出CMS组件、促销

  • “新商品推荐“组件 – 该组件可以绑定任意一种商品,提供商品描述以及加入购物车功能
  • “买一送一”个性化优惠促销

2. 映射CMS组件、促销等资源到个性化模块,用于配置管理

  • CMS 组件- 技术实现:

图片描述
图片描述
图片描述

  • 促销 - 技术实现:对于个性化促销,只需要将一个普通的促销标记为:“personalizatied”即可

到此,我们分别阐述了如何利用规则引擎与个性化模块来处理不同的业务需求。但是伴随着研发周期的推进,新的个性化需求纷纷而至,那么我们将如何应对这些新的挑战呢?

业务延伸,伴随而来的挑战

在满足个性化服务基本的需求后,随着业务的延伸,势必伴随着新的挑战。那么,如何在当前的体系架构下来解决新的需求呢?下面,将通过若干例子来为读者介绍。

1. 挑战一:个性化的促销提醒服务

借助个性化模块,电商网站能够针对目标客户群发布优惠促销,那么带来的问题是:当发布新优惠促销或者更新已有的促销规则后,如何快速地通知到客户群里的客户呢?

解决方案:落实到促销级别上。当促销发布后,通过扩展规则编译监听器的 ”afterComplie”方法能够灵活的集成任何第三方系统(比如:邮件系统),向客户群推送实时的消息通知。

技术实现:Listener define

图片描述

图片描述

2. 挑战二:个性化服务的动态失效机制

随着业务的延伸,个性化服务需要提供服务的动态实效机制,当超过失效时间后,系统将自动收回该客户的个性化服务。

解决方案:落实到个性化模块,通过扩展Segment模型,动态的为每个客户计算失效时间,一但超过失效时间,系统将自动把客户从客户群中移除,从而达到服务失效的效果。

技术实现:在Segment模型创建“持续时间”属性(单位:天)。失效逻辑:系统时间与客户分配时间的天数差 大于 持续时间,则服务失效。

3. 挑战三:个性化的促销活动周期

相同的促销,每一个客户允许使用的时间是不同的。比如:客户A在2月1日-3月15日内使用;客户B在4月5日-5月12日内使用;那么如何动态分配活动周期为每个客户呢?

解决方案:利用Segment模型“持续时间”属性(单位:天)来动态计算促销活动周期。

技术实现:开始时间:客户分配时间;结束时间:通过持续时间和客户分配时间,推算出结束时间;

4. 挑战四:离线分析与推荐

通过离线分析客户最近数次购买记录,将客户分配到目标客户群。在客户下一次登陆电商网站的时候,就给出个性化的展示。

带来的思考

本文基于Hybris电商平台对个性化服务的实践进行阐述,着重点在于如何利用Hybris电商平台自身模块进行服务开发。但是,我们同样能够通过其他渠道来实现更加广泛的个性化服务。比如,基于谷歌分析来采集客户的购物行为。创建标签库,并结合个性化的推荐算法使内容标签化,用户标签化,最终通过这些标签为客户提供个性化信息。丰富的个性化推荐算法(比如:基于内容的推荐算法,基于关联规则的推荐算法,协同过滤)以及大数据分析,AI的应用都能够为个性化服务的实施提供强大的基础保障。

结束语

随着电商的不断发展,个性化服务显得越来越重要,它能够将网站的浏览者转变为购物者,提高电商网站的的销售能力,以及客户的忠诚度。因此,个性化服务已成为推动电商发展的加速器。

作者简介:杨智,现就职于奥博杰天软件有限公司,担任多个电子商务项目的解决方案架构师。曾担任未来国际软件股份有限公司多个项目的技术负责人,负责政府网站以及政务平台设计,研发。参与国家林业局多个系统集成项目。关注电子商务应用,微服务架构以及DevOps。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Hybris平台的电商个性化服务实践 的相关文章

  • CodeIgniter(CI)4.1.9 安装学习整理ing

    最近一直在看各种php的框架 前面一个是安装的laravel 安装成功并实验了一个小例子 下面开始试着安装 CodeIgniter 我找了一个不是最新的版本 4 1 9版本 这个版本要求的还是比较高的 要求PHP 7 3 我习惯于用wind
  • 电商APP开源

    电商APP开源 https github com myxh CoolShopping 效果demo CoolShopping 一个仿拉手团购的购物App 采用Bmob后台实现短信验证码注册 登录 收藏 订单管理 自动更新等功能 数据抓取自拉
  • 什么是架构,架构的本质是什么

    不论是开发人员还是架构师 我们都一直在跟软件系统打交道 架构是在工作中出现最频繁的术语之一 那么 到底什么是架构 你可能有自己的答案 也有可能没有答案 对 架构 的理解需要我们不断在实践中思考 归纳 演绎 形成自己的认知 一 什么是软件架构
  • MVC三层架构

    1 什么是MVC Model View Controller 模型 视图 控制器 模型就是Java对应数据库的那些字段 实体类 视图 就是JSP页面 控制器 就是Servlet负责跳转页面 Controller作用 Controller其实
  • AS配置NDK开发环境,附CMake、NDK-build构建工具用法

    注意 Android Studio需要是1 3及以上版本 且版本号小于2 2 见文末说明 步骤1 新建一个项目 打开Project Structure 设置Android NDK Location目录 如果没有提前下载NDK包 可打开SDK
  • 阿里云大佬告诉你为什么学不会设计模式,归根到底还是方法不对

    最近总有读者在后台跟我说 工作几年 自己的代码质量似乎没有什么提升 我觉得他的情况非常典型 很多人应该或多或少都有过类似的经历 毕业几年 几乎一直在做复制黏贴的工作 偶尔会遇到原有业务扩展的需求 想简单应付一下完事的话 也不难 无非就是多加
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • 如果老板要求你的系统接入春晚大流量活动,你会心慌慌吗?

    目录 回头看看 原始系统技术架构 基于CDN的活动静态页面缓存方案 基于Nginx Tomcat Redis的多级缓存方案 超高并发写请求RocketMQ削峰填谷方案 系统限流防雪崩体系架构方案 今天给大家分享一个话题 就是如果要是你老板突
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • 【微服务架构设计】微服务不是魔术:处理超时

    微服务很重要 它们可以为我们的架构和团队带来一些相当大的胜利 但微服务也有很多成本 随着微服务 无服务器和其他分布式系统架构在行业中变得更加普遍 我们将它们的问题和解决它们的策略内化是至关重要的 在本文中 我们将研究网络边界可能引入的许多棘
  • 4大主流CPU处理器技术架构

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 导读 RISC 精简指令集计算机 是一种执行较少类型计算机指令的微处理器 起源于80年代的MI
  • 项目实战之RabbitMQ冗余双写架构

    作者名称 DaenCode gt https blog csdn net 2302 79094329 作者简介 啥技术都喜欢捣鼓捣鼓 喜欢分享技术 经验 生活 人生感悟 尝尽人生百味 方知世间冷暖 所属专栏 项目所感所想 gt https
  • 双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

    前言 前两天 我收到了阿里巴巴的实习offer 从学长内推开始面试到拿到最后offer经历了4面技术 一面交叉面和一面HR面 经过了漫长的等待和几次几乎折磨的面试之后 终于拿到了实习offer 自我介绍 本人来自西南某双非本科学校 该校学的
  • Docker与微服务:构建和部署微服务架构的完整指南

    微服务架构已经成为现代应用开发的主要范式之一 而Docker容器技术则为微服务的构建 部署和管理提供了理想的解决方案 本文将深入探讨如何使用Docker构建和部署微服务架构 提供更多示例代码和细致的指南 以帮助大家更全面地理解和运用这些关键
  • 基于Java EE架构的汽车车辆管理系统设计与实现-计算机毕业设计源码68424

    摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在现实运用中 应用软件的工作规则和开发步
  • 实现基于 Keepalived 和 Nginx 的高可用架构

    目录 前言 1 高可用性简介 2 准备服务器和软件 3 高可用的配置 主从配置 3 1 配置 etc keepalived keepalived conf文件 3 2 配置 usr local src nginx check sh脚本文件
  • 专车数据层架构进化往事:好的架构是进化来的,不是设计来的

    很多年前 读了 子柳 老师的 淘宝技术这十年 这本书成为了我的架构启蒙书 书中的一句话像种子一样深埋在我的脑海里 好的架构是进化来的 不是设计来的 2015 年 我加入神州专车订单研发团队 亲历了专车数据层 架构进化 的过程 这次工作经历对
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • 阿里技术官亲笔力作:Kafka限量笔记,一本书助你掌握Kafka的精髓

    前言 分布式 堪称程序员江湖中的一把利器 无论面试还是职场 皆是不可或缺的技能 而Kafka 这款分布式发布订阅消息队列的璀璨明珠 其魅力之强大 无与伦比 对于Kafka的奥秘 我们仍需继续探索 要论对Kafka的熟悉程度 恐怕阿里的大佬们
  • [机缘参悟-131] :《洞见》:为什么佛学是真的 -2-从进化心理学了解佛家的三毒“贪嗔痴”的进化机制

    目录 一 佛家的三毒 贪嗔痴 二 进化心理学对贪嗔痴的解释 2 1 贪欲 2 1 1 贪欲的满足与快乐的本质 2 1 2 贪欲得不到满足与痛苦的本质 2 2 恶意和愤怒 2 3 愚痴和无知 2 3 1 大众对痴的解释 2 3 2 佛对痴的解

随机推荐

  • Xcode多视图应用Tab Bar Controller、Table View Controller2021-04-10

    1 视图控制器 首先应该理解Xcode里的视图控制器一般以controller结尾 在storyboard中添加的每一个视图控制器都有一个默认的名字如View Controller 标识符 可以修改视图控制器的title属性 改它的名字 点
  • 编译执行与解释执行的区别

    今天在看到一篇关于分层编译优化的文章时 看到了解释执行与编译执行两个专业词汇 看着熟悉 但不甚理解 然后在网上搜索了一下 说一下自己的理解 对于我们平时写的代码 一般计算机是没办法直接识别的 需要相应的编译器将其编译层机器代码 一些计算机可
  • AI绘画关键词网站推荐 :轻松获取百万个提示词!完全免费

    一 lexica art 该网站拥有数百万Stable Diffusion案例的文字描述和图片 可以为大家提供足够的创作灵感 使用上也很简单 只要在搜索框输入简单的关键词或上传图片 就能为你提供大量风格不同的照片 点击照片就能看到完整的AI
  • uniapp调用地图,进行位置查询,标记定位

    这周开会又新增一个小功能 就是需要通过身份证号 手机号在地图查询 后台返回经纬度 标记位置 想着挺麻烦 做的时候发现没啥技术 分享给大家
  • JDK,JRE和JVM三者间关系

    JDK是什么 JDK Java Development Kit Java开发工具包 是针对Java开发程序员的产品 是整个Java的核心 包含Java运行环境JRE Java工具和Java基础类库 具有3个主要组成部分 1 Java 编程语
  • java重试工具库: 实现业务逻辑与重试逻辑的解耦

    对于开发过网络应用程序的程序员来说 重试并不陌生 由于网络的拥堵和波动 此刻不能访问服务的请求 也许过一小段时间就可以正常访问了 比如下面这段给某个手机号发SMS的伪代码 发送SMS public boolean sendSMS Strin
  • chrome打开开发者工具(F12)之后看不到请求头信息

    开发者工具的network窗口能够查看浏览器的请求头以及响应头信息 但是有时打开开发者工具会遇到像下图这种情况 找不到请求信息 无法查看请求头 或响应头 解决方法 点击 Filter 按钮 也就是图中的漏斗形状的按钮 下面会多出一系列选项
  • 选择 dwm 作为窗口管理器的 4 大理由分析

    导读 我喜欢极简 如果可能 我会尽量在一个终端下运行所有需要的程序 这避免了一些浮夸的特效占用我的资源或者分散我的注意力 而且 无论怎么调整窗口大小和位置却依旧无法使它们完美地对齐 这也让我感到厌烦 出于对极简化的追求 我喜欢上了 Xfce
  • 14.SpringData-Mongo

    SpringData Mongo Spring data对MongoDB做了支持 使用spring data mongodb可以简化MongoDB的操作 封装了底层的mongodb driver 地址 https spring io pro
  • opencv图像畸变矫正:源码学习

    参考资料 相机标定 4 矫正畸变 undistort 和initUndistortRectifyMap 背景 opencv提供了直接进行畸变矫正的代码 因在项目中需要使用畸变矫正 因此研究一下opencv中畸变矫正的相关接口与代码 便于学习
  • 凸优化学习(六)——一个简单的对偶实例

    注意 本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目 https github com Kivy CN Stanford CS 229 CN 中的凸优化部分的内容进行翻译学习 2 一个简单的对偶实例 作为对偶的一个简单应用 在本节
  • 最接近的三数之和

    题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target 请你从 nums 中选出三个整数 使它们的和与 target 最接近 返回这三个数的和 假定每组输入只存在恰好一个解 示例 输入 nums 1 2 1 4 t
  • (计算机复试考研)操作系统重点知识梳理

    1 操作系统引论 操作系统 配置在计算机硬件上的第一层软件 是对硬件系统的首次扩充 为用户和应用程序提供一个简单接口 定义 一组能有效组织和管理计算机硬件和软件的资源 合理地对各类作业进行调度 方便用户使用的程序的集合 操作系统的目标 1
  • C++线程池的实现

    池式结构 在计算机体系结构中有许多池式结构 内存池 数据库连接池 请求池 消息队列 对象池等等 池式结构解决的主要问题为缓冲问题 起到的是缓冲区的作 线程池 通过使 线程池 我们可以有效降低多线程操作中任务申请和释放产 的性能消耗 特别是当
  • Android OpenGL ES零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader

    前言 在前2篇文章中 我们都说到着色器 且在第二篇中正式说到 这着色器只能用在OpenGL ES2 x等可编程管道里面 而在OpenGL ES1 x是不能用的 但我们一直没有说这是为什么 两者有什么区别 那这篇我们就一起来学习下OpenGL
  • react新出来两个钩子函数是什么?和删掉的will系列有什么区别?

    react新旧生命周期的区别 1 新生命周期中去掉了三个will钩子 分别为componentWillMount componentWillReceiveProps componentWillUpdate 2 新生命周期中新增了两个钩子 分
  • DB2数据库-获取表结构异常:[jcc][t4][1065][12306][4.26.14]CharConvertionException ERRORCODE=-4220,SQLSTATE=null

    背景如下 DB2数据库 获取表结构异常 jcc t4 1065 12306 4 26 14 CharConvertionException ERRORCODE 4220 SQLSTATE null 搜索引擎搜索解决办法 官方解决方法 db2
  • Transformer(四)--实现验证:transformer 机器翻译实践

    转载请注明出处 https blog csdn net nocml article details 125711025 本系列传送门 Transformer 一 论文翻译 Attention Is All You Need 中文版 Tran
  • HBase与MapReduce整合:TableMapper与TableReducer部分源码分析

    目录 关于TableMapper和TableReducer TableMapReduceUtil initTableMapperJob initTableReducerJob TableInputFormat TableRecordRead
  • 基于Hybris平台的电商个性化服务实践

    个性化服务是什么 下面例举几个典型的电商网站的个性化服务案例 对于浏览过新品推荐的客户 电商网站主动为此类客户推荐一款新上市的商品 对于单笔订单总金额达到1000 并且该订单中包含化妆品的客户 此用户将被升级为金牌客户 后续电商网站定期为金