項目介紹 有用各類技術

電商項目總結 
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.異常是如何處理

相關文章
相關標籤/搜索