項目介紹 有用各種技術
電商項目總結
1.系統架構
采用當前最流行的ssm(springmvc+spring+mybatis)框架開發,是當前電商網站首選的技術架構。系統是基於SOA架構設計,采用dubbo作為服務中間件,系統後臺使用jsp作為視圖層,操作簡便用戶體驗好。商城系統使用freemarker做靜態化頁面來提高系統的性能,使用nginx做負載均衡服務器以應對大規模的用戶量的並發。電商搜索系統采用當前最流行的全文檢索技術solr實現。系統中使用redis做緩存,使用Activemq做消息中間件。後臺數據庫使用mysql數據庫,讀寫分離是建立在主從復制的前提下的
做讀寫分離
2.dubbo的使用方法
Dubbo是一個分布式服務框架,提供了統一的高性能的遠程服務調用平臺。所有的業務邏輯都使用dubbo發布供表現層工程調用。發布dubbo服務需要使用spring容器
3.如何保存圖片的
在電商項目中需要保存大量的圖片,需要一個獨立的圖片服務器來保存,而且存儲的容量需要可擴展。並且還需要解決在高並發及高可用的問題。所以我們采用一個FastDFS一個分布式文件系統來保存圖片。FastDFS可以搭建服務器集群,解決了存儲空間的水平擴展、負載均衡以及服務器的高可用問題。
4.網頁靜態化的實現方案
創建一個獨立的工程,此工程的功能就是生成靜態化頁面的,例如商品詳情頁面靜態化。將此工程獨立部署到一個服務上,頁面就生成到當前服務的磁盤上,並且此工程監聽MQ的消息,一旦後臺工程添加商品,此工程將接收到消息並且生成靜態頁面。在此服務器上安裝一個nginx做為訪問靜態資源的http服務器。
5.把商品數據放到緩存中,如何提高緩存的利用率
做商品數據的緩存時,因為商品的數據量很大,而且緩存是把數據保存到內存中,此時不可能把所有的商品數據都放到緩存中。所以需要設置商品數據緩存的有效期,當用戶訪問到非熱點數據後,此數據放到緩存中,當緩存到期後就從緩存中刪除,而且長時間不會添加到緩存。而熱點數據一旦從緩存中刪除會馬上又添加到緩存。這樣可以提高緩存的利用率,同時也減輕了數據庫的壓力。
6.如何實現緩存同步的
只要使用了緩存就涉及到緩存同步的問題。緩存同步其實就是當緩存的信息發生變化,也就是後臺對緩存的數據進行增、刪、改操作後,數據庫中的數據發生了變化同時要把緩存中的數據對應刪除即可。當頁面再次請求數據時,緩存中不能命中就會從數據庫中查詢並且添加到緩存中,即實現了緩存同步。
7.如何處理數據量大、並發量高的搜索
如果要搜索的內容數據量很大並且並發量很高的情況下,一個solr服務是不能滿足要求的,所以此時需要SolrCloud來解決。SolrCloud也就是solr的分布式解決方案。是zookeeper+solr實現的。
8.Activemq有幾種消息通信方式
使用MQ中間件可以有兩種通信方式queue和topic。Queue可以實現點到點之間的通信,可以有多個Producer也可以有多個Consumer,但是消息只能被一個Consumer接收,一旦消息被消費後就沒有了。
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中。
實現購車商品數據同步:
1、要求用戶登錄。
2、把購物車商品列表保存到數據庫中。推薦使用redis。
3、Key:用戶id,value:購物車商品列表。推薦使用hash,hash的field:商品id,value:商品信息。
4、在用戶未登錄情況下寫cookie。當用戶登錄後,訪問購物車列表時,
a) 把cookie中的數據同步到redis。
b) 把cookie中的數據刪除
c) 展示購物車列表時以redis為準。
d) 如果redis中有數據cookie中也有數據,需要做數據合並。相同商品數量相加,不同商品添加一個新商品。
5、如果用戶登錄狀態,展示購物車列表以redis為準。如果未登錄,以cookie為準。
12.訂單號是怎麽生成
所以我們采用redis的incr命令來生成訂單號,每次加一。由於redis是單線程的所以使用此命令不會出現重復的訂單號,並且可讀性好。 使用推特公司的工具類 snowfalke
13.秒殺搶購時庫存是如何控制的
把商品的數量放到redis中。秒殺時使用decr命令對商品數量減一。如果不是負數說明搶到。一旦返回數值變為0說明商品已售完。
14.異常是如何處理
項目介紹 有用各種技術