栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 架构设计

商品系统设计(四) - 架构设计

架构设计 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

商品系统设计(四) - 架构设计

商品系统架构

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

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

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

写管理模块架构

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

代码架构

以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。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/912221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号