关于淘淘商城的一些基本说明
關于淘淘商城的一些基本說明
1. maven
Maven的常見打包方式:jar、war、pom
Pom工程一般都是父工程,管理jar包的版本、maven插件的版本、統一的依賴管理。聚合工程。
jar包就是java的類進行編譯生成的class文件打包成的壓縮包。里面就是一些class文件。當我們自己使用maven寫一些java程序,進行打包生成jar包。同時在可以在其他的工程下使用,但是我們在這個工程依賴的jar包,在其他工程使用該jar包也要導入。JAR 文件不僅用于壓縮和發布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。
war包其實就是一個web程序進行打包便于部署的壓縮包,里面包含我們web程序需要的一些東西,其中包括一些class文件,web.xml的配置文件,前端的頁面文件,以及依賴的jar!把war包放在tomcat目錄的webapp下,tomcat服務器在啟動的時候自動解壓war包編譯里面的代碼,所以當文件很多的時候,tomcat的啟動會很慢。一個war包可以理解為一個web項目,里面是項目的所有東西。
其中運行一個maven工程(web工程)需要一個命令:tomat:run
例如:
Taotao-parent:父工程,打包方式pom,管理jar包的版本號,項目中所有工程都應該繼承父工程。|--Taotao-common:通用的工具類通用的pojo。打包方式jar|--Taotao-manager:服務層工程。聚合工程。Pom工程 |--taotao-manager-dao:打包方式jar|--taotao-manager-pojo:打包方式jar|--taotao-manager-interface:打包方式jar|--taotao-manager-service:打包方式:war|--taotao-manager-web:表現層工程。打包方式war步驟
apache官網maven下載
在ecplise下配置maven
點擊”Add”,進入下面的頁面
然后在eclipse中配置倉庫的位置
maven倉庫地址、私服等配置信息需在setting.xml文件中配置,分為全局配置和用戶配置,在maven安裝目錄下的有 conf/setting.xml文件,此setting.xml文件用于maven的所有project項目,它作為maven的全局配置。如需要個性配置則需要在用戶配置中設置,用戶配置的setting.xml文件默認的位置在: u s e r . d i r / . m 2 / s e t t i n g s . x m l 目 錄 中 , {user.dir} /.m2/settings.xml目錄中, user.dir/.m2/settings.xml目錄中,{user.dir} 指windows 中的用戶目錄。maven會先找用戶配置,如果找到則以用戶配置文件為準,否則使用全局配置文件。
maven的一些標簽解釋
懶得寫了,可以在官方文檔上查 maven官方文檔
有位博主根據官方文檔總結的也不錯,可以去看看
https://blog.csdn.net/xupeng874395012/article/details/72921857
2.逆向工程
使用mybatis官方提供的mybatis-generator生成pojo、mapper接口及映射文件。
并且將pojo放到toatao-manager-pojo工程中。
將mapper接口及映射文件放到taotao-manager-dao工程中。
https://blog.csdn.net/qq_39056805/article/details/80585941
3. dubbo
Dubbo采用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴展進行加載。
例如:
發布服務: <!-- 和本地服務一樣實現遠程服務 --> <bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <!-- 增加暴露遠程服務配置 --> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" />調用服務: <!-- 增加引用遠程服務配置 --> <dubbo:reference id="xxxService" interface="com.xxx.XxxService" /> <!-- 和本地服務一樣使用遠程服務 --> <bean id="xxxAction" class="com.xxx.XxxAction"><property name="xxxService" ref="xxxService" /> </bean>在服務提供方和服務消費方的pom.xml中添加Dubbo依賴的jar包:
<!-- dubbo相關 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion><exclusion><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId></dependency>在Spring的配置文件中添加Dubbo約束:
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd <!-- 使用dubbo發布服務 --><!-- 提供方應用信息,用于計算依賴關系 --><dubbo:application name="taotao-manager" /><dubbo:registry protocol="zookeeper"address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" /><!-- 用dubbo協議在20880端口暴露服務 --><dubbo:protocol name="dubbo" port="20880" /><!-- 聲明需要暴露的服務接口 --><dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000"/> <!-- 引用dubbo服務 --><dubbo:application name="taotao-manager-web"/><dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />Dubbo的監控中心。。
4. zookeeper
Zookeeper的安裝:
第一步:安裝jdk
第二步:解壓縮zookeeper壓縮包
第三步:將conf文件夾下zoo_sample.cfg復制一份,改名為zoo.cfg
第四步:修改配置dataDir屬性,指定一個真實目錄
第五步:
啟動zookeeper:bin/zkServer.sh start
關閉zookeeper:bin/zkServer.sh stop
查看zookeeper狀態:bin/zkServer.sh status
注意要關閉linux的防火墻。
5.圖片服務器FastDFS
分布式文件系統FastDFS(用來專門保存圖片)
使用FastDFS,分布式文件系統。存儲空間可以橫向擴展,可以實現服務器的高可用。支持每個節點有備份機。
FastDFS是用c語言編寫的一款開源的分布式文件系統。FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
FastDFS架構包括 Tracker server和Storage server。客戶端請求Tracker server進行文件上傳、下載,通過Tracker server調度最終由Storage server完成文件上傳和下載。 Tracker server作用是負載均衡和調度,通過Tracker server在文件上傳時可以根據一些策略找到Storage server提供文件上傳服務。可以將tracker稱為追蹤服務器或調度服務器。 Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務器上,Storage server沒有實現自己的文件系統而是利用操作系統 的文件系統來管理文件。可以將storage稱為存儲服務器。
服務端兩個角色:Tracker:管理集群,tracker也可以實現集群。每個tracker節點地位平等。收集Storage集群的狀態。Storage:實際保存文件Storage分為多個組,每個組之間保存的文件是不同的。每個組內部可以有多個成員,組成員內部保存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。
客戶端上傳文件后存儲服務器將文件ID返回給客戶端,此文件ID用于以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。
組名:文件上傳后所在的storage組名稱,在文件上傳成功后有storage服務器返回,需要客戶端自行保存。
虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
數據兩級目錄:storage服務器在每個虛擬磁盤路徑下創建的兩級目錄,用于存儲數據文件。
文件名:與文件上傳時不同。是由存儲服務器根據特定信息生成,文件名包含:源存儲服務器IP地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。
服務器安裝方法見5.1
6.redis的配置與redis集群的搭建
Redis是c語言開發的。
安裝redis需要c語言的編譯環境。如果沒有gcc需要在線安裝。yum install gcc-c++
安裝步驟:第一步:redis的源碼包上傳到linux系統。第二步:解壓縮redis。第三步:編譯。進入redis源碼目錄。make 第四步:安裝。make install PREFIX=/usr/local/redisPREFIX參數指定redis的安裝目錄。一般軟件安裝到/usr目錄下
redis的啟動:
前端啟動:在redis的安裝目錄下直接啟動redis-server
[root@localhost bin]# ./redis-server
后臺啟動:把/root/redis-3.0.0/redis.conf復制到/usr/local/redis/bin目錄下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
修改配置文件:
[root@localhost bin]# ./redis-server redis.conf
查看redis進程:
[root@localhost bin]# ps aux|grep redis
Redis-cli
[root@localhost bin]# ./redis-cli
默認連接localhost運行在6379端口的redis服務。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:連接的服務器的地址
-p:服務的端口號
關閉redis:[root@localhost bin]# ./redis-cli shutdown
Redis的持久化方案
Redis的所有數據都是保存到內存中的。Rdb:快照形式,定期把內存中當前時刻的數據保存到磁盤。Redis默認支持的持久化方案。aof形式:append only file。把所有對redis數據庫操作的命令,增刪改操作的命令。保存到文件中。數據庫恢復時把所有的命令執行一遍即可。
兩種持久化方案同時開啟使用aof文件來恢復數據庫。
Jedis
需要把jedis依賴的jar包添加到工程中。Maven工程中需要把jedis的坐標添加到依賴。 推薦添加到服務層。Taotao-content-Service工程中。
第一步:創建一個Jedis對象。需要指定服務端的ip及端口。
第二步:使用Jedis對象操作數據庫,每個redis命令對應一個方法。
第三步:打印結果。
第四步:關閉Jedis
第一步:創建一個JedisPool對象。需要指定服務端的ip及端口。
第二步:從JedisPool中獲得Jedis對象。
第三步:使用Jedis操作redis服務器。
第四步:操作完畢后關閉jedis對象,連接池回收資源。
第五步:關閉JedisPool對象。
第一步:使用JedisCluster對象。需要一個Set< HostAndPort>參數。Redis節點的列表。
第二步:直接使用JedisCluster對象操作redis。在系統中單例存在。
第三步:打印結果
第四步:系統關閉前,關閉JedisCluster對象。
添加緩存功能:
查詢內容列表時添加緩存。
1、查詢數據庫之前先查詢緩存。
2、查詢到結果,直接響應結果。
3、查詢不到,緩存中沒有需要查詢數據庫。
4、把查詢結果添加到緩存中。
5、返回結果。
向redis中添加緩存:
Key:cid
Value:內容列表。需要把java對象轉換成json。
使用hash對key進行歸類。
HASH_KEY:HASH
|–KEY:VALUE
|–KEY:VALUE
|–KEY:VALUE
|–KEY:VALUE
代碼的實現:
@Overridepublic List<TbContent> getContentList(long cid) {//查詢緩存try { String json = jedisClient.hget(CONTENT_KEY, cid + ""); //判斷json是否為空 if (StringUtils.isNotBlank(json)) { //把json轉換成list List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class); return list; } } catch (Exception e) { e.printStackTrace(); } //根據cid查詢內容列表 TbContentExample example = new TbContentExample(); //設置查詢條件 Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqualTo(cid); //執行查詢 List<TbContent> list = contentMapper.selectByExample(example); //向緩存中添加數據 try { jedisClient.hset(CONTENT_KEY, cid + "", JsonUtils.objectToJson(list)); } catch (Exception e) { e.printStackTrace(); } return list;}緩存同步:
對內容信息做增刪改操作后只需要把對應緩存刪除即可。可以根據cid刪除。
7.solr服務器的搭建,solr集群與zookeeper集群的問題
solr需要安裝JDK,需要安裝Tomcat
搭建步驟
第一步:把solr 的壓縮包上傳到Linux系統
第二步:解壓solr。
第三步:安裝Tomcat,解壓縮即可。
第四步:把solr部署到Tomcat下。
第五步:解壓縮war包。啟動Tomcat解壓。
第六步:把/root/solr-4.10.3/example/lib/ext目錄下的所有的jar包,添加到solr工程中。[root@localhost ext]# pwd
/root/solr-4.10.3/example/lib/ext
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
第七步:創建一個solrhome。/example/solr目錄就是一個solrhome。復制此目錄到/usr/local/solr/solrhome
[root@localhost example]# pwd
/root/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]#
第八步:關聯solr及solrhome。需要修改solr工程的web.xml文件。
第九步:啟動Tomcat
http://192.168.25.154:8080/solr/
和windows下的配置完全一樣。
使用solrJ管理索引庫
添加文檔:
第一步:把solrJ的jar包添加到工程中。
第二步:創建一個SolrServer,使用HttpSolrServer創建對象。
第三步:創建一個文檔對象SolrInputDocument對象。
第四步:向文檔中添加域。必須有id域,域的名稱必須在schema.xml中定義。
第五步:把文檔添加到索引庫中。
第六步:提交。
刪除文檔:
第一步:創建一個SolrServer對象。
第二步:調用SolrServer對象的根據id刪除的方法。
第三步:提交。
查詢索引庫:
第一步:創建一個SolrServer對象
第二步:創建一個SolrQuery對象。
第三步:向SolrQuery中添加查詢條件、過濾條件。。。
第四步:執行查詢。得到一個Response對象。
第五步:取查詢結果。
第六步:遍歷結果并打印。
什么是SolrCloud:
SolrCloud(solr 云)是Solr提供的分布式搜索方案,當你需要大規模,容錯,分布式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不需要使用SolrCloud的,當索引量很大,搜索請求并發很高,這時需要使用SolrCloud來滿足這些需求。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作為集群的配置信息中心。
它有幾個特色功能:
1)集中式的配置信息
2)自動容錯
3)近實時搜索
4)查詢時自動負載均衡
Solr集群的系統架構:
1.1. 物理結構
三個Solr實例( 每個實例包括兩個Core),組成一個SolrCloud。
1.2. 邏輯結構
索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產生,zookeeper控制每個shard上三個Core的索引數據一致,解決高可用問題。
用戶發起索引請求分別從shard1和shard2上獲取,解決高并發問題。
1.2.1. collection
Collection在SolrCloud集群中是一個邏輯意義上的完整的索引結構。它常常被劃分為一個或多個Shard(分片),它們使用相同的配置信息。
比如:針對商品信息搜索可以創建一個collection。
collection=shard1+shard2+…+shardX 1
.2.2. Core
每個Core是Solr中一個獨立運行單位,提供 索引和搜索服務。一個shard需要由一個Core或多個Core組成。由于collection由多個shard組成所以collection一般由多個core組成。
1.2.3. Master或Slave
Master是master-slave結構中的主結點(通常說主服務器),Slave是master-slave結構中的從結點(通常說從服務器或備服務器)。同一個Shard下master和slave存儲的數據是一致的,這是為了達到高可用目的。
1.2.4. Shard
Collection的邏輯分片。每個Shard被化成一個或者多個replication,通過選舉確定哪個是Leader。
zookeeper作為集群的管理工具。
1、集群管理:容錯、負載均衡。
2、配置文件的集中管理
3、集群的入口 需要實現zookeeper 高可用。
需要搭建集群。建議是奇數節點。需要三個zookeeper服務器。 搭建solr集群需要7臺服務器。
搭建偽分布式:
需要三個zookeeper節點需要四個tomcat節點。 建議虛擬機的內容1G以上。
- zookeeper集群搭建步驟和solr集群的搭建看day07
- spring配置全局異常處理器
8.activeMQ消息隊列
什么是ActiveMQ:
ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現,盡管JMS規范出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。
主要特點:
ActiveMQ的消息形式:
對于消息的傳遞有兩種類型:
一種是點對點的,即一個生產者和一個消費者一一對應;
另一種是發布/訂閱模式,即一個生產者產生消息并進行發送后,可以由多個消費者進行接收。
JMS定義了五種不同的消息正文格式,以及調用的消息類型,允許你發送并接收以一些不同形式的數據,提供現有消息格式的一些級別的兼容性。
· StreamMessage – Java原始值的數據流
· MapMessage–一套名稱-值對
· TextMessage–一個字符串對象
· ObjectMessage–一個序列化的 Java對象
· BytesMessage–一個字節的數據流
ActiveMQ的安裝:
進入http://activemq.apache.org/下載ActiveMQ
安裝環境:
1、需要jdk
2、安裝Linux系統。生產環境都是Linux系統。
安裝步驟:
第一步: 把ActiveMQ 的壓縮包上傳到Linux系統。
第二步:解壓縮。
第三步:啟動。
使用bin目錄下的activemq命令啟動:
[root@localhost bin]# ./activemq start
關閉:
[root@localhost bin]# ./activemq stop
查看狀態:
[root@localhost bin]# ./activemq status
注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建議使用5.11.2
進入管理后臺:
http://192.168.25.168:8161/admin
用戶名:admin
密碼:admin
Activemq的使用方法及與Spring的整合
9.靜態頁面freemaker
商品詳情頁面展示,動態展示 jsp + redis
使用freemarker實現網頁靜態化
ActiveMq同步生成靜態網頁
什么是freemarker:
https://blog.csdn.net/culous/article/details/69948531
FreeMarker是一個用Java語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它并不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用于生成XML,JSP或Java 等。
目前企業中:主要用Freemarker做靜態頁面或是頁面展示
使用步驟:
第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對于的版本號。
第二步:設置模板文件所在的路徑。
第三步:設置模板文件使用的字符集。一般就是utf-8.
第四步:加載一個模板,創建一個模板對象。
第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。
第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。第
七步:調用模板對象的process方法輸出文件。
第八步:關閉流。
網頁的靜態化方案:
輸出文件的名稱:商品id+“.html”
輸出文件的路徑:工程外部的任意目錄。
網頁訪問:使用nginx訪問網頁。在此方案下tomcat只有一個作用就是生成靜態頁面。
工程部署:可以把taotao-item-web部署到多個服務器上。
生成靜態頁面的時機:商品添加后,生成靜態頁面。可以使用Activemq,訂閱topic(商品添加)
商品詳情模塊實現
通過solr全文搜索找到商品;通過商品id去redis中找當前id的緩存,找不到去數據庫中查找并添加到緩存中;
(為了提高redis的高可用,把不常訪問的商品從redis緩存中清除:使用定時)
每次點擊都會把key的時間重置,當key在他的生命中沒有被點擊就會從redis中清除,再次訪問時再次添加。
兩方面影響用戶訪問速度:
數據庫查詢
使用緩存
服務器生成html頁面
使用freemaker生成靜態頁面
Freemaker生成靜態頁面的時機
添加商品后使用activemq廣播消息,freemaker監聽到消息去數據庫查詢商品生成靜態頁面為什么不去redis中。
獲取商品信息,添加商品時還沒有存到redis中為什么不直接使用商品信息還要到數據庫中查詢:不在一個項目中傳輸數據麻煩,也起不到提高效率的作用;而且修改數據時也要修改靜態頁面。
Redis存儲數據庫表信息;
Key: 表名?字段
Value: 字段值
兩種方案:
一 redis緩存
二 網頁靜態化
10.nginx服務器的搭建
什么是nginx:
Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬并發鏈接,并且cpu、內存等資源消耗卻非常低,運行非常穩定。
應用場景:
1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。
nginx安裝:
官方網站:http://nginx.org/使用的版本是1.8.0版本。
安裝環境:
1、需要安裝gcc的環境。yum install gcc-c++
2、第三方的開發包。
PCRE:
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。yum install -y pcre pcre-devel
注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。
zlib:
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
yum install -y zlib zlib-devel
openssl:
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。
nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
yum install -y openssl openssl-devel
安裝步驟:
第一步:把nginx的源碼包上傳到linux系統
第二步:解壓縮[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz
第三步:使用configure命令創建一makeFile文件。
./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
注意:啟動nginx之前,上邊將臨時文件目錄指定為/var/temp/nginx,需要在/var下創建temp及nginx目錄
[root@localhost sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
啟動nginx:
進入sbin目錄
[root@localhost sbin]# ./nginx
關閉nginx:
[root@localhost sbin]# ./nginx -s stop
推薦使用:
[root@localhost sbin]# ./nginx -s quit
重啟nginx:
1、先關閉后啟動。
2、刷新配置文件:
[root@localhost sbin]# ./nginx -s reload
訪問nginx:
默認是80端口。注意:是否關閉防火墻。
- 配置虛擬主機 (http服務器)
- 反向代理
- 負載均衡
軟負載,硬負載
F5硬負載第四層負載 :傳輸層負載
nginx是第七層應用層負載
LVS實現第四層的軟負載,能實現F5的60的負載功能 - 高可用
11.sso單點登陸系統
什么是sso系統:
SSO英文全稱Single Sign On,單點登錄。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用于同一個用戶的登錄的機制。它是目前比較流行的企業業務整合的解決方案之一。
購物車業務邏輯:
1、從cookie中查詢商品列表。
2、判斷商品在商品列表中是否存在。
3、如果存在,商品數量相加。
4、不存在,根據商品id查詢商品信息。
5、把商品添加到購車列表。
6、把購車商品列表寫入cookie。
小結
使用cookie實現購物車:
優點:1、實現簡單2、不需要占用服務端存儲空間。
缺點:1、存儲容量有限2、更換設備購車信息不能同步。
實現購車商品數據同步:
1、要求用戶登錄。
2、把購物車商品列表保存到數據庫中。推薦使用redis(用戶會頻繁操作購物車)。
3、Key:用戶id,value:購車商品列表。推薦使用hash,hash的field:商品id,value:商品信息。Key 用戶id
Value
Key 商品id
Value 商品json
4、在用戶未登錄情況下寫cookie。當用戶登錄后,訪問購物車列表時,
a) 把cookie中的數據同步到redis。
b) 把cookie中的數據刪除
c) 展示購物車列表時以redis為準。
d) 如果redis中有數據cookie中也有數據,需要做數據合并。相同商品數量相加,不同商品添加一個新商品。
5、如果用戶登錄狀態,展示購物車列表以redis為準。如果未登錄,以cookie為準
12.mybatis分頁插件pagehelper
13.項目部署
項目架構講解:
網絡拓撲圖:
系統部署:
部署分析
Taotao-manager
Taotao-manager-web
Taotao-portal-web
Taotao-content
Taotao-searchT
aotao-search-web
Taotao-item-web
Taotao-sso
Taotao-sso-web
Taotao-cart-web
Taotao-order
Taotao-order-web
需要24臺服務器。 24
Mysql 2
Solr 7
Redis 6
圖片服務器 2
Nginx 2
注冊中心 3
Activemq 2
共需要48臺服務器。
項目部分詳解:
商品管理:
1.1商品查詢業務:
查詢所有的商品信息,商品的分頁采用的是pagehelp插件,將商品信息查詢出來的信息放到pageinfo對象里面,設置分頁信息,當前頁和每頁顯示多少條數據,第一次查詢的時候會先查詢redis里面有沒有數據,如果有 直接取出來,取出來的是一個json,需要將json轉化成對象,如果沒有就從數據里面查出來,同時會存進redis里面去。(總之第一次查詢的時候必須是先走redis)
1.2商品添加業務:
在商品添加界面錄入商品信息,商品的id,商品標題,商品賣點,商品價格,庫存數量,商品條形碼,商品圖片,商品類別,商品狀態(1-正常,2-下架,3-刪除’),創建時間,更新時間,商品的描述。其中圖片存儲考慮到數量比較多,采用的是分布式文件存儲系統(fastdfs),圖片多了可以搭建集群。商品的描述采用的是富文本編輯器,將錄入的商品信息分別插入對應的不同的表,商品添加時還需要和redis數據庫進行同步,同時也會添加到redis里面去做緩存。
圖片上傳操作的步驟:
商品類目管理:
2.1商品類目查詢業務:
商品分類列表,使用EasyUI的tree控件展示,前端需要返回的json數據字段有,id,text,state;text:節點的名稱,state:如果節點下有子節點“closed”,如果沒有子節點“open”。數據的顯示采用的是異步加載。點擊父節點才會加載父節點下的子節點。查詢的條件是parent_id父節點的id,默認值我們給的是0,根據parent_id作為條件查詢出來的數據,封裝在自己定義的pojo里面,然后在轉化成json,回顯給界面 。
2.2商品類目添加業務:
在某個節點上添加信息,首先拿到該節點的id,插入一條數據時,將id當成父節點的字段插入進去,如果之前的節點有葉子節點就不用管,沒有葉子節點,要把之前的狀態改成有子節點的狀態。
網站內容管理(CMS)
3.1內容分類查詢業務:
內容分類列表,使用EasyUI的tree控件展示,前端需要返回的json數據字段有,id ,text,state;text:節點的名稱,state:如果節點下有子節點“closed”,如果沒有子節點“open”。數據的顯示采用的是異步加載。點擊父節點才會加載父節點下的子節點。查詢的條件是parent_id父節點的id,默認值我們給的是0,根據parent_id作為條件查詢出來的數據,封裝在自己定義的pojo里面,然后在轉化成json,回顯給界面
3.2重命名業務:
根據id查詢該節點的對象,拿到這個對象之后,修改該對象的名字。改完之后把該對象當做參數去修改
3.3刪除業務:
根據id修改對應表里面的刪除字段狀態,1表示存在,0表示刪除,刪除節點的同時還需要判斷該節點的父節點是否有子節點存在,如果不存在,要把父節點的那條數據的狀態改成沒有子節點
3.4內容查詢業務
根據內容的分類,查詢對應分類的廣告內容信息。拿到內容分類id,在內容管理表里面查詢,在將返回的對象轉換成json數據顯示在頁面。
3.5內容刪除業務
刪除是改變對應數據里面對應的狀態,如果需要同步到redis里面去,還需要把redis里面對應的K刪掉,下次再查詢的的時候,發現redis沒有對應的k,會再次同步到redis中去。
廣告位
1.輪播圖業務
選中大廣告節點,拿到內容分類大廣告的id,在內容管理里面插入數據,進入到大廣告添加的界面錄入信息,內容的標題,內容的子標題,內容的描述,url地址,圖片信息,內容,圖片使用的是fastdfs,內容采用的是富文本編輯器。添加之后需要和redis進行同步。下次回顯數據的時候從redis里面查,如果沒有就從數據里面查詢
商品搜索
5.1同步solr庫業務
在solr配置文件schema.xml中定義要搜索的域,里面有商品Id,商品標題,商品賣點,商品價格,商品圖片,分類名稱,商品描述。首先查詢出所有的商品數據,查詢出來之后再創建一個solrServer對象。在為每個商品創建一個SolrInputDocument對象,將查詢出來的商品數據循環遍歷添加到SolrInputDocument對象里面去,在將SolrInputDocument對象添加到SolrServer對象里面。
5.2商品搜索業務
商品搜索用到了solr技術,根據IK分詞器,對查詢的條件進行查詢,首先創建一個SolrQuery對象作為商品搜索的查詢條件,設置分頁條件,指定默認的搜索域,設置高亮,執行查詢,計算出總頁數和總條數,返回一個QueryResponse結果集,在將結果集循環遍歷添加到自己定義的集合里面,返回給頁面,一個商品的圖片有多個地址,需要將圖片的地址分切轉化成數組,頁面顯示的時候取數組的下標為0,取出一張圖片就可以了。
商品詳情頁:
商品詳情頁采用的是FreeMarker模板引擎技術,生成一個靜態化頁面。這樣能減輕服務器的壓力。首先創建一個Configuration對象,這個對象有個參數,參數是FreeMarker的版本號,拿到這個Configuration對象之后設置模板所在的路徑,在設置模板文件使用的字符集,設置完之后加載一個模板,創建一個模板對象,模板創建之后會把查詢出來的數據放到模板里面。
購物車:
購物車的實現功能考慮到兩種情況,登錄的時候商品存在哪里,沒有登錄的時候商品信息存在哪里。沒有登錄的時候我們將商品信息保存在cookie里面,在保存之前我們會先在cookie里面先查詢有沒有該商品,如果該商品存在只需要修改該商品的數量即可,如果cookie里面不存在,就把商品信息添加到cookie里面去。登錄的時候我們將商品保存到redis里面去,這個時候需要將cookie和redis里面的商品進行合并,同時需要刪除cookie里面的數據。
SSO
用戶注冊業務:
客戶端發送請求到后臺,需要校驗用戶名和密碼不能為空,用戶名,電話,郵箱是否已經被使用,如果都通過將接受到的密碼用MD5進行加密,然后在插入到數據里面去。
用戶登錄業務:
在登錄界面輸入用戶名和密碼之后點擊登錄按鈕,action接受用戶名和密碼,根據用戶名查詢密碼,將用戶輸入的密碼進行MD5加密,然后在和數據庫里面的值進行對比,如果成立就生成一個token的變量。token的值由uuid生成。在將用戶信息存到redis里面。Key是token,value就是用戶信息,在設置redis的過去時間,一般半個小時,再把token寫入到cookie中。客戶端發送請求的時候,從cookie里面拿到token的值,把值拿到之后再redis里面當成k來取出用戶信息看是都存在,存在登錄成功。
總結
以上是生活随笔為你收集整理的关于淘淘商城的一些基本说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南省工信厅党组书记、厅长雷绍业一行莅临
- 下一篇: 无盘服务器内存问题,无盘服务器内存占用过