文章目录
电商后台管理系统:
基础环境:SpringBoot2.0,SpringCloud,Mybatis-Plus,Docker,Redis,Vagrant,Linux
涉及到的技术:使用了注册中心、配置中心、远程调用、Feign、网关、阿里云OSS对象存储、跨域处理
开发的规范:JSR303校验,全局异常处理,全局统一返回,全局跨域处理,枚举状态,VO与TO与PO划分,逻辑删除,Lombok
实现的功能:
1)三级分类:树形展示三级分类数据(家用电器—通讯设备—手机),精确到某一类商品,
实现的功能:增(新增时使用了表单校验)删(删除、批量删除、逻辑删除)改(修改时回显内容),拖拽功能,分页功能
2)配置网关路由、注册进Nacos注册中心:
3)解决跨域问题:
4)品牌管理:可以上传自己的品牌信息,并且关联某一个三级分类,还可以级联更新(你修改了三级分类的分类名字时也会触发品牌管理的分类名的自动更新)
使用的技术:上传图片用了云存储OSS、新增时使用了表单校验(使用统一异常处理),
实现的功能:增(新增时使用了表单校验)删(删除、批量删除、逻辑删除)改(修改时回显内容)查(可以模糊查询或id查询)
5)三级分类——属性分组——属性
属性分组管理:可以添加某一个属性分组,并且关联到某一个三级分类中,可以根据三级分类找到它下面的所有属性分组。
当想给某个属性分组关联某个属性时:它会先去查询已经关联的属性并且进行回显,然后点击新增关联时它又会显示没有被关联的那些属性,而且用户还可以检索
属性管理:可以添加某一个属性,并且关联到某个属性分组中。
增(新增时使用了表单校验(使用统一异常处理))删(删除、批量删除、逻辑删除)改(修改时回显内容)查(可以模糊查询或id查询)
6)商品上架:可以发布你的华为手机,你除了可以添加华为手机的介绍大图、上传图集、设置积分和成长值、设置商品的重量以外,而且你要设置该商品所在的三级分类,有了三级分类后台会根据三级分类查询出该分类下的所有品牌然后任你选择你要发布的商品属于什么品牌的,后台也会根据三级分类id查询出给分类所有的属性然后任你去设置,而且还会查询出所有的销售属性去做笛卡尔积(4种颜色2种cpu一共8种商品)任你去做它的副标题、价格等,你只要一点击发布商品后台就会把这些信息存储到对应的表中。
7)上架商品:上架之前你可以对刚刚发布的商品进行增删改(修改信息)查(查询已经发布了的商品)
对已经发布的商品,然后对它进行上架。后台就把上架时需要展示的属性封装到SkuEsModel里面,然后就可以到京东那种页面去展示了。
8)仓库系统:
1.可以添加仓库信息(北京的几号仓库)
2.可以添加采购需求(什么商品采购多少件)
3.合并采购需求(把多个采购需求合并为采购单,然后交给指定的人去采购)
4.实时追踪采购单的状态(已分配、已领取、已完成、有异常)
5.采购单中有多个采购需求,只要有一个采购需求没有完成采购那么采购单的状态就是“有异常”,方便去监控
百货商城(仿京东项目):
项目介绍:这是一个仿京东的B2C模式的商城项目,它包括注册、登录、商品展示、商品检索、添加到购物车、下订单、进行支付、参与秒杀等一个电商的应有的功能,不仅用到分布式里面的高级技术以及微服务周边所有配套方案,同时解决了在项目开发中几乎所有可能遇到的分布式重难点问题(session同步方案、缓存击穿、分布式事务锁、幂等性保证、单点登录、异步编排、压力测试、调优等)。
用到的技术:分布式事务Seata,远程调用Feign,网关Gateway,链路追踪Sleuth,流量保护Sentinel,注册与配置中心Nacos,缓存SpringCache,SpringSession同步分案,ElasticSearch全文检索,异步编排,线程池,JMeter压力测试,JvisualVM监测,性能调优,nginx动静分离,Redisson分布式锁,定时任务,RabbitMQ削峰处理,“可靠消息+最终一致性”方案
开发的规范:幂等性保证,单点登录问题,防重令牌,JSR303校验,全局异常处理,全局统一返回,全局跨域处理,枚举状态,VO与TO与PO划分,逻辑删除,Lombok
1)首页展示商品的三级目录:
首页是频繁展示的页面,对于首页我们做了如下功能:
使用Gateway进行网关路由,使用了nginx动静分离,用JMeter做过性能压测,用JvisualVM监测内存,做过性能优化,
使用分布式缓存,考虑过击穿、穿透、雪崩问题,用分布式锁Redisson解决缓存击穿,整合了SpringCache
2)检索商品功能:
用ES检索查询商品,面包屑导航功能,可以根据价格、销量、属性(内存、颜色等)、品牌、三级分类进行检索商品
3)注册页面整合了验证码功能,并且做了验证码防刷功能,使用JSR303校验进行表单校验
4)登录页面除了账号密码登录,还可以微博社交登录,
用SpringSession解决跨域共享问题
考虑单点登录问题
5)购物车功能:
添加商品到购物车,获取购物车,删除购物车,修改购物项数量(未登录的临时用户也可以添加购物车,登录以后还可以合并购物车)
6)商品详情页展示:使用异步(多线程)的方式查询商品信息
7)订单确认功能:
下订单、锁库存整合了RabbitMQ,考虑过接口幂等性,添加了防重令牌,
考虑了“Feign远程/异步调用丢失请求头问题”
8)订单提交功能:
整合了分布式事务Seata,使用了 “可靠消息+最终一致性”方案完成库存解锁与定时关单,
9)支付页面整合了支付宝沙箱环境
10)“我的订单”功能:支付宝异步通知功能修改订单状态
10)秒杀服务:
使用了定时任务,考虑了幂等性问题,使用了Sentinel流量保护和Sleuth监控
写在简历中
电商后台管理系统:
项目介绍:这是一个电商后台管理系统,管理员可以添加商品,关联商品的品牌、属性,可以发布和上架商品,可以根据库存需求采购商品。
基础环境:SpringBoot2.0,SpringCloud,Mybatis-Plus,Docker,Redis,Vagrant,Linux
涉及到的技术:Nacos注册中心、配置中心、远程调用、Feign、网关、阿里云OSS对象存储、跨域处理
开发的规范:JSR303校验,全局异常处理,全局统一返回,全局跨域处理,枚举状态,VO与TO与PO划分,逻辑删除,Lombok
实现的功能:
1)三级分类:树形展示三级分类数据
2)品牌管理:上传品牌信息,并且关联某一个三级分类,可以级联更新
3)属性管理:可以添加某一个属性分组,并且关联到某一个三级分类中;可以添加某一个属性,并且关联到某个属性分组中。
4)商品发布:可以发布某款商品,除了可以添加商品的介绍大图、上传图集、设置积分和成长值、设置商品的重量以外,而且需要选择三级分类,选择品牌,选择商品属性,添加商品标题、副标题等等。
5)商品上架:对已经发布的商品,然后对它进行上架。完成上架就可以封装商品所有信息到商城里面展示。
6)仓库系统:可以添加仓库,添加采购需求,采购需求合并为采购单,然后交给指定的人去采购,实时追踪采购单的状态
百货商城(仿京东项目):
项目介绍:这是一个仿京东的B2C模式的商城项目,它包括注册、登录、商品展示、商品检索、添加到购物车、下订单、进行支付、参与秒杀等一个电商的应有的功能,不仅用到分布式里面的高级技术以及微服务周边所有配套方案,同时解决了在项目开发中几乎所有可能遇到的分布式重难点问题(session同步方案、缓存击穿、分布式事务锁、幂等性保证、单点登录、异步编排、压力测试、调优等)。
用到的技术:分布式事务Seata,远程调用Feign,网关Gateway,链路追踪Sleuth,流量保护Sentinel,注册与配置中心Nacos,缓存SpringCache,SpringSession同步分案,ElasticSearch全文检索,异步编排,线程池,JMeter压力测试,JvisualVM监测,性能调优,nginx动静分离,Redisson分布式锁,定时任务,RabbitMQ削峰处理,“可靠消息+最终一致性”方案
开发的规范:幂等性保证,单点登录问题,防重令牌,JSR303校验,全局异常处理,全局统一返回,全局跨域处理,枚举状态,VO与TO与PO划分,逻辑删除,Lombok
1)首页展示商品的三级目录,并且可以根据分类查询对应的商品
使用Gateway进行网关路由,使用了nginx动静分离,用JMeter做过性能压测,用JvisualVM监测内存,做过性能优化,
使用分布式缓存,考虑过击穿、穿透、雪崩问题,用分布式锁Redisson解决缓存击穿,整合了SpringCache
2)检索商品功能:
用ES检索查询商品,面包屑导航功能,可以根据价格、销量、属性、品牌等进行检索商品。
3)注册页面整合了验证码功能,并且做了验证码防刷功能,使用JSR303校验进行表单校验。
4)登录页面除了账号密码登录,还可以微博社交登录。考虑了SpringSession跨域共享和单点登录问题。
5)购物车功能:
添加商品到购物车,获取购物车,删除购物车,修改购物项数量
6)商品详情页展示:使用异步的方式查询商品信息
7)订单确认功能:
下订单、锁库存整合了RabbitMQ,考虑过接口幂等性,添加了防重令牌。
8)订单提交功能:
整合了分布式事务Seata,使用了 “可靠消息+最终一致性”方案。
9)支付页面整合了支付宝沙箱环境
10)“我的订单”功能:支付宝异步通知功能修改订单状态
10)秒杀服务:
使用了定时任务,考虑了幂等性问题,使用了Sentinel流量保护和Sleuth监控。
1、你这个项目技术选型
基础环境是SpringBoot+SpringCLoud+MybatisPlus+Docker作为基础环境
中间价是rabbitmq和nginx,
检索用的是elasticsearch,
数据库用的MySQL和Redis,
分布式事务锁用的是redisson
2、你这个微服务项目一共有几个模块
八大模块:会员—检索—秒杀—购物车—订单—仓储,网关服务+第三方服务
会员服务:负责用户注册,查询用户
秒杀服务SeckillApplication
网关服务gatewayApplication
购物车服务cartApplication
第三方服务ThirdApplication
ES检索服务SearchApplication
仓储服务WareApplication
订单服务orderApplication
3、你是如何设计你的项目的?
因为这是一个商城项目,所以怎么设计得站在用户的角度
1)首先是注册
- 注册页面整合了验证码功能,并且做了验证码防刷功能,使用JSR303校验进行表单校验。
2)然后是登录
- 登录页面除了账号密码登录,还可以微博社交登录。考虑了SpringSession跨域共享和单点登录问题。
3)登陆完成进入首页
- 首页展示商品的三级目录,并且可以根据分类查询对应的商品
使用Gateway进行网关路由,使用了nginx动静分离,用JMeter做过性能压测,用JvisualVM监测内存,做过性能优化,
使用分布式缓存,考虑过击穿、穿透、雪崩问题,用分布式锁Redisson解决缓存击穿,整合了SpringCache
4)用户必须能够检索想要的商品
- 用ES检索查询商品,面包屑导航功能,可以根据价格、销量、属性、品牌等进行检索商品。
5)用户可以添加商品到购物车
- 添加商品到购物车,获取购物车,删除购物车,修改购物项数量
6)然后进行下单
- 要防止重复下单,要下单就要锁库存,整合了RabbitMQ
7)然后进行支付
- 支付页面整合了支付宝沙箱环境
8)秒杀服务
- 使用了定时任务,考虑了幂等性问题,使用了Sentinel流量保护和Sleuth监控。
4、项目遇到的最大问题
遇到了一系列问题:
1.跨域问题,我在之前没有接触过域名同源策略
2.Feign远程调用丢失请求头:订单服务调用购物车服务,用户明明已经登陆了,结果购物车那边登陆拦截器一直显示未登录,
使用OpenFeign远程查询gulimall-cart的购物车信息时会新创建一个请求头,那我们写一个feign的拦截器,在拦截器里面为请求加上原来的cookie。
Feign的异步调用丢失请求头:用户要下单嘛,我们需要到会员服务里面查询到用户的基本信息、需要到购物车里面查询到用户的购物车信息、还需要查询用户积分信息,这一切明明异步调用,但是我们发现在开启异步时获取不到老请求的信息,自然也就无法共享cookie了。在这种情况下,我们需要在开启异步的时候将老请求的RequestContextHolder的数据设置进(用户下单会把请求发送给订单服务,订单服务登陆器拦截到调用controller到调用service等等一切都是使用的ThreadLocal来共享数据)
3.分布式事务问题:微服务A调用了B、C、D微服务,如果B和C微服务执行成功而且把数据持久化到数据库里了,结果D微服务执行失败,因为A调用了B、C、D所以A收到D执行错误消息那么A肯定就会回滚事务啊,可问题就是B和C已经执行完成了,它们没办法回滚啊。
在我们的项目里面就是用户要下单,那么我们需要查用户信息、锁库存、扣积分等等,这一共三个微服务,怎么保证它们的事务一致性?
有两个解决方案:①是使用分布式事务Seata,但是下单是典型的高并发模式,seata中后台使用了很多锁,导致高并发串行化(一个一个执行)
②使用RabbitMQ,我们后端有个专业术语叫“可靠消息+最终一致性方案”