拿个offer - 开源&项目实战 拿个offer - 开源&项目实战
首页
后端技术
  • 🔥12306
  • 刚果商城
  • 12306 (opens new window)
  • 刚果商城 (opens new window)
加入群聊
🔋知识星球
代码仓库 (opens new window)
首页
后端技术
  • 🔥12306
  • 刚果商城
  • 12306 (opens new window)
  • 刚果商城 (opens new window)
加入群聊
🔋知识星球
代码仓库 (opens new window)
  • 必读手册

    • 项目简介
      • 刚果商城
      • 如何开始
      • 接口文档说明
      • 服务列表
      • 技术架构选型
      • 项目结构说明
      • 商品 SPU 和 SKU 之间的区别
    • 视频教程
    • 环境搭建
    • 快速开始(前端)
    • 快速开始(后端)
  • 后端手册

    • 商城系统BFF演进架构
    • 亿级用户如何分库分表
    • 商品秒杀库存超卖问题
    • 亿级数据如何快速同步ES
    • 订单如何进行分库分表
    • 订单15分钟未支付自动取消
    • 用户下单重复问题
    • 消息队列不被重复消费
    • 百万数据量安全导入
    • 百万数据量安全导出
    • 前端返回数据脱敏
    • 数据库敏感信息泄漏
    • 配置文件敏感信息泄漏
    • 雪花算法生成重复
    • 应用OOM异常如何发现
    • 核心接口请求出错如何回溯
    • 分库分表平滑上线&快速回滚
    • 时间分片按照消息ID查询
    • 用户ID分片按照订单ID查询
    • 如何解决缓存穿透&击穿&雪崩
    • 布隆过滤器误判和数据不能删除
    • 如何实现多级缓存
    • 缓存一致性问题
    • 项目中设计模式的场景说明
    • 死磕设计模式之如何抽象策略
    • 死磕设计模式之如何抽象责任链
目录

项目简介

# 刚果商城

刚果商城是个从零到一的 C2C 商城项目,包含商城核心业务和基础架构两大模块。

参照商城系统原型,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块,通过商城系统中复杂场景,给出对应解决方案。使用 DDD 模型开发系统功能,帮助对 DDD 一知半解的开发者树立正确地开发思路。

刚果商城系统是我从事开发以来,在实际工作中遇到各种场景问题的“疑难杂症”汇总。

这些问题有些是自己遇到的,有些是其他人遇到帮忙解决的,最终把解决方案和代码实战放在刚果商城这个系统里。

这个系统没有很完整的商城业务,但是提供了偏架构层面有用的工具和参考,能帮助大家在实际项目中更好地解决问题。

如果你能够认真且坚持把项目看完,我相信你会收获包括不限于下面这些知识点:

  • 基于 DDD 领域驱动模型设计实现的商品、购物车、订单、用户、消息以及支付服务。

  • 掌握分布式锁、分布式事务、分布式搜索、分布式缓存、分布式限流以及分库分表等核心技术。

  • 完成基础组件抽象,规约、缓存、幂等、分布式 ID、数据持久层、脱敏以及日志等底层组件库。

  • 基于 Agent 开发字节码流量监控,监控项目接口 QPS、响应时间和异常请求等核心指标。

  • 掌握常用设计模式实战场景,策略、责任链、装饰器、观察者以及适配器等设计模式。

# 如何开始

刚果商城核心有两块,分别是商城业务和基础架构,通过认真学习分别可以收获以下两种能力提升。

  • 商城业务:通过学习刚果商城中复杂业务处理场景,增加自己的复杂业务处理能力。

  • 基础架构:尝试跟着基础架构部分自己把轮子都造一遍,以此提高自己方案设计和公共代码开发能力。

1)商城核心业务

目前前端页面正在开发中,暂时没有开源出来,所以大家需要通过接口请求访问。接口如何访问详细看下文。

  1. 初始化数据库 (opens new window),比如商品库、订单库、用户库、支付库、购物车库等;
  2. 通过 Docker 安装项目中依赖的中间件 (opens new window),比如 Nacos2、MySQL、Seata、RocketMQ 等;
  3. 学习接口调用流程,项目接口目前全量放入 Apifox 软件中,可通过在线访问;
  4. 查看不同微服务之间的依赖关系 (opens new window),并根据文档中的描述进行修改指定参数;
  5. 找到自己感兴趣的模块功能 Debug 源代码,参考代码设计。
image

2)基础架构

基础架构相关的代码都在 congomall-framework-all 模块中,可以通过官网查看如何实现,或者通过 视频教学 (opens new window) 来学习如何开发基础架构代码。

image

# 接口文档说明

目前刚果商城已开发的接口已汇总至下述接口文档中,本地启动对应项目,通过接口文档访问查看效果。

https://www.apifox.cn/web/project/1038592/apis/api-50106328-run (opens new window)

如果需要通过 Apifox 直接调用,需要安装对应浏览器内网插件,考虑到一部分同学没有科学上网,这里把插件安装包带上,跟着教程安装即可使用。 安装文档:https://www.apifox.cn/help/app/web/browser-extension (opens new window)

# 服务列表

模块名称 服务名称 访问地址
1 congomall-message 消息发送 eg:邮件、公众号、短信等 http://localhost:8001 (opens new window)
2 congomall-customer-user C 端用户 http://localhost:8002 (opens new window)
3 congomall-gateway 外部网关 http://localhost:8003 (opens new window)
4 congomall-product 商品服务 http://localhost:8004 (opens new window)
5 congomall-product-job 商品 Job 服务 http://localhost:9001 (opens new window)
6 congomall-cart 购物车服务 http://localhost:8005 (opens new window)
7 congomall-order 订单服务 http://localhost:8006 (opens new window)
8 congomall-pay 支付服务 http://localhost:8007 (opens new window)
9 congomall-basic-data 基础数据服务 http://localhost:8008 (opens new window)
10 congomall-bff BFF 商城聚合层 http://localhost:8009 (opens new window)

# 技术架构选型

当前暂时先梳理后端技术,前端开发后再行梳理。

技术 名称 官网
1 Spring Boot 基础框架 https://spring.io/projects/spring-boot (opens new window)
2 MyBatis-Plus 持久层框架 https://baomidou.com (opens new window)
3 HikariCP 数据库连接池 https://github.com/brettwooldridge/HikariCP (opens new window)
4 Redis 分布式缓存数据库 https://redis.io (opens new window)
5 RocketMQ 消息队列 https://rocketmq.apache.org (opens new window)
6 ShardingSphere 数据库生态系统 https://shardingsphere.apache.org (opens new window)
7 SpringCloud Alibaba 分布式框架 https://github.com/alibaba/spring-cloud-alibaba (opens new window)
8 SpringCloud Gateway 网关框架 https://spring.io/projects/spring-cloud-gateway (opens new window)
9 Seata 分布式事务框架 http://seata.io/zh-cn/index.html (opens new window)
10 Canal MySQL 订阅 BinLog 组件 https://github.com/alibaba/canal (opens new window)
11 MinIO 文件存储框架 https://min.io (opens new window)
12 Swagger3 项目 API 文档框架 http://swagger.io (opens new window)
13 Knife4j Swagger 增强框架 https://doc.xiaominfo.com (opens new window)
14 Maven 项目构建管理 http://maven.apache.org (opens new window)
15 Redisson Redis Java 客户端 https://redisson.org (opens new window)
16 Sentinel 流控防护框架 https://github.com/alibaba/Sentinel (opens new window)
17 Hippo4j 动态线程池框架 https://hippo4j.cn (opens new window)
18 XXL-Job 分布式定时任务框架 http://www.xuxueli.com/xxl-job (opens new window)
19 SkyWalking 分布式链路追踪框架 https://skywalking.apache.org (opens new window)
20 JetCache Java 缓存框架 https://github.com/alibaba/jetcache (opens new window)

# 项目结构说明

├── congomall-basic-data  || -- # 基础数据服务
│   ├── congomall-basic-data-application
│   ├── congomall-basic-data-domain
│   ├── congomall-basic-data-infrastructure
│   ├── congomall-basic-data-interface
├── congomall-bff  || -- # 商城 BFF 聚合层
│   ├── congomall-bff-biz
│   ├── congomall-bff-remote
│   ├── congomall-bff-web
├── congomall-cart  || -- # 购物车服务
│   ├── congomall-cart-application
│   ├── congomall-cart-domain
│   ├── congomall-cart-infrastructure
│   ├── congomall-cart-interface
├── congomall-coupon  || -- # 优惠券服务
├── congomall-customer-user  || -- # C端用户服务
│   ├── congomall-customer-user-application
│   ├── congomall-customer-user-domain
│   ├── congomall-customer-user-infrastructure
│   ├── congomall-customer-user-interface
│   ├── congomall-customer-user-mock
├── congomall-framework-all  || -- # 基础组件
│   ├── congomall-base-spring-boot-starter  || -- # 顶层抽象基础组件
│   ├── congomall-cache-spring-boot-starter  || -- # 缓存组件
│   ├── congomall-common-spring-boot-starter  || -- # 公共工具包组件
│   ├── congomall-convention-spring-boot-starter  || -- # 项目规约组件
│   ├── congomall-database-spring-boot-starter  || -- # 数据库持久层组件
│   ├── congomall-ddd-framework-core  || -- # DDD抽象接口组件
│   ├── congomall-designpattern-spring-boot-starter  || -- # 设计模式抽象组件
│   ├── congomall-distributedid-spring-boot-starter  || -- # 分布式ID组件
│   ├── congomall-flow-monitor-agent  || -- # 微服务流量监控组件
│   ├── congomall-httputil-spring-boot-starter  || -- # Http网络调用组件
│   ├── congomall-idempotent-spring-boot-starter  || -- # 分布式幂等组件
│   ├── congomall-log-spring-boot-starter  || -- # 日志打印组件
│   ├── congomall-minio-spring-boot-starter  || -- # 文件存储组件
│   ├── congomall-openfeign-spring-boot-starter  || -- # 微服务调用组件
│   ├── congomall-rocketmq-spring-boot-starter  || -- # 分布式消息队列组件
│   ├── congomall-sensitive-spring-boot-starter  || -- # 前端返回数据脱敏组件
│   ├── congomall-swagger-spring-boot-starter  || -- # 文档API组件
│   ├── congomall-web-spring-boot-starter  || -- # Web组件
│   ├── congomall-xxljob-spring-boot-starter  || -- # 定时任务组件
├── congomall-gateway  || -- # 网关服务
├── congomall-message  || -- # 消息服务
│   ├── congomall-message-application
│   ├── congomall-message-domain
│   ├── congomall-message-infrastructure
│   ├── congomall-message-interface
├── congomall-order  || -- # 订单服务
│   ├── congomall-order-application
│   ├── congomall-order-domain
│   ├── congomall-order-infrastructure
│   ├── congomall-order-interface
├── congomall-pay  || -- # 支付服务
│   ├── congomall-pay-application
│   ├── congomall-pay-domain
│   ├── congomall-pay-infrastructure
│   ├── congomall-pay-interface
├── congomall-product  || -- # 商品服务
│   ├── congomall-product-application
│   ├── congomall-product-domain
│   ├── congomall-product-infrastructure
│   ├── congomall-product-interface
│   ├── congomall-product-job
├── congomall-test-all  || -- # 测试用例
│   ├── congomall-flow-monitor-agent-test
│   ├── congomall-h2-test
│   ├── congomall-oom-test
│   ├── congomall-smooth-sharding-test
│   ├── congomall-yaml-test
├── dev-support  || -- # 开发工具包

# 商品 SPU 和 SKU 之间的区别

1)什么是 SPU。

Standard Product Unit,即:标准化产品单元。

SPU 是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。

用途:描述一种产品。

举例: 一个土豪金色 IPhone X 和一个银色 IPhone X 都是同一个 SPU,不进行具体的颜色,内存大小等属性的区分。

场景:数据统计,例如:通过 SPU 查看本月 IPhone X 的销售量。

2)什么是 SKU。

Stock Keeping Unit,即:库存量的最小表示单元。

SKU 即库存进出计量的单位, 可以是以件、盒、托盘等为单位。

用途:描述一种产品的最小存货单元,即:单品。

举例:一个土豪金色 IPhone X 和一个银色 IPhone X 是两个不同的个 SKU,需要区分颜色,款式,内存大小等等。

场景:数据分析,例如:通过 SKU 查看土豪金色还是银色的 IPhone X 更受市场青睐。

3)SPU 和 SKU 的区别。

SKU 指的是商品具体的子实体。

SPU 和 SKU 是包含关系,一个 SPU 包含若干个商品 SKU 子实体,商品 SKU 从属于商品 SPU。

🚀 系统提示:访问文档失败 🚀

原因:开源不易,文档仅对已 Star 刚果商城项目的用户开放。

  • https://gitee.com/nageoffer/congomall
  • https://github.com/nageoffer/congomall

操作步骤:点击下方「Gitee 项目」和「GitHub 项目」按钮 Star 项目即可。 刚果商城所有端的代码都会完全开源,为了更好地完善这个框架,希望大家多多支持。

  • ✅ Gitee项目
  • ✅ GitHub项目
  • 🥳 加入交流群
上次更新: 2023/07/18, 21:29:23
视频教程

视频教程→

Theme by Vdoing | Copyright © 2022-2023 马丁玩编程 | Apache2 License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式