ssm(Spring、Springmvc、Mybatis)實戰之淘淘商城-第十三天(非原創)

文章大綱

1、課程介紹
2、SolrCloud介紹與搭建
3、工程部署
4、參考資料下載
5、參考文章java

 

1、課程介紹

一共14天課程
(1)第一天:電商行業的背景。淘淘商城的介紹。搭建項目工程。Svn的使用。
(2)次日:框架的整合。後臺管理商品列表的實現。分頁插件。
(3)第三天:後臺管理。商品添加。商品類目的選擇、圖片上傳、富文本編輯器的使用。
(4)第四天:商品規格的實現。
(5)第五天:商城前臺系統的搭建。首頁商品分類的展現。Jsonp。
(6)第六天:cms系統的實現。前臺大廣告位的展現。
(7)第七天:cms系統添加緩存。Redis。緩存同步。
(8)第八天:搜索功能的實現。使用solr實現搜索。
(9)第九天:商品詳情頁面的展現。
(10)第十天:單點登陸系統。Session共享。
(11)第十一天:購物車訂單系統的實現。
(12)第十二天:nginx。反向代理工具。
(13)第十三天:redis集羣的搭建、solr集羣的搭建。系統的部署。
(14)項目總結。linux

2、SolrCloud介紹與搭建

1. 什麼是SolrCloud

  SolrCloud(solr 雲)是Solr提供的分佈式搜索方案,當你須要大規模,容錯,分佈式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不須要使用SolrCloud的,當索引量很大,搜索請求併發很高,這時須要使用SolrCloud來知足這些需求。
  SolrCloud是基於Solr和Zookeeper的分佈式搜索方案,它的主要思想是使用Zookeeper做爲集羣的配置信息中心。
  它有幾個特點功能:
(1)集中式的配置信息
(2)自動容錯
(3)近實時搜索
(4)查詢時自動負載均衡nginx

2. 什麼是Zookeeper

  顧名思義zookeeper就是動物園管理員,他是用來管hadoop(大象)、Hive(蜜蜂)、pig(小豬)的管理員, Apache Hbase和 Apache Solr 的分佈式集羣都用到了zookeeper;Zookeeper:是一個分佈式的、開源的程序協調服務,是hadoop項目下的一個子項目。redis

3. Zookeeper能夠幹哪些事情

(1)配置管理
  在咱們的應用中除了代碼外,還有一些就是各類配置。好比數據庫鏈接等。通常咱們都是使用配置文件的方式,在代碼中引入這些配置文件。可是當咱們只有一種配置,只有一臺服務器,而且不常常修改的時候,使用配置文件是一個很好的作法,可是若是咱們配置很是多,有不少服務器都須要這個配置,並且還多是動態的話使用配置文件就不是個好主意了。這個時候每每須要尋找一種集中管理配置的方法,咱們在這個集中的地方修改了配置,全部對這個配置感興趣的均可以得到變動。好比咱們能夠把配置放在數據庫裏,而後全部須要配置的服務都去這個數據庫讀取配置。可是,由於不少服務的正常運行都很是依賴這個配置,因此須要這個集中提供配置服務的服務具有很高的可靠性。通常咱們能夠用一個集羣來提供這個配置服務,可是用集羣提高可靠性,那如何保證配置在集羣中的一致性呢? 這個時候就須要使用一種實現了一致性協議的服務了。Zookeeper就是這種服務,它使用Zab這種一致性協議來提供一致性。如今有不少開源項目使用Zookeeper來維護配置,好比在HBase中,客戶端就是鏈接一個Zookeeper,得到必要的HBase集羣的配置信息,而後才能夠進一步操做。還有在開源的消息隊列Kafka中,也使用Zookeeper來維護broker的信息。在Alibaba開源的SOA框架Dubbo中也普遍的使用Zookeeper管理一些配置來實現服務治理。
(2)名字服務
  名字服務這個就很好理解了。好比爲了經過網絡訪問一個系統,咱們得知道對方的IP地址,可是IP地址對人很是不友好,這個時候咱們就須要使用域名來訪問。可是計算機是不能是別域名的。怎麼辦呢?若是咱們每臺機器裏都備有一份域名到IP地址的映射,這個卻是能解決一部分問題,可是若是域名對應的IP發生變化了又該怎麼辦呢?因而咱們有了DNS這個東西。咱們只須要訪問一個你們熟知的(known)的點,它就會告訴你這個域名對應的IP是什麼。在咱們的應用中也會存在不少這類問題,特別是在咱們的服務特別多的時候,若是咱們在本地保存服務的地址的時候將很是不方便,可是若是咱們只須要訪問一個你們都熟知的訪問點,這裏提供統一的入口,那麼維護起來將方便得多了。
(3)分佈式鎖
  其實在第一篇文章中已經介紹了Zookeeper是一個分佈式協調服務。這樣咱們就能夠利用Zookeeper來協調多個分佈式進程之間的活動。好比在一個分佈式環境中,爲了提升可靠性,咱們的集羣的每臺服務器上都部署着一樣的服務。可是,一件事情若是集羣中的每一個服務器都進行的話,那相互之間就要協調,編程起來將很是複雜。而若是咱們只讓一個服務進行操做,那又存在單點。一般還有一種作法就是使用分佈式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,當即fail over到另外的服務。這在不少分佈式系統中都是這麼作,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。好比HBase的Master就是採用這種機制。但要注意的是分佈式鎖跟同一個進程的鎖仍是有區別的,因此使用的時候要比同一個進程裏的鎖更謹慎的使用。
(4)集羣管理
  在分佈式的集羣中,常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其餘機器須要感知到這種變化,而後根據這種變化作出對應的決策。好比咱們是一個分佈式存儲系統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候咱們要根據如今集羣目前的狀態來分配存儲節點。這個時候咱們就須要動態感知到集羣目前的狀態。還有,好比一個分佈式的SOA架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就須要採用某種機制發現如今有哪些節點能夠提供該服務(這也稱之爲服務發現,好比Alibaba開源的SOA框架Dubbo就採用了Zookeeper做爲服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper做爲Cosnumer的上下線管理。數據庫

4. SolrCloud結構

  SolrCloud爲了下降單機的處理壓力,須要由多臺服務器共同來完成索引和搜索任務。實現的思路是將索引數據進行Shard(分片)拆分,每一個分片由多臺的服務器共同完成,當一個索引或搜索請求過來時會分別從不一樣的Shard的服務器中操做索引。
  SolrCloud須要Solr基於Zookeeper部署,Zookeeper是一個集羣管理軟件,因爲SolrCloud須要由多臺服務器組成,由zookeeper來進行協調管理。
下圖是一個SolrCloud應用的例子:apache

 

對上圖進行圖解,以下:編程

 

4.1 物理結構
  三個Solr實例( 每一個實例包括兩個Core),組成一個SolrCloud。緩存

4.2 邏輯結構
  索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產生,zookeeper控制每一個shard上三個Core的索引數據一致,解決高可用問題。
  用戶發起索引請求分別從shard1和shard2上獲取,解決高併發問題。tomcat

collection:
  Collection在SolrCloud集羣中是一個邏輯意義上的完整的索引結構。它經常被劃分爲一個或多個Shard(分片),它們使用相同的配置信息。好比:針對商品信息搜索能夠建立一個collection。collection=shard1+shard2+....+shardX服務器

Core:
  每一個Core是Solr中一個獨立運行單位,提供 索引和搜索服務。一個shard須要由一個Core或多個Core組成。因爲collection由多個shard組成因此collection通常由多個core組成。

Master或Slave:
  Master是master-slave結構中的主結點(一般說主服務器),Slave是master-slave結構中的從結點(一般說從服務器或備服務器)。同一個Shard下master和slave存儲的數據是一致的,這是爲了達到高可用目的。

Shard:
  Collection的邏輯分片。每一個Shard被化成一個或者多個replication,經過選舉肯定哪一個是Leader。

5. SolrCloud搭建

5.1 架構安排
  本教程的這套安裝是單機版的安裝,因此採用僞集羣的方式進行安裝,若是是真正的生產環境,將僞集羣的ip改下就能夠了,步驟是同樣的。
SolrCloud結構圖以下:

 

5.2 環境準備
(1)CentOS-6.4-i386-bin-DVD1.iso
(2)jdk-7u72-linux-i586.tar.gz
(3)apache-tomcat-7.0.47.tar.gz
(4)zookeeper-3.4.6.tar.gz
(5)solr-4.10.3.tgz

5.3 具體環境安裝
  具體環節安裝在請參考資料下載中進行學習

6. solrJ訪問solrCloud

public class SolrCloudTest { // zookeeper地址 private static String zkHostString = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"; // collection默認名稱,好比個人solr服務器上的collection是collection2_shard1_replica1,就是去掉「_shard1_replica1」的名稱 private static String defaultCollection = "collection1"; // cloudSolrServer實際 private CloudSolrServer cloudSolrServer; // 測試方法以前構造 CloudSolrServer @Before public void init() { cloudSolrServer = new CloudSolrServer(zkHostString); cloudSolrServer.setDefaultCollection(defaultCollection); cloudSolrServer.connect(); } // 向solrCloud上建立索引 @Test public void testCreateIndexToSolrCloud() throws SolrServerException, IOException { SolrInputDocument document = new SolrInputDocument(); document.addField("id", "100001"); document.addField("title", "李四"); cloudSolrServer.add(document); cloudSolrServer.commit(); } // 搜索索引 @Test public void testSearchIndexFromSolrCloud() throws Exception { SolrQuery query = new SolrQuery(); query.setQuery("*:*"); try { QueryResponse response = cloudSolrServer.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文檔個數:" + docs.getNumFound()); System.out.println("查詢時間:" + response.getQTime()); for (SolrDocument doc : docs) { ArrayList title = (ArrayList) doc.getFieldValue("title"); String id = (String) doc.getFieldValue("id"); System.out.println("id: " + id); System.out.println("title: " + title); System.out.println(); } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!"); e.printStackTrace(); } } // 刪除索引 @Test public void testDeleteIndexFromSolrCloud() throws SolrServerException, IOException { // 根據id刪除 UpdateResponse response = cloudSolrServer.deleteById("zhangsan"); // 根據多個id刪除 // cloudSolrServer.deleteById(ids); // 自動查詢條件刪除 // cloudSolrServer.deleteByQuery("product_keywords:教程"); // 提交 cloudSolrServer.commit(); } } 

3、工程部署

1. 域名規劃

 

2. 環境準備

CentOS6.4
Jdk1.8以上
Tomcat8

3. 部署步驟

使用maven實現tomcat的熱部署。

第一步:安裝tomcat
先在CentOS中安裝jdk,而後解壓tomcat。

第二步: 在tomcat中配置用戶權限
咱們須要實現熱部署,天然就須要經過maven操做tomcat,因此就須要maven取得操做tomcat的權限,如今這一步就是配置tomcat的可操做權限.
在tomcat的安裝目錄下,修改conf / tomcat-user.xml文件,在<tomcat-users> 節點下面增長以下配置:

<role rolename="manager-gui" /> <role rolename="manager-script" /> <user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/> 

第三步:修改pom文件

在project中添加插件,以及maven中配置的server,
如今maven已經擁有操做tomcat的權限了,可是這二者之間想要通訊的話還須要一個橋樑,那就是在maven中配置tomcat插件.
修改項目的pom.xml文件,在<build> 節點下面增長以下配置:

<build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8081</port> <path>/</path> <url>http://192.168.25.136:8080/manager/text</url> <username>tomcat</username> <password>tomcat</password> </configuration> </plugin> </plugins> </build> 

第四步:設置部署命令
通常使用搜是在eclipse中,能夠右鍵點擊須要部署的項目,Run as -> Run configurations -> maven build -> 右鍵 new,這樣配置一個新的maven命令具體配置命令方法:
初次部署可使用 "tomcat7:deploy" 命令
若是已經部署過使用 "tomcat7:redeploy" 命令

4、參考資料下載

連接:https://pan.baidu.com/s/1udhG8gBTZ6wjW9eDR8ZSOQ
提取碼:fml7

5、參考文章

http://yun.itheima.com/course?hm

相關文章
相關標籤/搜索