电商项目技术剖析

项目是根据功能模块横向切分的分布式架构,大概分为后台管理系统,前台系统,会员系统,订单系统,搜索系统,会员登录系统

后台管理系统:管理商品,订单,类目,商品规格属性,用户管理以及商品发布
前台系统:注册,登录,浏览商品,首页,下单等
会员系统:个人中心,查询已下订单,收藏的商品,优惠券,团购等
订单系统:下单,查询定点杆,修改订单,定时处理订单
搜索系统:商品搜索功能
会员登录系统:为多个系统提供用户登录凭证以及查询登录用户的信息(单点登录)

前台系统
前台首页商品信息访问量比较高,如果频繁访问数据库,会增加数据库的负荷,所以首页商品信息采用页面静态化,将商品信息生成静态html存在本地,然后使用nginx访问静态html不走tomcat,
如果使用页面静态化就会有一个数据同步的问题,如果后期数据发生拜年,我们从静态化页面拿的数据就是旧的
解决方案:

  1. 实时更新,同步更新数据
  2. 定时更新,定时更新数据定时更新,定时更新数据

怎么选择呢,实际根据业务需求来选择,如果是首页的话可以采用定时更新,

登录系统
这里采用单点登录校验token的形式
当会员进行登录的时候会将用户名,密码传给后台请求数据库进行校验,如果校验不通过就返回错误页面给用户,校验通过的话将用户信息保存至redis(key为token,value为用户信息),并生成一个token唯一标识,并将token保存至cookie发送给浏览器,等到下次请求的时候浏览器会将cookie里的token带着,这个时候我们只需要将cookie里的token取出来,根据token去redis里查询对应用户信息,如果校验通过就重定向到对应页面

搜索系统
搜索系统包括商品搜索和个人订单搜索,这里用到的是solr全文检索引擎
但是在使用solr的时候会存在一个问题就是数据同步问题,一旦后台数据发生变化,那么我们从solr库里查询出来的还是旧数据
解决方案:
1.写一个更新solr索引库的接口,一旦后台数据更新就调用该接口更新即可
2.使用RabbltMQ(消息监听),当后台更新数据的时候发送修改商品id到MQ,然后搜索系统去监听这个消息,拿到商品id再更新solr索引库
两种解决方案都可以,但是第一种方案耦合度较高,个人建议使用第二种

购物车系统
购物车功能分为两种状态:用户未登陆状态购物车,和用户已登陆状态购物车
未登陆状态购物车:
利用cookie中的value再加上一个前缀数字或时间戳uuid作为key,然后将购物车数据转化为json格式作为value存入redis来实现用户未登陆状态添加购物车
登陆状态购物车:
用户在未登陆状态下单的时候会跳转到登陆页面,让用户先登陆,这个时候我们就要考虑用户实际购物车数据是用户在未登录状态下和已登陆状态下的总和
用户在登陆成功之后将userid和cookie里的uuid作为消息发送至购物车系统监听,这个时候我们拿着uuid去redis里可以获得用户未登录状态下的购物车信息,然后就可以合并购物车数据了
需要注意的是在数据合并之后要将redis里的未登录购物车数据删掉!

订单系统
购物车中点击结算会跳转到提交订单页面,考虑到订单id不能重复,尽量使用用户id+时间戳作为订单id,

你可能感兴趣的:(面试)