人人商城设计书

# 1、项目背景 ## 电商模式科普 &nbsp;&nbsp;&nbsp;&nbsp;市场上常见的五种电商模式`B2B`、`B2C`、`C2B`、`C2C`、`O2O`,本次课程设计所开发的电商模式为`B2C`模式。 >i 本次课程设计整体逻辑架构可以参考[京东](https://www.jd.com/)。 ### 1、B2B模式 &nbsp;&nbsp;&nbsp;&nbsp;B2B(Business to Business),是指商家与商家之间建立的商业关系。例如:阿里巴巴。 ### 2、B2C模式 &nbsp;&nbsp;&nbsp;&nbsp;B2C(Business to Consumer),就是我们常看见的供应商直接把商品卖给用户,即“商对客”模式,即所谓的商业零售。直接面向消费者销售产品和服务。例如:苏宁易购、京东、天猫、小米商城。 ### 3、C2B模式 &nbsp;&nbsp;&nbsp;&nbsp;C2B(Consumer to Business),即消费者对企业,先有消费者需求生产而后由企业进行生产。 ### 4、C2C模式 &nbsp;&nbsp;&nbsp;&nbsp;C2C(Consumer to Consumer),客户之间可以把东西放到网上去卖。例如:闲鱼、淘宝。 ### 5、O2O模式 &nbsp;&nbsp;&nbsp;&nbsp;O2O(Online to Office),即线下的商务与互联网结合到了一起,让互联网成了线下交易的前台,线上支付,线下服务。例如:饿了吗、美团、京东到家。 # 2、人人商城 &nbsp;&nbsp;&nbsp;&nbsp;人人商城是一个典型的B2C模式的电商平台,销售自营商品销售给客户。 ## 1)项目架构图 >w //TODO:完善项目架构图 Author:彭泽瑄 Date:2021年8月29日 >i &nbsp;&nbsp;&nbsp;&nbsp;该项目为`前后分离`项目,整体上分为`外网部署`和`内网部署`两大部分。 &nbsp;&nbsp;&nbsp;&nbsp;`外网部署`主要是面向`前端`,可以由`手机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`来进行控制。 &nbsp;&nbsp;&nbsp;&nbsp;服务的`缓存`基于`Redis集群`,`分片集群`+`哨兵集群`,持久化使用`MySQL集群`,实现`读写分离`、`分库分表`。服务与服务之间使用`消息队列`,实现`异步解耦`,包括`分布式事务的最终一致性`,使用`Rabbit MQ`作为消息队列。 &nbsp;&nbsp;&nbsp;&nbsp;相应的`检索`,例如商品信息的`全文检索`,使用`Elastic Search`实现。`图片`、`视频`等资源的存储使用`Alibaba OSS`实现。项目上线后,为了快速的定位项目出现的一些问题,使用`ELK`实现`日志信息`的处理,使用`LogStash`进行`日志收集`,将其存储到`Elastic Search`中,然后使用`Kibana`可视化界面从`Elastic Search`中检索出相关的`日志信息`,帮助快速定位,线上服务的问题之所在。 &nbsp;&nbsp;&nbsp;&nbsp;在`分布式系统`中,由于每个服务都可能部署在很多台机器,而且服务与服务之间还需要相互进行`调用`,为此就需要将相关的服务`注册`到相关的`注册中心`,其他服务就从注册中心`发现`其他服务,使用`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)微服务划分 &nbsp;&nbsp;&nbsp;&nbsp;本项目为基于前后端分离开发,为此将会创建以下前端项目: - 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`展开,其余内容仅作理论参考,视开发进度而定,本次课程设计暂定不予实现。 &nbsp;&nbsp;&nbsp;&nbsp;`前端`向`后端`发起相关`请求`,交予`API网关`,`API网关`实现相应的`限流`、`鉴权`、`熔断`、`降级`、`过滤`、`路由`、`负载均衡`等一系列功能。随后,数据流入业务微服务集群。业务整体上分为以下微服务: - 商品服务 ---> 包含对于商品基础的CRUD、商品上下架、商品详情,等等 - 优惠服务 ---> 包含商品相关的优惠信息 - 仓储服务 ---> 商品的库存,地址 - 订单服务 ---> 订单的基础功能,CRUD,用户列表 - 中央认证服务 ---> 登陆、注册、统一的单点登录、社交登陆功能 - 支付服务 ---> 集成了相应的支付的功能 - 用户服务 ---> 用户的个人中心,用户的收货📦地址列表 - 秒杀服务 ---> 完成秒杀等的相关功能 - 检索服务 ---> 商品检索,相关复杂检索(基于elastic search) - 购物车服务 ---> 商城购物城的CRUD、购物车结账 - 后台管理 ----> 独立的后台管理系统 - …… &nbsp;&nbsp;&nbsp;&nbsp;除此以外,本项目还将会依赖于其他`第三方服务`,例如物流信息的检索、短信的发送,金融相关的退款,入账,用户的身份认证等。 服务治理: - Spring Cloud Alibaba - Nacos注册中心,配置中心 - Seata分布式事务 - Sentinel服务容错 - Spring Cloud - Feign远程调用 - Getaway网关 - Sleuth服务追踪 - Zipkin可视化追踪 应用监控: - Prometheus - Grafana 数据支撑层 - Redis缓存 - MySQL持久化 - Shardingsphere分库分表 - Rabbit MQ消息队列 - Elastic Search全文检索 - Alibaba OSS对象存储