会员中心设计浅谈

背景

在JAVA工程架构中,会员中心是非常基础的服务,其主要是服务C端用户(对于电商行业而言就是终端消费者),是引客、用户运营、用户信息存储、用户画像建立中不可或缺的重要部分。会员中心的设计中,如何建立会员信息模型,如何与其他各服务,如营销服务、订单服务、履约服务、评论服务等完成可靠的数据交换,还是需要花一些心思进行设计的。本文就从工程架构的角度,脱离开具体的业务,谈一谈如何设计一个会员中心服务。

会员中心的位置

以泛电商类业务为例,会员中心所处的位置如下:

会员中心设计浅谈_第1张图片

不难看出,如果将整个系统分为接入、业务、基础服务、存储几层的话,会员中心属于业务层的范畴。

会员中心的核心数据模型

会员中心的核心数据模型当然是C端用户实体,其信息大致可划分为以下几个维度:

  1. 用户基本信息:包括用户联系方式、年龄、性别、地址等基本信息,这部分信息中当然也会在用户画像的构建过程中有所体现,但由于这部分信息通常由用户主动提供,而不是像2那样通过商品浏览、交易、收藏等行为信息,结合策略进行生成,因此归为用户基本信息这一类;
  2. 用户画像相关信息:多层次品类偏好,行为相似用户等信息,主要由策略团队,基于用户在系统中的商品浏览、交易、收藏、评论等行为信息进行生成;
  3. 用户历史信息:包含浏览历史、订单历史、付款历史、评论历史、退款历史、收藏历史等,通常这部分历史信息仅在会员中心上具备查询入口,其数据来源于订单中心(订单历史、付款历史、退款历史)、评价中心(评论历史)等。浏览历史和收藏历史由于数据量通常会比较大,通常会保存于海量数据存储系统中,为了提供优秀的读取性能,最终会同步到缓存集群中供用户中心加以调用;
  4. 用户权益信息:包含但不限于优惠券、积分等用户权益。

会员中心的主要功能

在归纳了会员中心的核心数据模型之后,就能够较为容易地得出会员中心的主要功能:

  1. 会员基本信息存储;
  2. 作为查询入口,提供会员历史信息(必需)、会员权益信息(必需)、用户画像信息(非必要)的查询与信息聚合功能;
  3. 向其他各系统同步会员信息变更(全量、增量),以实现诸如发放新客优惠券、更新迭代用户画像等功能。

会员中心与其他各系统的交互场景

会员中心与其他各系统的交互场景主要有两个方向:

  1. 会员中心将数据同步给其他各系统;
  2. 其他各系统将数据同步给会员中心。

即会员中心向外推送数据(1)和从其他各系统拉取数据(2)。

1. 会员中心将数据同步给其他系统

以新会员注册为例,讲一下会员中心将数据同步给其他系统的流程,以及流程中需要注意的技术点。

此场景主要有三种数据同步方式:

  1. RPC方式:异步/同步均可;
  2. 消息队列方式:会员中心作为生产者,对此事件感兴趣的系统订阅该topic,作为消费者;
  3. binlog方式:由于通常情况下采用MySQL数据库作为会员信息存储介质,可通过binlog将数据变更传输给其他各系统。

上述三种方案的优缺点如下所示:

同步方式 优点 缺点 适用场合
RPC方式 不依赖消息队列或binlog转化器等中间件 每当有新的系统需要感知该事件,都需要上线(改代码或者改配置,当然也可以将配置改成热加载的,但终归是需要会员中心感知的) 这种方式其实目前已经不常见了
消息队列方式 解耦开生产者和消费者,生产者直接跟MQ打交道,无需感知到消费者的存在或者究竟有多少个消费者

1. 依赖可靠稳定的消息队列中间件

2. 与binlog方式相比,缺点在于会员中心要主动发消息到MQ。

这种方式比较常见,因为可以有效地解耦生产者和消费者,但消费者要应对消息的去重,保证exactly once.
binlog方式

会员中心不感知消息同步

由于是基于MySQL binlog的方式,需要订阅数据的各方了解会员中心的表结构 如果订阅数据的各方与会员中心属于同一个team,或者说,如果订阅数据的各方可以感知会员中心的表结构,则可以采用这种方式。

RPC方式依赖于企业建设微服务基础设施,如阿里的Dubbo、HSF等。

消息队列方式依赖于企业建设MessageQueue,常见的MQ包含了Kafka,阿里的MetaQ等。

binlog方式依赖于建设binlog解析器和转发器,常见的binlog解析转发设施有hiriver、阿里的精卫等。

2. 会员中心从其他各系统获取数据

这部分主要包含用户画像的获取以及用户信息相关但非会员中心存储的数据的获取(如历史订单、优惠券等)。

对于用户画像等算法策略较重、大多通过离线进行计算的业务,为了很好地隔离开在线工程与离线任务,通常都是由离线工程将计算得到的用户画像数据灌入缓存集群,以供会员中心使用。常见的缓存集群主要有Redis,memcache和Tair。

对于历史订单、优惠券等用户相关但非会员中心存储的数据,通常会员中心是通过RPC访问其他各服务以获取相应数据。为了更好地提高响应的实时性,对于相互之间无前后关联关系的数据,会员中心可并行地发出RPC访问请求,采用异步的方式获取到数据结果。

你可能感兴趣的:(电商架构)