B2B
价格平台目前不仅仅支持上图中出现的价格类型(级别价、阶梯价、京东价、协议价、
VIP
价、一口价、市场价、零售价、批发价),此外还支持:区域价、区域级别价、区域阶梯价等价格类型;平台支撑了四大业务线:分销、大客户、掌柜宝、医药城,在平台现有
650W+
的数据中各业务线分别占比为:
6.66%
、
89.75%
、
0.24%
、
3.35%
;
平台分别由
CBI
(价格服务中心)、
SYNC
(异步组件)、
SVR
(平台服务)、
DAL
(数据访问层)、
RPC
(外部服务依赖层)、数据持久(储存层)六大模块组成。
-
数据持久层:数据库采用
Mysql
,由于数据量大,借助公司
Gum
(弹性数据库)实现分库存储和查询。由于价格接口访问量大,接口效应时间和可用率和并发性要求高,数据查询将不直接查询数据库,通过缓存实现。缓存分为两种:本地缓存
Ehcache
和分布式缓存
Redis
,其中
Redis
使用公司统一缓存服务
Jimdb
,减少维护成本,查询服务首先查询本地缓存,未命中则查询
redis
缓存。为了解决分库后,批量价格查询跨库问题,引入
Es
集群。数据库与缓存(
Ehcache
、
Redis
)、
ES
集群、
Hbase
间数据同步使用
BinLake
管道减少数据延迟。
Hbase
集群用于记录价格变化历史归档信息。
-
DAL
(数据访问层):价格服务中心与数据层间的通讯管道,提供统一的数据访问服务。为了满足未来价格数据的增量,价格底层数据采用分库,根据业务路由字段访问具体的数据库。
-
RPC
(外部服务依赖层):负责与外部依赖接口交互,如:主站仓报价、京东价、
POP
价格、
B2B
任务引擎、返利系统等。
-
SVR
(平台服务):负责完成平台服务组装。
-
CBI
(价格服务中心):由
publish
服务、
pick
服务、异步组件组成。其中:
-
Publish
服务:支持价格发布服务(写服务),包括:价格设置、价格清零、价格限量(数量增、减)等。
-
Pick
查询服务:统一价格查询服务,经过流程编排计算、数据格式转换返回指定价格类型数据。流程编排,针对于不同大客户的合同类型(折扣价、实时价、京东价、稳定协议价、较低协议价、较低实时价)计算、组合出不同的价格。
-
Publish
服务、
pick
服务独立部署,避免读、写服务间互相影响。
价格服务中心的接口需提供
JSF
、
HTTPS
两种不同的调用方式,以此便于适应不同的外部调用场景。
-
SYNC
(异步组件):由
MQ
、
Worker
组成,其中:
-
MQ
组件。负责
MQ
的接收、发送。接收的
MQ
,如:
POP
价格变化
MQ
(新通路
POP
商品)、京东促销价格变化
MQ
(大客户),平台价格变化
MQ
发送;
-
Worker
组件。完成历史数据归档、缓存同步、数据清写和纠正;由
B2B
任务引擎执行统一调度;
上图流程展示了整个平台的数据流向,平台
B2B-PRICE-SYNC
接收到
Binlake
变更消息后,调用
B2B-PRICE-SVR
、
B2B-PRICE-DAL
服务。
B2B-PRICE-DAL
层将开启多线程分别完成对异步数据源
Jimdb
、
Hbase
、
Es
集群的异步写,如果
Jimdb
集群写成功则,发送
MQ
消息通知
Ehcache
集群进行数据更新,仅当
Jimdb
、
Hbase
、
Es
集群全部写成功后,再由
B2B-PRICE-SYNC
对外统一发送价格平台变更
MQ
消息通知外部系统。如果
B2B-PRICE-SYNC
调用底层重试
3
次(保持幂等性)失败,则把数据写入任务引擎,由引擎调度延迟重试。
平台建设中接入了公司的
Binlake
系统,下面简单介绍下组成
Binlake
系统的三大服务组件: