1.行业概念
- B2C:商家对客户,京东、当当、发展为B2C平台,天猫
- B2B:商家对商家,阿里巴巴(不零售,只批发,淘宝很多商家都会去阿里巴巴进货)
- C2C:个人对个人,淘宝市场,淘宝,QQ商城
2.系统功能
- 后台管理系统:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能
- 前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作
- 会员系统:用户可以在该系统中查询已下的订单、收藏的商品、我的优惠券、团购等信息
- 订单系统:提供下单、查询订单、修改订单状态、定时处理订单
- 搜索系统:提供商品的搜索功能
- 单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息
3. 项目介绍
3.1 项目的模式
属于B2C平台,商家对客户
3.2 项目的功能
提供B2C的平台,其中自营商品也有商家入住,类似天猫
3.3 项目的架构
采用分布式的系统架构,其中前台系统和单点登录系统采用了集群的方式部署,在后台管理系统中采用了Maven的多模块化的管理,其中采用了水平切分的方式,将pojo、dao、service、web分层开发,这样做的好处就是可以重用性更高
系统之间的通知机制采用MQ的方式,使用RabbitMQ的实现,使用了RabbitMQ的消息订阅模式的消息机制
系统的接口还对JS的跨域做了支持,采用了jsonp的解决方法,在后台接口中扩展了spirng提供的jackson数据转化器实现
3.3 项目的部署
采用了Nginx+tomcat的模式,其中nginx的作用一方面是做反向代理、负载均衡、另一方面是做图片等静态资源的服务器
4.项目服务
- 后台管理系统:主要实现商品管理、商品规格参数管理、订单管理、会员管理等、CMS(内容管理系统)等,并且提供了跨域支持
- 前台系统:主要是面向用户访问,使用Httpclient和后台系统接口做交互,并且该系统在部署上采用集群的方式
- 单点登录系统:主要是提供集中用户登录凭证的集中解决方案,提供和用户信息相关的接口,比如说用户注册、查询等接口
- 订单系统:主要是提供和订单相关的业务接口,在订单系统了做了严格的数据校验以及高并发写的支持(这里可以说使用队列实现),并且使用了Quartz定时任务实现对订单的定时扫描,比如说关闭超时未付款的订单
- 搜索系统:主要是提供商品的搜索,采用开源企业级系统Solr实现,采用了MQ机制保证了商品数据可以及时同步到solr中
- 会员系统:主要是维护用户的信息,已购买订单、优惠券、系统消息、修改密码、绑定手机等功能
- 缓存:主要是用Redis实现,并且对Redis做了集群来保证Redis服务的高可用。
- 支付系统,主要是负责订单的支付、对账等功能,主要是对接了支付宝的接口
5.常见问题
5.1支付请求超时怎么处理?
重试,一般三次,每次重试都要停顿一会,比如,以第一次停顿1秒,第二次停顿2秒,第三次停顿3秒
给订单标识付款异常状态,并且发出警告(邮件、短信)给相关人员
写个定时任务,定时处理异常状态的订单
5.2支付成功但无数据返回,或者返回按时,怎么处理?
请求了支付宝/微信,但是没有接受到响应,就认为该订单没有支付成功,并且将订单标识为异常状态
使用定时任务处理
做一个对账的任务,实时处理异常状态的订单
5.3项目的金额用什么数据类型存储?
第一种:使用BigDecimal来表示金额(igDecimal在进行入库时, 数据库选择decimal类型, 长度可以自定义, 如18; 小数点我们项目中用的是2, 保留2位小数. 此外还要注意的就是默认值, 一定写成0.00, 不要用默认的NULL, 否则在进行加减排序等操作时, 会带来转换的麻烦)
第二种:数据库里存分为单位的整型数据
5.4项目接口如何保证安全性?
- 凭证。 根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取http的head中的token,校验是否合法(和数据库或者redis中记录的是否一致,在登录或者初始化的时候,存入数据库/redis)
- 加密。客户端和服务器都保存一个秘钥,每次传输都加密,服务端根据秘钥解密
客户端:
1、设置一个key(和服务器端相同)
2、根据上述key对请求进行某种加密(加密必须是可逆的,以便服务器端解密)
3、发送请求给服务器
服务器端:
1、设置一个key
2、根据上述的key对请求进行解密(校验成功就是「信任」的客户端发来的数据,否则拒绝响应)
3、处理业务逻辑并产生结果
4、将结果反馈给客户端
- 第三方支持。比如spring security-oauth
本文地址:https://blog.csdn.net/xueguchen/article/details/108196349