一. 项目简介
电商模式:B2C
前台页面:HTML+VUE+AJAX
电商环境:采用docker部署到虚拟机上(模拟服务器)
电商架构:Springcloud+SpringBoot
二. 静态页展示
三. 分布式文件存储
1)FastDFS简介
文件上传首先搭建 FastDFS,FastDFS是一个开源的轻量级分布式文件系统,解决了大容量存储和负载均衡的问题。
2)上传流程
四. 微服务网关限流&鉴权
1)微服务网关Gateway
搭建gateway网关,所有外部请求都经过网关,统一的进行管理,从而达到安全,性能,监控的目的,还可以在网关内部配置令牌桶,进行限流操作.令牌桶通过生成令牌的速度,达到先流的目的。
2)密码加密采用Bcrypt
密码需要加密,所以采用了Bcrypt技术,相对来说Bcrypt更安全,因为引入了盐机制。
3)JWT微服务鉴权
登录需要签发token,通过jwt进行签发和验证token得目的。
五. 商品管理
1)能够使用开源算法snowflake生成分布式id
- UUID 可以利用数据库也可以利用程序生成,一般来说全球唯一。
- Redis 当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作INCR和INCRBY来实现。
2)根据id增删改查
六. 网站首页高可用nginx+lua
1)使用nginx+Lua+redis实现广告缓存
- Lua是一个小巧的脚本语言,用标准的C语言编写一源代码的形式开放。
- OpenResty是一个基于NGINX的可伸缩的Web平台,提供了很多高质量第三方模块。
2)掌握nginx限流的基本使用方法
3)采用了redis二级缓存
七. 数据同步解决方案-canal
- canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。
- canal是应对阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。
- 通过canal进行监听数据库变化,发送到rabbitmq队列,消费者和生产者之间实现通信,达到数据同步目的。
八. 商品搜索
1)商品搜索以及页面渲染
2)商品搜索业务有:条件筛选,规格过滤,价格区间搜索,分页查询,排序查询,高亮查询
- 条件筛选:页面每次向后台传入对应的分类和品牌,后台据分类和品牌进行条件过滤即可。
- 规格过滤:规格这一部分,需要向后台发送规格名字以及规格值,我们可以按照一定要求来发送数据,后台接到数据后,可以根据前缀spec_来区分是否是规格,如果以则为规格数据,需要根据指定规格找信息。
- 价格区间搜索:价格区间查询,每次需要将价格传入到后台,前端传入后台的价格大概是 price=0‐500或者 price=500‐1000 依次类推,最后一个是 price=3000 ,后台可以根据-分割。
- 分页查询:页面需要实现分页搜索,所以我们后台每次查询的时候,需要实现分页。用户页面每次会传入当前页和每页查询多少条数据,当然如果不传入每页显示多少条数据,默认查询30条即可。
- 排序查询:排序这里总共有根据价格排序、根据评价排序、根据新品排序、根据销量排序,排序要想实现非常简单,只需要告知排序的域以及排序方式即可实现。
- 高亮查询:高亮显示是指根据商品关键字搜索商品的时候,显示的页面对关键字给定了特殊样式, 让它显示更加突出,如上图商品搜索中,关键字编程了红色,其实就是给定了红色样 式。
九. 用户认证
用户认证采用的是单点登录,并且会将cookie存储到浏览器缓存中,达到一处登录处处登录得目的,认证技术用到了 Springsecurity+oauth2解决认证方案,在项目中配置对应的公钥和私钥进行配对 匹配成功即可达到认证得目的。
十. 购物车
购物车用到了redis数据库+spring security,首先购物车里的数据每个人不一样,我们不可以搜索数据库中的数据,用key和value键值对形式存储到了redis数据库中,对每个商品加上标识,标识就是每个人的用户名,根据登陆人得用户名去匹配每个人购物车里的数据。
十一. 微信支付
-
能够根据微信支付的开发文档调用微信支付的api
-
完成统一下单生成微信支付二维码功能
-
完成支付回调的逻辑处理,掌握Ngrok的使用
-
完成推送支付通知功能
十二. 订单处理
1)通过rabbitmq的延迟消息完成超时订单处理
2)完成批量发货功能,了解第三方物流系统
3)完成自动收货功能,自动收获采用了定时任务组件Cron表达式,定时执行固定接口
十三. 秒杀
秒杀有两个限制,1.时间2.库存. 不同时间段显示不通商品,商品过了秒杀时间就恢复原价.而且需要考虑的是短时间内涌入大量请求,所以为了减轻系统压力,通过了流量削峰,自定义切面接口进行限流操作.并且数据库需要单独设计