大型項(xiàng)目的發(fā)布部署:第一章:發(fā)布部署流程

大型動(dòng)態(tài)應(yīng)用系統(tǒng)又可分為幾個(gè)子系統(tǒng):

1)Web前端系統(tǒng)

2)負(fù)載均衡系統(tǒng)

3)數(shù)據(jù)庫集群系統(tǒng)

4)緩存系統(tǒng)

5)分布式存儲(chǔ)系統(tǒng)

6)分布式服務(wù)器管理系統(tǒng)

7)代碼分發(fā)系統(tǒng)

 
Web前端系統(tǒng)

結(jié)構(gòu)圖:

 

為了達(dá)到不同應(yīng)用的服務(wù)器共享、避免單點(diǎn)故障、集中管理、統(tǒng)一配置等目的,不以應(yīng)用劃分服務(wù)器,而是將所有服務(wù)器做統(tǒng)一使用,每臺(tái)服務(wù)器都可以對(duì)多個(gè)應(yīng)用提供服務(wù),當(dāng)某些應(yīng)用訪問量升高時(shí),通過增加服務(wù)器節(jié)點(diǎn)達(dá)到整個(gè)服務(wù)器集群的性能提高,同時(shí)使他應(yīng)用也會(huì)受益。該Web前端系統(tǒng)基于Apache/Lighttpd/Eginx等的虛擬主機(jī)平臺(tái),提供PHP程序運(yùn)行環(huán)境。服務(wù)器對(duì)開發(fā)人員是透明的,不需要開發(fā)人員介入服務(wù)器管理
負(fù)載均衡系統(tǒng)

 

負(fù)載均衡系統(tǒng)分為硬件和軟件兩種。硬件負(fù)載均衡效率高,但是價(jià)格貴,比如F5等。軟件負(fù)載均衡系統(tǒng)價(jià)格較低或者免費(fèi),效率較硬件負(fù)載均衡系統(tǒng)低,不過對(duì)于流量一般或稍大些網(wǎng)站來講也足夠使用,比如lvs, nginx。大多數(shù)網(wǎng)站都是硬件、軟件負(fù)載均衡系統(tǒng)并用。
數(shù)據(jù)庫集群系統(tǒng)

結(jié)構(gòu)圖:

 

由于Web前端采用了負(fù)載均衡集群結(jié)構(gòu)提高了服務(wù)的有效性和擴(kuò)展性,因此數(shù)據(jù)庫必須也是高可靠的,才能保證整個(gè)服務(wù)體系的高可靠性,如何構(gòu)建一個(gè)高可靠的、可以提供大規(guī)模并發(fā)處理的數(shù)據(jù)庫體系?

我們可以采用如上圖所示的方案:

1) 使用 MySQL 數(shù)據(jù)庫,考慮到Web應(yīng)用的數(shù)據(jù)庫讀多寫少的特點(diǎn),我們主要對(duì)讀數(shù)據(jù)庫做了優(yōu)化,提供專用的讀數(shù)據(jù)庫和寫數(shù)據(jù)庫,在應(yīng)用程序中實(shí)現(xiàn)讀操作和寫操作分別訪問不同的數(shù)據(jù)庫。

2) 使用 MySQL Replication 機(jī)制實(shí)現(xiàn)快速將主庫(寫庫)的數(shù)據(jù)庫復(fù)制到從庫(讀庫)。一個(gè)主庫對(duì)應(yīng)多個(gè)從庫,主庫數(shù)據(jù)實(shí)時(shí)同步到從庫。

3) 寫數(shù)據(jù)庫有多臺(tái),每臺(tái)都可以提供多個(gè)應(yīng)用共同使用,這樣可以解決寫庫的性能瓶頸問題和單點(diǎn)故障問題。

4) 讀數(shù)據(jù)庫有多臺(tái),通過負(fù)載均衡設(shè)備實(shí)現(xiàn)負(fù)載均衡,從而達(dá)到讀數(shù)據(jù)庫的高性能、高可靠和高可擴(kuò)展性。

5) 數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器分離。

6) 從數(shù)據(jù)庫使用BigIP做負(fù)載均衡。
緩存系統(tǒng)

 

緩存分為文件緩存、內(nèi)存緩存、數(shù)據(jù)庫緩存。在大型Web應(yīng)用中使用最多且效率最高的是內(nèi)存緩存。最常用的內(nèi)存緩存工具是Memcached。使用正確的緩存系統(tǒng)可以達(dá)到實(shí)現(xiàn)以下目標(biāo):

1、使用緩存系統(tǒng)可以提高訪問效率,提高服務(wù)器吞吐能力,改善用戶體驗(yàn)。

2、減輕對(duì)數(shù)據(jù)庫及存儲(chǔ)集服務(wù)器的訪問壓力。

3、Memcached服務(wù)器有多臺(tái),避免單點(diǎn)故障,提供高可靠性和可擴(kuò)展性,提高性能。
分布式存儲(chǔ)系統(tǒng)

結(jié)構(gòu)圖:

 

Web系統(tǒng)平臺(tái)中的存儲(chǔ)需求有下面兩個(gè)特點(diǎn):

1) 存儲(chǔ)量很大,經(jīng)常會(huì)達(dá)到單臺(tái)服務(wù)器無法提供的規(guī)模,比如相冊(cè)、視頻等應(yīng)用。因此需要專業(yè)的大規(guī)模存儲(chǔ)系統(tǒng)。

2) 負(fù)載均衡cluster中的每個(gè)節(jié)點(diǎn)都有可能訪問任何一個(gè)數(shù)據(jù)對(duì)象,每個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)的處理也能被其他節(jié)點(diǎn)共享,因此這些節(jié)點(diǎn)要操作的數(shù)據(jù)從邏輯上看只能是一個(gè)整體,不是各自獨(dú)立的數(shù)據(jù)資源。

因此高性能的分布式存儲(chǔ)系統(tǒng)對(duì)于大型網(wǎng)站應(yīng)用來說是非常重要的一環(huán)。(這個(gè)地方需要加入對(duì)某個(gè)分布式存儲(chǔ)系統(tǒng)的簡(jiǎn)單介紹。)
分布式服務(wù)器管理系統(tǒng)

結(jié)構(gòu)圖:

 

隨著網(wǎng)站訪問流量的不斷增加,大多的網(wǎng)絡(luò)服務(wù)都是以負(fù)載均衡集群的方式對(duì)外提供服務(wù),隨之集群規(guī)模的擴(kuò)大,原來基于單機(jī)的服務(wù)器管理模式已經(jīng)不能夠滿足我們的需求,新的需求必須能夠集中式的、分組的、批量的、自動(dòng)化的對(duì)服務(wù)器進(jìn)行管理,能夠批量化的執(zhí)行計(jì)劃任務(wù)。

在分布式服務(wù)器管理系統(tǒng)軟件中有一些比較優(yōu)秀的軟件,其中比較理想的一個(gè)是Cfengine。它可以對(duì)服務(wù)器進(jìn)行分組,不同的分組可以分別定制系統(tǒng)配置文件、計(jì)劃任務(wù)等配置。它是基于C/S 結(jié)構(gòu)的,所有的服務(wù)器配置和管理腳本程序都保存在Cfengine Server上,而被管理的服務(wù)器運(yùn)行著 Cfengine Client 程序,Cfengine Client通過SSL加密的連接定期的向服務(wù)器端發(fā)送請(qǐng)求以獲取最新的配置文件和管理命令、腳本程序、補(bǔ)丁安裝等任務(wù)。

有了Cfengine這種集中式的服務(wù)器管理工具,我們就可以高效的實(shí)現(xiàn)大規(guī)模的服務(wù)器集群管理,被管理服務(wù)器和 Cfengine Server 可以分布在任何位置,只要網(wǎng)絡(luò)可以連通就能實(shí)現(xiàn)快速自動(dòng)化的管理。
代碼發(fā)布系統(tǒng)

結(jié)構(gòu)圖:

 

隨著網(wǎng)站訪問流量的不斷增加,大多的網(wǎng)絡(luò)服務(wù)都是以負(fù)載均衡集群的方式對(duì)外提供服務(wù),隨之集群規(guī)模的擴(kuò)大,為了滿足集群環(huán)境下程序代碼的批量分發(fā)和更新,我們還需要一個(gè)程序代碼發(fā)布系統(tǒng)。

這個(gè)發(fā)布系統(tǒng)可以幫我們實(shí)現(xiàn)下面的目標(biāo):

1) 生產(chǎn)環(huán)境的服務(wù)器以虛擬主機(jī)方式提供服務(wù),不需要開發(fā)人員介入維護(hù)和直接操作,提供發(fā)布系統(tǒng)可以實(shí)現(xiàn)不需要登陸服務(wù)器就能把程序分發(fā)到目標(biāo)服務(wù)器。

2) 我們要實(shí)現(xiàn)內(nèi)部開發(fā)、內(nèi)部測(cè)試、生產(chǎn)環(huán)境測(cè)試、生產(chǎn)環(huán)境發(fā)布的4個(gè)開發(fā)階段的管理,發(fā)布系統(tǒng)可以介入各個(gè)階段的代碼發(fā)布。

3) 我們需要實(shí)現(xiàn)源代碼管理和版本控制,SVN可以實(shí)現(xiàn)該需求。

這里面可以使用常用的工具Rsync,通過開發(fā)相應(yīng)的腳本工具實(shí)現(xiàn)服務(wù)器集群間代碼同步分發(fā)

 
如何部署?搭建集群服務(wù)器tomcat,weblogic,jboss哪個(gè)性能最好?

tomcat服務(wù)器占用資源少,穩(wěn)定且免費(fèi)。是一個(gè)輕量級(jí)的服務(wù)器,主要是應(yīng)用于中小型項(xiàng)目 ,當(dāng)并發(fā)訪問的用戶比較少時(shí),可以選用tomcat服務(wù)器。tomcat服務(wù)器是運(yùn)行jsp和servlet的很好的容器,但是它不支持EJB等。項(xiàng)目在tomcat中的部署很方便。
weblogic服務(wù)器:
而相比之下,weblogic服務(wù)器則功能更強(qiáng)大了一些,它屬于應(yīng)用級(jí)服務(wù)器,它不盡支持jsp和servlet,而且還支持更多的java的規(guī)范。 他用于開發(fā),集成,部署和管理大型的分布式web應(yīng)用,網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用。這種大型的服務(wù)器有著自己獨(dú)特的優(yōu)勢(shì),即標(biāo)準(zhǔn)領(lǐng)先(它的標(biāo)準(zhǔn)包括ejb,jsb,jms,jdbc,xml和wml),擴(kuò)展性無限(它的體系架構(gòu)具有高擴(kuò)展性,主要包括哭戶籍連接的共享,資源pooling以及動(dòng)態(tài)網(wǎng)頁和ejb組件集群),快速開發(fā)(憑借對(duì)ejb和jsp的支持,以及其對(duì)servlet組件的架構(gòu)體系,可加速部署應(yīng)用),部署靈活,可靠等。但是一般的系統(tǒng)部署基本不會(huì)用到它,因?yàn)橐话惴腔趀jb等的分布式開發(fā)項(xiàng)目,僅僅用tomcat即可滿足我們的需求,所以無需動(dòng)用重量級(jí)的weblogic。

jboss服務(wù)器:
jboss是一個(gè)基于j2ee的開放源碼應(yīng)用服務(wù)器,它也是免費(fèi)的。它是一個(gè)管理ejb的容器,jboss核心服務(wù)僅支持ejb服務(wù)器,所以是不包括jsp和servlet的web容器。當(dāng)然了,它可以和tomcat等進(jìn)行綁定使用來同時(shí)支持jsp,servlet以及ejb的規(guī)范。jboss有一個(gè)典型的特點(diǎn):當(dāng)有servlet的系統(tǒng)調(diào)用到j(luò)boss里面的ejb時(shí)不經(jīng)過網(wǎng)絡(luò),因?yàn)閖boss和web服務(wù)器在同一個(gè)java虛擬機(jī)中運(yùn)行,這可以大大提高運(yùn)行效率和安全性。
這三個(gè)只有weblogic是商業(yè)的軟件,所以你希望性能好的話,就用weblogic最好。

 
使用tomcat部署應(yīng)用程序怎么做?

1,把java的web工程打成一個(gè)war包。
2,把war包上傳到tomcat目錄下的webapps目錄下
3,進(jìn)入tomcat的bin目錄下,雙擊啟動(dòng)startup.bat

 
同一個(gè)Tomcat部署多個(gè)項(xiàng)目

同一個(gè)Tomcat 同一個(gè)端口 部署多個(gè)項(xiàng)目
第一步:把待發(fā)布的多個(gè)項(xiàng)目.war文件放入tomcat的webapps文件下下 ![這里寫圖片描述](https://img-blog.csdn.net/20170914102630363?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHJlYW1zdGFyNjEz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 第二步:修改 $TOMCAT_HOME\conf 下的server.xml文件 在server.xml文件中新增節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)代表一個(gè)web應(yīng)用

path屬性:指定訪問該Web應(yīng)用的URL入口。 如“/HelloApp1/”

docBase屬性:指定Web應(yīng)用的文件路徑,可以給定絕對(duì)路徑,可以給定相對(duì)路徑。。如應(yīng)用HelloApp1的文件路徑為<CATALINA_HOME>/webapps/HelloApp1

reloadable屬性:如果這個(gè)屬性設(shè)為true,tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動(dòng),如果監(jiān)測(cè)到有class文件被更新的,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用。
這里寫圖片描述
劃重點(diǎn),經(jīng)測(cè)試,沒有第二步也可以,直接把.war文件放在webapps目錄下即可。直接訪問http://localhost:8080/HelloApp1/即可
同一個(gè)Tomcat 多個(gè)端口 部署多個(gè)項(xiàng)目
第一步:修改 $TOMCAT_HOME\conf 下的server.xml文件 1.復(fù)制節(jié)點(diǎn) ,粘貼新增節(jié)點(diǎn) 2.刪除掉新增節(jié)點(diǎn)下的``節(jié)點(diǎn) 3.新增Service節(jié)點(diǎn)的name屬性修改為Catalina1 4.新增Service節(jié)點(diǎn)的Connector節(jié)點(diǎn)port屬性修改為8001(根據(jù)機(jī)器配置未占用端口) 5.新增Service節(jié)點(diǎn)的Engine節(jié)點(diǎn)的name修改為Catalina1 6.新增Service節(jié)點(diǎn)的Engine節(jié)點(diǎn)的Host節(jié)點(diǎn)appBase屬性修改為webapps1 ![這里寫圖片描述](https://img-blog.csdn.net/20170718110756307?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHJlYW1zdGFyNjEz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

第二步:$TOMCAT_HOME 路徑下新建文件夾webapps1,里面放要發(fā)布的項(xiàng)目 .war文件

這里寫圖片描述

這里寫圖片描述

第三步: 復(fù)制$TOMCAT_HOME\confi目錄下的Catalina生成副本 ,并命名為Catalina1
這里寫圖片描述

第四步:測(cè)試

1.運(yùn)行bin/startup.bat文件
2.運(yùn)行bin/shutdown.bat文件
3.運(yùn)行tomcat8w.exe 啟動(dòng)tomcat
4.在瀏覽器輸入http://localhost:8080/ 測(cè)試tomcat是否啟動(dòng)
在瀏覽器輸入http://localhost:8081(server.xml中配置的端口號(hào))/項(xiàng)目名/ 看項(xiàng)目是否啟動(dòng)

這里寫圖片描述

如果還要再發(fā)布一個(gè)項(xiàng)目,重復(fù)上述步驟即可
再新增一個(gè)節(jié)點(diǎn)。。。再新建一個(gè)webapps2文件夾。。。再復(fù)制一個(gè)Catalina2文件夾。。。

    網(wǎng)站部署所需

網(wǎng)站程序代碼

也就是常說的用什么語言開發(fā)的網(wǎng)站,比如PHP、Java、ASP.NET(C#)等等。開發(fā)好后可以運(yùn)行起來,但是一般需要一個(gè)程序運(yùn)行的容器,也就是服務(wù)器。

服務(wù)器(用于運(yùn)行你的網(wǎng)站程序代碼)

服務(wù)器就是運(yùn)行網(wǎng)站程序代碼的“容器”,比如你網(wǎng)站是php開發(fā)的,那么你可以選擇Apache服務(wù)器,如果是Java開發(fā)的可以選擇tomcat,如果是asp.net開發(fā)的可以使用iis服務(wù)器。服務(wù)器需要安裝在電腦上,其實(shí)你在開發(fā)過程中就是安裝有服務(wù)器的,初學(xué)網(wǎng)站開發(fā)的時(shí)候環(huán)境搭建那一步就是安裝服務(wù)器相關(guān)。

主機(jī)(看做一臺(tái)電腦,一臺(tái)可以外網(wǎng)訪問的電腦,稱為服務(wù)器主機(jī))

主機(jī)其實(shí)你就可以看成是一臺(tái)電腦,一臺(tái)具有公網(wǎng)IP地址的電腦,你需要把能運(yùn)行你網(wǎng)站程序的服務(wù)器安裝在這臺(tái)電腦上,安裝成功后啟動(dòng)服務(wù)器,照理說這時(shí)候你的網(wǎng)站其實(shí)已經(jīng)可以外網(wǎng)訪問了,就是整個(gè)互聯(lián)網(wǎng)皆可以訪問到了。但是由于各種原因,需要域名,需要把域名解析到你的這臺(tái)電腦的IP地址,然后通過域名訪問你的這臺(tái)電腦的服務(wù)器。

如果沒有公網(wǎng)ip地址,可以使用花生殼買一個(gè)6元的內(nèi)網(wǎng)穿透,就有公網(wǎng)了。

域名(用于瀏覽器訪問你的網(wǎng)站)

域名其實(shí)就是一個(gè)方便記憶的名稱,如:www.jufanshare.com。

    部署網(wǎng)站需要注意事項(xiàng)

端口開放

如果你一切就緒,訪問瀏覽器地址發(fā)現(xiàn)訪問不到你的網(wǎng)站,那么有可能是你的服務(wù)器所在主機(jī)沒有開啟對(duì)應(yīng)端口,如果服務(wù)器主機(jī)是Windows Server系統(tǒng)需要配置的叫入站規(guī)則和出站規(guī)則,也就是說允許外網(wǎng)訪問你這臺(tái)電腦的這個(gè)端口,比如瀏覽器默認(rèn)訪問的80端口。

網(wǎng)站備案

我國所有網(wǎng)址都需要到到中國工信部備案(現(xiàn)在由各個(gè)服務(wù)器供應(yīng)商提供備案服務(wù),但你需要提供各種資料),如果沒有備案的網(wǎng)站外網(wǎng)是無法訪問的,有的可以訪問,主要看服務(wù)器服務(wù)商。

    部署網(wǎng)站最后說明

不要被服務(wù)器這些概念給搞暈了,其實(shí)就是相當(dāng)于把你的本地開發(fā)環(huán)境(不包括編輯器)在購買的服務(wù)器主機(jī)上配置一遍。然后再打開對(duì)應(yīng)的端口。就這么簡(jiǎn)單!比如你是Java開發(fā)的網(wǎng)站,那么你需要再服務(wù)器上安裝jdk、jre吧,然后安裝個(gè)tomcat吧,其實(shí)并不難,難在你沒有接觸過,難在你沒有去試過,如果你不去親自試一試,我相信你就是看完這篇文章也是不知道如何部署網(wǎng)站。