1. 背景
1.1 精细化运营面临四大难题
1.2 商品标签平台旨在解决上述痛点
2. 系统总览
3. 系统核心设计之如何保证标签的实时性
3.1 背景
3.2 核心设计
4. 系统核心设计之如何保证数据的一致性
4.1 背景
4.2 机制拆解
5. 系统核心设计之如何消除数据读取瓶颈
5.1 背景
5.2 核心理念
6. 未来构想
7. 总结
转转作为国内领先的二手电商平台,商品品类横跨数码3C、家电家居乃至奢品、汽车,用户群体与需求呈现显著差异化。例如,学生群体侧重性价比,白领阶层偏好品质服务。为了实现商品与用户的精准匹配,就需要精细化的运营策略,然而,精细化的运营却面临以下难题:
整个商品标签平台大致上可分为三层:
应用层:应用层作为系统的入口,负责提供用户操作界面(后台配置中心、标签后台组件)和RPC 接口,是用户和外部系统与标签平台进行交互的通道。
服务层:服务层是系统的核心业务处理层,负责执行关键的商品标签匹配、标签生命周期管理、离线数据管理、商品管理和数据互联互通等核心业务逻辑。
数据层:数据层为服务层提供多样化的数据存储能力,包括关系型数据库(MySQL)、搜索引擎(ES)、本地缓存(Local Cache)和分布式缓存(Redis),以满足不同类型数据的存储和高效访问需求。
作为电商平台,商品的更新和用户的行为都会时刻发生,商品标签的实时性会直接影响到用户的体验和整体的运营效率。那么在标签平台中,是如何设计来保证实时性呢?
解释:增量(给变动的商品重新匹配标签);存量(给符合标签规则的商品进行标签绑定)
流量分离:上图中,虽然执行的都是商品和标签的匹配操作,但明确区分了实时性要求高的增量打标和非实时性的存量打标。为什么这么做呢?
事件驱动:通过对商品进行监听,让系统对商品数据的变更事件立即做出反应,而不是被动等待或轮询。当商品数据发生变化(例如商品创建、更新、价格变动、属性变更等)时,系统能够立即捕获这些事件,并触发后续的打标流程。
引入去重 MQ (Deduplication MQ) 机制:在实践中发现,一个商品的某一块数据发生了变化,那么其他数据会产生一种联动效应,一起发生变化,所以在增量通道中新增"ES处理去重MQ"和"增量标签匹配去重MQ"两种去重消息队列,减少因消息重复导致的商品与标签的重复匹配,提升标签数据的准确性和可靠性,降低不必要的资源消耗。
针对存量打标,是对平台所有存量商品进行标签匹配的操作。涉及大量数据的批量处理,数据量巨大,处理时间长,处理环节多,任何环节出现异常都有可能导致数据不一致的发生。为了避免这种情况的发生,平台建立了一套完整的机制,用于保证数据的一致性。
为了保证数据的一致性,在任务执行的过程中每个步骤环环相扣,严密协作。从任务级别的全局互斥锁,到流程内部的断点续传机制,再到消息队列的可靠传输,以及全局异常监控,每一个步骤都指向了同一个目标:确保存量商品标签数据更新的完整性、准确性和可靠性,最终实现系统数据的一致性。
在整个系统中,特别是进行规则匹配时,往往需要频繁地根据规则去查找、读取大量的标签基础数据。如果每次都直接从MySQL读取,在高并发、大数据量的情况下,MySQL很容易成为性能瓶颈,严重影响打标整体效率。为了避免这种现象的发生,设计了一套健全的多级缓存结构。
多级缓存的数据维护
多级缓存的数据读取
多级缓存架构在整个打标系统中至关重要。维护上,以MySQL为权威,缓存失效策略为主,辅以特殊场景清理;读取上,缓存是性能核心,数据获取分层依赖,并具备容错能力。并且这种设计在性能、一致性和可靠性之间取得了平衡,从而支撑起高效稳定的打标流程。
标签平台作为转转运营系统中的重要组成部分之一,未来还有很大的效率提升空间,后续也将从以下几部分入手,进一步提升效率:
转转商品标签平台的成功实践,充分证明了结构化非标数据对于二手电商平台精细化运营的重要性。平台提供了一种技术驱动的解决方案,巧妙地结合了分层架构、事件驱动、消息队列、多级缓存、和数据一致性保障机制等技术手段,有效解决了精细化运营的痛点,并提供强大的技术支持。
关于作者
程军 转转B2C | Java开发工程师
想了解更多转转公司的业务实践,欢迎点击关注下方公众号: