人人商城设计书
# 1、项目背景
## 电商模式科普
市场上常见的五种电商模式`B2B`、`B2C`、`C2B`、`C2C`、`O2O`,本次课程设计所开发的电商模式为`B2C`模式。
>i 本次课程设计整体逻辑架构可以参考[京东](https://www.jd.com/)。
### 1、B2B模式
B2B(Business to Business),是指商家与商家之间建立的商业关系。例如:阿里巴巴。
### 2、B2C模式
B2C(Business to Consumer),就是我们常看见的供应商直接把商品卖给用户,即“商对客”模式,即所谓的商业零售。直接面向消费者销售产品和服务。例如:苏宁易购、京东、天猫、小米商城。
### 3、C2B模式
C2B(Consumer to Business),即消费者对企业,先有消费者需求生产而后由企业进行生产。
### 4、C2C模式
C2C(Consumer to Consumer),客户之间可以把东西放到网上去卖。例如:闲鱼、淘宝。
### 5、O2O模式
O2O(Online to Office),即线下的商务与互联网结合到了一起,让互联网成了线下交易的前台,线上支付,线下服务。例如:饿了吗、美团、京东到家。
# 2、人人商城
人人商城是一个典型的B2C模式的电商平台,销售自营商品销售给客户。
## 1)项目架构图
>w //TODO:完善项目架构图 Author:彭泽瑄 Date:2021年8月29日
>i 该项目为`前后分离`项目,整体上分为`外网部署`和`内网部署`两大部分。
`外网部署`主要是面向`前端`,可以由`手机APP`、`电脑的Web网站`进行访问;而`内网部署`的为整个网站的`服务集群`,公众通过`前端`完成相应功能,通过相应的`客户端` `发送请求`,交与`Nginx`集群,`Nginx`将请求交予内网的`API网关`,`API网关`使用`Spring Cloud Gateway`,`网关`根据`请 求`,动态的`路由`到相应的`服务`,网关也可以`负载均衡`的调用相应的`服务`,如果服务存在一些问题,也可以在网关层次上进行统一的`熔断降级`,熔断降级是基于`Spring Cloud Alibaba Sentinel`完成实现,`API网关`还有`认证授权`的功能,当请求进入时检测其是否合法,如果合法,再进行放行,网关同时也可以`限制瞬时流量`,`限流`、`熔断降级`功能也都是基于`Spring Cloud Alibaba Sentinel`完成相应的实现;相应的具体的`微服务`都是基于`Spring Boot`完成的编写,服务与服务之间也存在着`远程调用`,这里使用`Spring Cloud Feign`完成,有些请求可能需要`登陆`后,才能进行处理,为此引入`OAuth2.0认证中心`,除了普通的一般登陆以外,还将整合微博、QQ等的`社交登陆`,整个项目的`安全`以及`权限控制`,基于`Spring Security`来进行控制。
服务的`缓存`基于`Redis集群`,`分片集群`+`哨兵集群`,持久化使用`MySQL集群`,实现`读写分离`、`分库分表`。服务与服务之间使用`消息队列`,实现`异步解耦`,包括`分布式事务的最终一致性`,使用`Rabbit MQ`作为消息队列。
相应的`检索`,例如商品信息的`全文检索`,使用`Elastic Search`实现。`图片`、`视频`等资源的存储使用`Alibaba OSS`实现。项目上线后,为了快速的定位项目出现的一些问题,使用`ELK`实现`日志信息`的处理,使用`LogStash`进行`日志收集`,将其存储到`Elastic Search`中,然后使用`Kibana`可视化界面从`Elastic Search`中检索出相关的`日志信息`,帮助快速定位,线上服务的问题之所在。
在`分布式系统`中,由于每个服务都可能部署在很多台机器,而且服务与服务之间还需要相互进行`调用`,为此就需要将相关的服务`注册`到相关的`注册中心`,其他服务就从注册中心`发现`其他服务,使用`Spring Cloud Alibaba Nacos`作为本项目的`注册中心`,同样的,每个服务的`配置`众多,需要实现`集中化配置`,实现改一处配置,其他服务自动修改,为此引入`配置中心`,本次项目的配置中心也使用`Spring Cloud Alibaba Nacos`实现,`链路追踪`使用`Spring Cloud Seluth` + `Zipkin`将相关信息交予`Prometheus`进行`聚合分析`,再由`Grefana`进行可视化的展示,通过`Prometheus`提供的`Alter Manager`实时的以邮件、短信形式通知给管理员,同时本项目也引入了`持续集成`,`持续部署`,项目发布后,由于微服务众多,每一个都打包部署到服务器过于繁琐,基于持续集成开发人员可以将开发出来的代码提交到`GitHub`,运维通过`Jenkins`从仓库拉取代码,打包为`Docker镜像`,基于`Kubernetes`集成整个`Docker服务`,将各个服务以`Docker容器`的形式进行`发布`、`运行`。
## 2)项目技术栈、特点
- 前后端分离开发
- Spring Cloud、Spring Cloud Alibaba一体化解决方案
- 应用监控、限流、网关、熔断降级等分布式方案全方案涉及
- 常见的分布式事务、分布式锁等分布式系统难点全涉及
- 严格遵守Alibaba相关编程规范
- 分析高并发场景的编码方式,线程池,异步编排的使用
- 压力测试与性能优化
- 各种集群技术的区别以及使用
- CI/CD的使用
## 3)微服务划分
本项目为基于前后端分离开发,为此将会创建以下前端项目:
- admin-vue ---> 面向后台管理人员的后台管理系统
- shop-vue ---> 面向公众的商品网站
- Android Application/IOS Application ---> 建立与Android/IOS的程序客户端<span style="color:red">(本次课程设计将会仅做讨论实现)</span>
- 小程序 ---> 面向微信小程序端的商品网站<span style="color:red">(本次课程设计将会仅做讨论实现)</span>
>d 本次课程设计前端内容主要围绕`admin-vue`、`shop-vue`展开,其余内容仅作理论参考,视开发进度而定,本次课程设计暂定不予实现。
`前端`向`后端`发起相关`请求`,交予`API网关`,`API网关`实现相应的`限流`、`鉴权`、`熔断`、`降级`、`过滤`、`路由`、`负载均衡`等一系列功能。随后,数据流入业务微服务集群。业务整体上分为以下微服务:
- 商品服务 ---> 包含对于商品基础的CRUD、商品上下架、商品详情,等等
- 优惠服务 ---> 包含商品相关的优惠信息
- 仓储服务 ---> 商品的库存,地址
- 订单服务 ---> 订单的基础功能,CRUD,用户列表
- 中央认证服务 ---> 登陆、注册、统一的单点登录、社交登陆功能
- 支付服务 ---> 集成了相应的支付的功能
- 用户服务 ---> 用户的个人中心,用户的收货📦地址列表
- 秒杀服务 ---> 完成秒杀等的相关功能
- 检索服务 ---> 商品检索,相关复杂检索(基于elastic search)
- 购物车服务 ---> 商城购物城的CRUD、购物车结账
- 后台管理 ----> 独立的后台管理系统
- ……
除此以外,本项目还将会依赖于其他`第三方服务`,例如物流信息的检索、短信的发送,金融相关的退款,入账,用户的身份认证等。
服务治理:
- Spring Cloud Alibaba
- Nacos注册中心,配置中心
- Seata分布式事务
- Sentinel服务容错
- Spring Cloud
- Feign远程调用
- Getaway网关
- Sleuth服务追踪
- Zipkin可视化追踪
应用监控:
- Prometheus
- Grafana
数据支撑层
- Redis缓存
- MySQL持久化
- Shardingsphere分库分表
- Rabbit MQ消息队列
- Elastic Search全文检索
- Alibaba OSS对象存储