品优购业务&技术总结项目描述
XXX是公司自主研发的一个B2B2C电商平台,允许运营商自营和商家入驻,与京东商城非常类似。系统采用dubbox+zookeeper实现面向服务(SOA)分布式架构将不同的功能模块划分为多个子系统,其中包含运营商系统、商家系统、用户系统、网站前台系统、搜索系统、购物车系统、支付系统、订单系统、秒杀系统、CAS单点登录、短信&站内信微服务、客服系统等。使用ssm框架整合完成后端功能模块,同时也使用多种技术完成整个项目的功能,比如安全框架Spring secutity、redis、消息中间件、页面静态化技术、全文检索技术等等,而前端采用AngularJs实现前后端分离。我主要负责的功能模块--从下面选择来讲
相关概念:
-
分布式:将项目拆分为不同的功能模块,分别运行在不同的服务器,各个服务配合完成项目业务功能。
-
集群:将相同的项目或者模块部署在不同的服务器,同时对外提供服务。
-
负载均衡:配置代理集群入口,对所有请求寻找一个可用的服务器节点提供服务。
###一、整体业务1. 基础数据维护 【1-7】
基础数据维护主要是对系统数据的创建,主要是对商品相关表数据进行维护包含品牌、规格、分类以及SPU和SKU管理。整体业务相对比较简单,实现过程页面利用AngularJs校验数据并提交请求传递相应数据,后端采用SpringMVC在controller处理请求和接收参数,同时通过dubbox调用远程发布到zookeeper服务层,服务层主要通过spring整合mybatis以mapper接口代理的方式完成数据的增删改查
技术点: Spring SpringMVC Mybatis --- 后期总结
dubbox:《dubbox.md》
zookeeper: 《zookeeper.md》
面试问题:
1) dubbox的流程
2) dubbox注册中心宕机了,服务还能不能正常运行(*)
3) dubbox负载均衡机制有哪些?
4) dubbox集群容错机制?
5) dubbox底层支持通信协议和序列化协议有哪些?
6) zookeeper的数据模型描述一下?(*)
7) zookeeper的核心什么? (*)
8) zookeeper的选举机制以及zab协议?
9) zookeeper的应用场景?(*)
2. 权限管理维护 【品优购-第四天】
权限模块在运营商后台进行维护,主要功能是维护用户表和角色表数据同时给运营商后台用户进行角色配置,一个用户可以拥有多种角色。同时使用spring security配置请求拦截规则,系统规定每一个功能模块都有一种特定的角色,比如如果要操作用户模块那么用户就需要有用户角色(ROLE_USER)。同时实现spring security提供的认证接口UserDetailService的loadByUsername方法根据传入用户名查询用户表得到用户密码以及根据用户名查询角色表得到当前用户所有的角色信息,完成角色的认证.在spring security的认证管理器中配置刚刚实现的认证类同时加入Bcrypt加密配置。同时商家系统也需要相应的角色才能访问,在运营商后台由管理人员对商家进行赋予角色(商家用户角色比较单一:普通角色、VIP角色、秒杀角色等)
网站权限的细粒度 --- 定位到方法|请求,每一个请求对可以对应一个权限
涉及的表: 用户 角色 权限(表与表的关系)
权限拦截:Spring Security利用注解进行方法的拦截(拦截的细粒度---方法)
3. 网站首页 【品优购-第八天】
网站前台首页,首页主要展示广告信息、热门商品信息、分类菜单等。由于网站首页作为入口,访问压力较大。为了减轻数据库的访问压力并且提高系统的平均响应时间,而且首页数据的变换并不频繁所以可以将首页所需数据使用redis进行缓存,这样访问首页时数据加载就从缓存中获取,不去访问数据库。同时如果后台对广告更换以及分类更改都会清空相应的缓存,这样下次访问从新先从数据库加载然后再存入缓存,之后读取都从缓存读取。
技术:redis--- 《redis.md》
面试问题:
1) 项目中哪些地方用到redis?(*)
2) 介绍以下redis的数据类型以及应用场景?(*)
3) 描述以下redis的持久化机制?(*)
4) AOF持久化文件越来越大怎么办?
5) redis为什么被称为单线程,以及为什么单线程效率还这么高?(*)
6) 你们系统使用redis是否遇到过缓存雪崩和穿透的问