Java电商项目面试题(三)

什么是数据库分片
简单来讲,就是指经过某种特定的条件,将咱们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,能够分为两种切分模式。
1.一种是按照不一样的表来切分到不一样的数据库(主机)之上,这种切能够称之为数据的垂直切分
2.另一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库上面,这种切分称之为数据的水平切分。
如何实现数据库分片
当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时须要切换不一样的数据库进行查询,那么系统如何知道要查询的数据在哪一个数据库中?当添加一条记录时要向哪一个数据库中插入呢?这些问题处理起来都是很是的麻烦。
这种状况下能够使用一个数据库中间件mycat来解决相关的问题。
什么是Mycat?
简单的说,MyCAT就是:一个新颖的数据库中间件产品,支持mysql集群,提供高可用性数据分片集群。你能够像使用mysql同样使用mycat。对于开发人员来讲根本感受不到mycat的存在。
Mycat读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来讲,是必不可少的一个重要功能。对于MySQL来讲,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,一般是1-3个读节点的配置
单点登陆系统
主要解决的是Session共享的问题。
一、使用redis管理Session。
1)key:token
2)value:用户信息
3)能够须要设置有效期。
4)须要把token保存到cookie中。
购物车
一、未登陆:使用cookie保存购物车数据
二、登陆后:把购物车数据保存到redis。
二、购物车合并,应该以服务端的购物车为准。
电商活动倒计时方案:
一、肯定一个基准时间。能够使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();
二、活动开始的时间是固定的。
三、使用活动开始时间-基准时间能够计算出一个秒为单位的数值。
四、在redis中设置一个key(活动开始标识)。设置key的过时时间为第三步计算出来的时间。
五、展现页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
六、一旦活动开始的key失效,说明活动开始。
七、须要在活动的逻辑中,先判断活动是否开始。
秒杀方案:
八、把商品的数量放到redis中。
九、秒杀时使用decr命令对商品数量减一。若是不是负数说明抢到。
十、一旦返回数值变为0说明商品已售完。
因为宜立方商城是基于SOA的架构,表现层和服务层是不一样的工程。因此要实现商品列表查询须要两个系统之间进行通讯。
如何实现远程通讯?
一、Webservice:效率不高基于soap协议。项目中不推荐使用。
二、使用restful形式的服务:http+json。不少项目中应用。若是服务太多,服务之间调用关系混乱,须要治疗服务。
三、使用dubbo。使用rpc协议进行远程调用,直接使用socket通讯。传输效率高,而且能够统计出系统之间的调用关系、调用次数。
什么是dubbo
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案
Dubbo就是资源调度和治理中心的管理工具。mysql

相关文章
相关标签/搜索