项目介绍 有用各类技术

电商项目总结 
1.系统架构 
采用当前最流行的ssm(springmvc+spring+mybatis)框架开发,是当前电商网站首选的技术架构。系统是基于SOA架构设计,采用dubbo做为服务中间件,系统后台使用jsp做为视图层,操做简便用户体验好。商城系统使用freemarker作静态化页面来提升系统的性能,使用nginx作负载均衡服务器以应对大规模的用户量的并发。电商搜索系统采用当前最流行的全文检索技术solr实现。系统中使用redis作缓存,使用Activemq作消息中间件。后台数据库使用mysql数据库,读写分离是创建在主从复制的前提下的mysql

作读写分离nginx

2.dubbo的使用方法redis

Dubbo是一个分布式服务框架,提供了统一的高性能的远程服务调用平台。全部的业务逻辑都使用dubbo发布供表现层工程调用。发布dubbo服务须要使用spring容器的支持来发布服务,调用服务一样使用spring容器来应用服务。其中服务的发布和服务的发现都是经过注册中心来实现,咱们使用zookeeper做为注册中心。使用dubbo的监控中心监控中心来统计各服务调用次数,调用时间等。 
3.如何保存图片的spring

在电商项目中须要保存大量的图片,须要一个独立的图片服务器来保存,并且存储的容量须要可扩展。而且还须要解决在高并发及高可用的问题。因此咱们采用一个FastDFS一个分布式文件系统来保存图片。FastDFS能够搭建服务器集群,解决了存储空间的水平扩展、负载均衡以及服务器的高可用问题。 
4.网页静态化的实现方案sql

建立一个独立的工程,此工程的功能就是生成静态化页面的,例如商品详情页面静态化。将此工程独立部署到一个服务上,页面就生成到当前服务的磁盘上,而且此工程监听MQ的消息,一旦后台工程添加商品,此工程将接收到消息而且生成静态页面。在此服务器上安装一个nginx作为访问静态资源的http服务器。 
5.把商品数据放到缓存中,如何提升缓存的利用率数据库

作商品数据的缓存时,由于商品的数据量很大,并且缓存是把数据保存到内存中,此时不可能把全部的商品数据都放到缓存中。因此须要设置商品数据缓存的有效期,当用户访问到非热点数据后,此数据放到缓存中,当缓存到期后就从缓存中删除,并且长时间不会添加到缓存。而热点数据一旦从缓存中删除会立刻又添加到缓存。这样能够提升缓存的利用率,同时也减轻了数据库的压力。 
6.如何实现缓存同步的跨域

只要使用了缓存涉及到缓存同步的问题。缓存同步其实就是当缓存的信息发生变化,也就是后台对缓存的数据进行增、删、改操做后,数据库中的数据发生了变化同时要把缓存中的数据对应删除便可。当页面再次请求数据时,缓存中不能命中就会从数据库中查询而且添加到缓存,即实现了缓存同步。 
7.如何处理数据量大、并发量高的搜索浏览器

若是要搜索的内容数据量很大而且并发量很高的状况下,一个solr服务是不能知足要求的,因此此时须要SolrCloud来解决。SolrCloud也就是solr的分布式解决方案。是zookeeper+solr实现的。 
8.Activemq有几种消息通讯方式缓存

使用MQ中间件能够有两种通讯方式queue和topic。Queue能够实现点到点之间的通讯,能够有多个Producer也能够有多个Consumer,可是消息只能被一个Consumer接收,一旦消息被消费后就没有了。tomcat

Topic能够实现相似广播的通讯方式,能够有多个Producer和多个Consumer,一旦有Producer发送消息后,此消息能够被全部Consumer接收

本项目中,当后台系统对商品数据进行添加、删除、修改后,将会发送一个消息,此消息经过topic进行通讯,有多个消费端,搜索系统会把索引库进行同步,商品的缓存数据会进行同步、商品详情页面的静态页面会从新生成。 
9.集群环境下的登陆问题(单点登陆)

原理是再也不使用tomcat提供的Session,而是使用redis来模拟Session,一旦用户登陆后会生成一个token,相似于jsessionid的功能。访问redis获取用户信息时,key就是token,value就是用户信息。而后把token信息写入cookie中,而且实现cookie能够跨域访问。当须要对用户身份进行验证时,须要先从cookie中把token取出,而后根据token查询redis,来判断用户的登陆状态。 
10.购物车是如何实现的

当用户未登录时,将购物车信息放到cookie中,并设置存活时间,即便关闭浏览器,购物车也不会消失,除非用户本身清理浏览器中的cookie。

当用户登录时,将购物车信息放到Redis缓存中,下次登录时,即便换了浏览器或电脑,购物车也不会消失。 
11.若是换电脑,购物车是如何实现的

若是把购物车放到cookie中,更换电脑是不能看到购物车信息的。若是想更换设备实现购物车同,须要把购物车信息保存到redis中。

实现购车商品数据同步:

一、要求用户登陆。

二、把购物车商品列表保存到数据库中。推荐使用redis。

三、Key:用户id,value:购物车商品列表。推荐使用hash,hash的field:商品id,value:商品信息。

四、在用户未登陆状况下写cookie。当用户登陆后,访问购物车列表时,

a) 把cookie中的数据同步到redis。

b) 把cookie中的数据删除

c) 展现购物车列表时以redis为准。

d) 若是redis中有数据cookie中也有数据,须要作数据合并。相同商品数量相加,不一样商品添加一个新商品。

五、若是用户登陆状态,展现购物车列表以redis为准。若是未登陆,以cookie为准。 
12.订单号是怎么生成

因此咱们采用redis的incr命令来生成订单号,每次加一。因为redis是单线程的因此使用此命令不会出现重复的订单号,而且可读性好。 使用推特公司的工具类 snowfalke
13.秒杀抢购时库存是如何控制的

把商品的数量放到redis中。秒杀时使用decr命令对商品数量减一。若是不是负数说明抢到。一旦返回数值变为0说明商品已售完。 14.异常是如何处理