商品系统设计 - 架构设计

Posted kevinSays

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商品系统设计 - 架构设计相关的知识,希望对你有一定的参考价值。

上面主要讲了一些商品系统的设计,接下来我们从大的方面来讲一下商品系统应该如何架构。

首先商品从业务上可以区分成,类目管理模块和商品模块。

商品模块又细分为写管理模块和读管理模块。写管理模块负责商品的写入、搜索,主要运营端的管理,读模块主要负责提供高性能强一致性的读服务。下面分别展开来讲这两个模块。

写管理模块架构

我们在设计架构的时候,通常会涉及到应用架构,数据架构,技术架构等三个部分。这里我们再根据时间顺序,分为代码架构,数据架构,部署架构,运维架构

代码架构

以DDD的思想触发,单位职责化代码

在这里插入图片描述

要点说明:

  1. 模型主数据化,包括模型的是否必须、默认值、校验规则等。
  2. 动态校验标准化,标记校验标准化,支持可扩展
  3. 提供动态的门店选品策略
  4. 商品状态管理分成两个部分,状态自动化,状态通知集中化。
  5. 商品消息独立设计,缓冲非缓存,ID通知、富消息通知、变化通知。分成三种类型可以有效减少反查。
  6. 商品管理日志

数据架构

基础主数据使用DB进行存储,必要时课提供存储分库分表的存储,以ProductId/SkuId做为分库键,设计表的时候记得加skuId.

搜索使用Solr或者ES进行存储,主要支持商品搜索功能、商品日志搜索功能。

商品快照使用NoSQL数据库进行存储,一般使用的是MongoDB.

使用离线日志的方式接入数据平台,提供统计分析报表。

部署架构

  1. 建议使用读写分离,灵活支持读写量的需求
  2. 数据集中化存储,部署、消息 租户隔离

运维架构

  1. 服务监控: 主要是API、资源监控、网络监控。
  2. 动态日志: 主要通过动态的配置,可以对线上服务进行轻度的DEBUG。
  3. Agent排查: 如果动态日志不满足,那么就开放JMX或者使用Agent服务,来灵活对系统服务排查。

读模块架构

代码架构

  1. 结构返回 Result, 定义错误码,方便下游识别进行处理
  2. 批量接口需要 限定数量。
  3. 缓存设计是 重中之重,需要设计多级缓存,包括本地缓存和被动缓存。本地缓存分为主动缓存和被动缓存,使用Guava/Caffeine即可,堆外缓存可选采用。如下图所示。
  4. 商品信息精细化,按需分配所需字段。
  5. 核心服务JVM资源隔离,这里所指的是线程成。
  6. 远程缓存读取采用Pipeline模式,可以有效的提高性能约4倍+。
  7. JVM读取建议采用单线程,可有效提高吞吐量。
  8. 一致性对比工具
缓存要点

**数据架构 ** 略

部署架构

  1. 分组设计,核心分组、消息分组、日常分组、worker分组、其他
  2. 机房高可用
  3. 热备集群
  4. 远程缓存需要根据字段分成不同的集群,提升QPS上限,更好支持水平扩展。

运维架构 除了和写服务一样的需求,还要支持性能方面的trace,通常来说trace都是采样,所以对于服务TP50的提升会很有效,TP99服务提升手段不是很明显。

扩展阅读: TP99如何优化呢? 作者认为需要分成两个阶段: 基准提升和减少波动。基准提升: 流程阶段监控,资源命令基准压测,缓存方式改进。此外还有一些比较hack的手段,比如优化编译的GraalVM 减少波动: 环境(容器规格和JVM内存及回收器)调整测试,减少穿透,减少GC。

至此,我们基本完成了商品系统从业务设计到架构的讨论。本系列的文章也只能作为比较粗粒度地介绍,如果读完能够对商品系统有一个整体的印象,那么我们就不虚此行。我们下次见。


以上是关于商品系统设计 - 架构设计的主要内容,如果未能解决你的问题,请参考以下文章

4918字,详解商品系统的存储架构设计

详谈京东的商品搜索系统架构设计

苏宁易购11.11:商品详情系统架构设计

电商商品秒杀系统架构分析与实战

京东达达核心系统架构:从短平快到体系化的设计精要

浅谈12306核心模型设计思路和架构设计