Linux.NET學習手記(2)

來源:互聯網
上載者:User

上一回合,我們討論學習了如何在Linux環境中搭建能夠供.NET啟動並執行環境,不知道各位讀者是否已經完成了環境的搭建?不過,無論各位讀者是採用我們上回合介紹的方法還是採用網上提供的其他方法搭建Linux.NET環境,選擇哪個發行版的Linux,採用了那個版本的mono,都有一點非常重要的,就是:必須保證.NET能夠在這上面正常的運行,換句話說就是要確保搭建的環境能夠正常工作。所謂“三軍未動糧草先行”,今後所有關於Linux.NET學習實驗都是基於該環境進行的,如果連這個環境沒辦法正常的運作,那我們今後Linux.NET的學習與實驗將會變得困難重重,甚至是無法進行下去。

好了,言歸正傳,當我們做好一個網站想要發布的時候,一般來說,我們都會把網站掛到伺服器中,然後設定好伺服器的公網IP、子網路遮罩、資料庫的串連字串等相關參數,處於外網的使用者就可以通過在瀏覽器地址欄中輸入欄位名(如果有)或者直接輸入IP地址的方式訪問到我們的網站。而在這一連串發生的事件中,伺服器軟體充當了一個重要的角色,如果伺服器軟體無法正常的工作,處於外網的使用者基本上是無法再通過瀏覽器的方式來訪問你的網站的。

嗯,聰明的讀者一定猜到了本回合要討論學習的內容,對了,本回合我們討論學習的內容就是:伺服器軟體Jexus。

由於Jexus需要討論學習的知識比較多,為此我會把Jexus分開兩個回合來講解,分別是這個回合對於Jexus的一些概念性和基礎配置的講解,以及下一回合Jexus網站配置進階功能的示範與講解。

本回合我們一起討論學習的內容:

  (1)、對Jexus的概念性理解:什麼是Jexus

  (2)、對上回合搭建環境時所遺留的問題進行辨析:為什麼要選擇Jexus

  (3)、Jexus的基本操作

  (4)、Jexus的整體配置

  (5)、介紹並使用Jexus的進程守護工具jws.guard

 1、什麼是Jexus

“孔子門徒三千,成名七十二”,世界上存在著各種各樣不同類型的伺服器軟體,當然也包括你當時寫來玩玩沒有發布的那款,而在這眾多的軟體中,比較著名的有:IIS、Apache、Nginx、LIgHttpd等。而Jexus作為這眾多伺服器軟體的其中一員,現在的排名應該就是這三千名中的第七十三名,也就是還沒“成名”的那一位。

的確,Jexus並沒有出身在貴族之中,它沒有像IIS一樣擁有一個有錢有勢有技術的托拉斯父親幫它修飾與推廣,也沒有像Apache伺服器軟體一樣成為“Apache基金會”的頂級項目被世界所認知,同樣也沒有像LigHttpd一樣擁有高貴的普魯士血種成為大家的新寵。百度百科中對於Jexus的介紹也只有僅僅的那麼幾行,(至寫本文章為止)維基百科中直接就找不到Jexus的存在,很多讀者對於Jexus還是比較陌生的,對於Jexus的認知或許也僅僅是“這東西可以在Linux中跑.NET”,甚至直接就不知道有這麼一款軟體存在。

孔子的弟子中,雖然只有七十二名的弟子被成為賢人,但是,誰又能說第一百七十二名就不是賢人呢?第七百二十名弟子就不優秀呢?在這剩下的兩千多人中,其中也有很多弟子是很優秀的,只不過由於種種的原因而沒有被其他人稱作“賢人而已”。最近這兩天,我跟群主(Jexus的作者)聊了不少東西,諮詢了不少關於Jexus的情況,同時也感謝作者對我的一些ASP.NET的知識進行科普和掃盲,通過對Jexus的討論,我體會到Jexus確實是一款優秀但卻沒太高名氣的伺服器軟體,也就是那一位“優秀而沒有成名的弟子”。

用一句話介紹Jexus:Jexus是一款國產的基於.NET環境的有條件開源的免費的Web伺服器軟體,目前支援的平台有:Linux、FreeBSD和龍芯(舊版的海支援Windows),由作者(宇內流雲)一人獨力開發並長期維護,官方的論壇為:Linux DotNet 大本營。

我們在看看Jexus有那些功能特點(摘抄自Jexus說明書)

  (1)、高效能的ASP.NET處理能力。這是Jexus的核心功能。不管是穩定性、易用性還是並發承載能力、平行處理速度,Jexus對ASP.NET的支援都是非常優秀的;
  (2)、支援Fast-CGI。通Fast-CGI,Jexus能支援包括PHP在內的所有擁有Fast-CGI服務功能的WEB應用;
  (3)、具備基於Regex的強大的URL重寫功能;
  (4)、具有強勁的反向 Proxy功能。支援多目標負載平衡,支援以磁碟為基礎的網站與遠程網站無縫整合;
  (5)、擁有強大的流媒體支援能力,支援FLV/F4V視頻檔案拖動播放,支援微軟平滑流媒體技術;
  (6)、支援“伺服器推送”技術,配備了相應的伺服器端、用戶端開發介面,是開發現代WEB應用的利器;(注意,此功能在5.3版中已經除去,待到HTML5成熟並且大多數瀏覽器支援之後才重新推出)
  (7)、具備可控的“ASP.NET前置緩衝”,能最大限度地提高ASP.NET網站的承載能力和響應速度;
  (8)、支援Https,具有SSL加密資料安全傳輸能力;
  (9)、具有基礎而實用的入侵檢測功能,能自動終止已被識別的非法請求;
  (10)、安裝部署非常簡便,操作使用極為簡單。

Jexus凝聚了作者的智慧和心血,針對當前Linux.NET伺服器軟體的不足實行有針對性的開發,因此是為.NET量身定做的一款伺服器軟體,再加上它所擁有的豐富的功能,確實是一款不錯的軟體。

 

2、為什麼選擇Jexus

上回合,我們部署mono時,我們選擇了Jexus作為伺服器軟體,同時也遺留了一個值得我們討論的問題:為什麼我們選擇Jexus作為伺服器軟體而不是其他?下面我將會 通過兩個主要方面的比較來推演出我們選擇Jexus的原因:

(1)、Windows 與 Linux 伺服器軟體的對比

在上一回合的文章中,我閱讀了所有讀者給我的留言,其中有不少留言比較有趣的,當中有那麼一則留言:“.NET在Linux中跑效率和穩定性要比在Windows Server 2003 中要好”,這時我就納悶了.NET在WinServ03中還跑不過Linux?在自家做的環境中還比不上他人做的?此外,我也在Jexus的作者中得出那麼一則訊息:“在相同的實體環境中,IIS 6.0 跑不過 Jexus 4.X”。

  

 

    

上面的兩幅圖片是作者提供的關於IIS6.0 與 Jexus 4.3的簡單效能測試,明顯的看出Jexus 4.3的負載能力要比IIS 6 要強。當然,對於這片面的簡單測試是遠遠不足以判定Jexus就比IIS效能強悍的,這需要通過更多更嚴格的系統性的測試,而且還要通過長期的實際使用才能對它們之間的效能對比作出判定。

同時,我這裡還要重申一點:“IIS 絕對是一款效能優異的伺服器軟體”,至於為什麼會出現IIS跑不過Jexus的這種情況(這裡的討論僅限於圖中的這兩個版本的對比,對於新版的IIS與Jexus,這裡不作討論),我想其中的原因更大是由於運作的平台中的不同。

IIS運行在Windows中,而Jexus則運行在Linux中,他們運行在不同的平台中,通過對比平台的差異,或許能夠更容易的得出它們的差異。IIS6.0的效能低下(相對於Jexus4.3)很大程度上是由於Windows系統的拖累,為什麼這麼說?各位讀者如果有興趣的話可以右鍵點擊電腦(我的電腦),然後開啟它的服務列表,看看那龐大的列表中共有多少個服務,又有多少個服務是正在啟動並執行(我剛剛自己手數了一下自己的電腦,共有178個服務,運行中的有92個,這裡是普通系統,Server版本的當然沒有這麼多)。

在這眾多的服務當中,各位讀者能夠認得多少個呢?又是否能夠清楚的說出每一個服務是幹嘛用的呢?我相信各位讀者應該沒有認得出多少個,在這眾多正在運行中的服務,很多都是為Windows系統提供一些體驗性的功能,我們即使關閉了也對系統的影響不大,這些服務雖然可有可無,但是在我們安裝系統的時候卻會自動的給我們裝上,並且預設的開機運行,運行就意味著系統需要從CPU消耗計算能力,需要從記憶體中劃分出空間,這都是會浪費我們伺服器的資源的。相反的,我們再看看Linux,在安裝系統的時候就可以定製軟體包,定製服務,我們可以選擇迷你安裝,也可以只安裝我們需要的服務,對於我們不需要的服務,我們可以完全的無視之。還記得一位做伺服器管理的老師曾經說過:“對於啟動並執行伺服器,我們希望越輕越好,提供的服務越單一越好,開啟的服務越少越不容易出錯”。我們回過頭來看Windows,不免會覺得:“Windows,你太重了”。

此外還有一點更重要,對Windows效能影響更大的,那就是Windows的圖形介面。圖形的處理會消耗大量的系統資源,而Windows在維持它的系統介面過程中就需要浪費伺服器中大量的寶貴資源。我一直有這麼一個觀點:“Linux是不應該存在圖形介面的”,同樣,Server版的作業系統也不應該存在圖形介面,正規的伺服器是要被關在機房的,圖形介面做得再好,畫面再好看也不會有人去欣賞,儘管WinServ03的介面一點都不美觀,但是醜歸醜,維持這個介面還是要消耗大量的系統資源,安裝CentOS6.4時記憶體如果沒有1G,那圖形的安裝介面還起不了來,可見圖形介面需要消耗多少的資源。同時,如果你是通過遠程登陸到機房的伺服器進行管理,網路問題同樣會成為圖形介面推送的一個瓶頸問題。

就這樣,過多的服務,加上萬惡的圖形介面,伺服器在真正投入生產之前已經浪費了一筆珍貴的系統資源,相同物理配置的伺服器,看似配置相同的環境,實際能夠提供給伺服器軟體支配的系統資源卻不同,IIS 6.0跑不過 Jexus 4.3也不足為奇了。

 (2)、同是Linux中.NET伺服器軟體的比較

同時Linux中,運行環境才是真正的相同,這個比Windows/Linux更有可比性。Linux中搭建.NEt環境除了mono+Jexus之外還有一種方式,那就是mono+XSP。XSP是一款.NET的解析容器,它能夠對.NET程式進行解析並維持高效的運行,但是它卻有一個缺點,就是對於靜態資源的處理能力相當有限,而一個網站中,大部分都是圖片、CSS、JS等靜態檔案,真正動態產生的東西並不多,在這種情況下XSP就會暴露出它的軟肋,面對這種情況,XSP一般都會整合一個高效的伺服器軟體進行彌補它的不足。類似於Tomcat+Apache的這種情況。這就衍生出了:網上提供的搭建Linux.NET的另外一種方式Linux+Apache(Nginx)+mono這種方式,它們在Apache(Nginx)和mono之間都會有一個外掛程式,原理實際上就跟XSP一樣。

這裡推薦一篇文章:《為什麼說Jexus更適合打造基於Linux/Unix系統的企業級 ASP.NET平台》,該文章是Jexus的作者寫的,裡面有比較詳細的對比了Linux採用Jexus的好處。閱讀完這篇文章之後,相信讀者也會明白為什麼上回合搭建環境的時候直接選擇了Jexus。

最求更穩定,效能更優秀,效率更高,這就是我們選擇Jexus的原因。

 

3、Jexus的操作

經過兩個章節關於Jexus的介紹,相信讀者對於Jexus已經有了一個概念上的認識,從這個章節開始,接下來我們會對Jexus的使用進行實操,並通過操作Jexus時產生的現象進行討論,從而進一步的瞭解並學會使用Jexus。

Linux軟體包有一個做得非常好的地方,那就是對於這款軟體的使用手冊、協助文檔往往都會存在軟體本身之中,像“有問題問男人”(man命令)、“--help”等命令都能夠提供快速的使用方法查閱,同樣,關於Jexus的使用方法我們也可以通過Jexus軟體包中的“readme”查閱得到。

我們先看一下Jexus目錄中有些什麼東西:

裡面也沒有什麼東西,包括四個檔案夾(藍色那種),六個指令檔(綠色那種)和一些的其他檔案(白色那種)。在這個章節裡,我們介紹的是Jexus的操作,實際上就是對於Jexus指令碼的操作和介紹。

Jexus提供了六個操作指令碼(針對5.3之前的版本,5.3版本已把所有jws腳步融合到jws中,使用方法為./jws 參數),他們的名稱和功能分別是:

  jws.start: 啟動Jexus;(如果需要開機自啟動的,可以把指令碼的全路徑[包括腳步本身]添加到/etc/rc.local中;5.3中已改為:jws start)
  jws.restart: 重啟Jexus,如果命令後邊加網站名作為參數,那麼就表示啟動或重啟指定的網站;(5.3中已改為:jws restart)
  jws.stop: 停止Jexus,如果命令後邊加網站名作為參數,那麼就表示停止指定的網站;(5.3中已改為:jws stop)
  jws.regsvr: 註冊jexus所需要的全域程式集(本命令只在安裝或更新jexus後才用,而且必須用;5.3中已改為:jws regsvr)。
  state.start: 啟動Jexus提供的ASP.NET狀態服務;(該指令碼在Jesux 5.3 中已經除去,Jexus預設開啟)
  state.stop: 停止Jexus提供的ASP.NET狀態服務;(該指令碼在Jesux 5.3 中已經除去,Jexus預設開啟)

  此外,5.3中還增加以下功能:

    jws status:檢查Jexus的運行狀態

    jws -V:查看Jexus的版本                

操作方法跟運行普通指令碼一樣./XXX,沒有多少技術含量。這裡值得注意的是,這些腳步檔案的擁有者應該保證是root使用者,並且有啟動並執行許可權。

 

4、Jexus的配置

Jexus的配置分為兩個方面,一個是Jexus整體的配置(jws.conf),另外則是網站獨立的配置(預設所有的網站設定檔都在siteconf檔案夾中)。網站的獨立配置可以調用很多Jexus的進階功能,我們把它當到下一回合再進行學習討論,本章中我們主要進行Jexus的整站配置。我們用vi開啟jws.conf看看裡面有些什麼設定項:

在這裡,我解析一下每個選項的作用和注意事項:

(1)、SiteLogDir:這個設定項必須得存在並且開啟,該設定項設定Jexus的作業記錄記錄、各網站啟動並執行日誌記錄都會存放到該檔案夾中。此外,當記錄的記錄檔大小達到一定程度的時候,Jexus會自動的把日誌寫到一個新的記錄檔中,不會一直通過追加寫的方式把所有的日誌記錄都寫到同一檔案中。

(2)、SiteConfigDir:這也是一個必須存在並且開啟的設定項,這個設定項設定Jexus中各網站配置的存放地點,Jexus中預設的網站配置之所以存放在siteconf就是因為這裡預設的值就為siteconf。此外值得注意的是,存放在該設定檔夾中的檔案只能是網站的設定檔,其他任何的檔案都不能存到到該目錄(包括網站設定檔本身的備份檔案),因為Linux系統所有的事物都是以檔案的方式作為儲存,因此無論你採用什麼樣的尾碼,在Linux系統中都只當作普通檔案來對待。

(3)、Runtime:該設定項用於配置Runtime的版本,除非有特殊需求需要改動Runtime的版本,一般情況下無需修改。

再來看一下一些進階點的設定項,這些設定項都是預設關閉的,

(4)、LLVM:是否開啟LLVM編譯器功能。開啟LLVM可以把中繼語言的編譯交給LLVM編譯器,這可以加快編譯的速度,編譯出來的代碼效能或許會更優秀一些。不過值得注意的地方:並不是所有的Linux都帶有LLVM編譯器,並且mono內建的編譯器編譯效率和編譯產生的程式碼效能上也不差什麼,因此如果沒有特殊的需要,這一項可以讓他保持預設關閉。

(5)、httpd.processes:Jexus中預設的背景工作處理序為1個,單個進程最大的並發數固定為1萬個,通過開啟多個背景工作處理序可以提高Jexus處理並發的能力,開啟多個進程的方式非常簡單,只要修改httpd.processes的值並重啟Jexus即可。不過這裡有幾點需要注意的地方:[1]Jexus最大支援的背景工作處理序為4個,因此這裡最大隻能填寫4;[2]如果開啟了多個Jexus的背景工作處理序,請注意網站的Session的儲存方式,請通過修改網站config檔案來修改Session的儲存方式,避免採用進程的方式儲存Session,否則將會造成Session的不同步,給網站的運作造成不必要的麻煩,Session的儲存可以藉助第三方的方式來儲存(比如資料庫,或者Jexus提供的強大的ASP.NET服務狀態儲存);[3]Jexus背景工作處理序的設定跟伺服器的CPU核心數和記憶體數有關,如果你的Cpu只有一個核,而你配置開啟了兩個進程,也只能達到一個容錯的效果,能夠承載的並發數是不會上去的。詳細可以參考文章《讓Jexus支援高並發請求的最佳化技巧》。

(6)、httpd.user:不知道各位讀者用過Apache沒有,在Apache中的httpd.conf有這麼一項設定user=XXX:可以把Apache以某個使用者的方式啟動,相應的該使用者的所擁有的操作許可權都會賦給Apache進程。同樣,httpd.user的作用也是跟Apache中的user是一樣的,只要把一個已有的使用者的使用者名稱填寫到httpd.user中,Jexus就會擁有該使用者的操作許可權。有什麼用?嗯,舉個例子吧,如果網站的運行會產生一些新檔案的(比如做頁面靜態化),各位讀者會採用什麼辦法解決呢?chmod 777?這可以解決,但是把目錄的使用權限設定為777會存在安全性的問題,如果可以有一種解決方案:進程和某些使用者可以對該目錄進行讀寫操作,而其他使用者不能,那就可以解決安全性問題了。嗯,對的,這個時候httpd.user就派上了用場,我們只要建立一個僅能供某個使用者讀寫的目錄,並把此使用者的使用者名稱填寫到httpd.user中,就可以實現我們想要的功能了。

(7)、php-fcgi.set:此功能是用於讓Jexus支援PHP,由於這裡與.NET關係不大,這裡就不做過多的介紹了,需要瞭解的讀者可以參照這篇文章:《讓Jexus V5.1支援PHP的操作步驟》。

(8)、CertificateFile 與 CertificateKeyFile:這個是讓Jexus支援SSL的配置項,是用方法可以參照文章:《Linux+Apache安裝組建組態SSL認證》和《如何讓jexus 支援ssl》

在這八大Jexus的網站配置中,有一個終極的注意事項:每次配置後記得重啟Jexus,否則剛才的配置是不會生效的!!!

 

5、Jexus進程守護工具jws.guard

一個運行中的進程,難免會因為各種各樣的原因無緣無故的宕掉(比如網站瞬間的負載過高、記憶體不足等),而Jexus宕掉的後果往往只有一個:對外提供服務的網站無法訪問了。因此,我們需要最大限度的保障我們的網站能夠提供7*24小時的不間斷訪問,而一個網站或者一個進程宕掉的過程是瞬間的,也許前一秒還訪問得好好的,下一秒就突然間報個404的錯誤,而從網站或進程掛掉到我們人工的發現並重啟服務的過程是漫長的,除非該網站有應對單點故障的解決方案,否則在這漫長的時間之中,網站都處於一個無法訪問的黑色時期。如果這個宕掉的網站是一個企業網站,這會造成企業信譽度的下降;如果是一個商城網站,這會造成經濟和人氣的損失;因此,我們需要讓系統能夠自動的檢測出網站的運行狀態,當出現進程服務死機的時候能夠自動重啟。

jws.guard的是一個python的指令碼,工作原理也比較簡單:根據設定好的預設值,每隔十秒鐘訪問一次訪問一次指定的連接埠與檔案,當三十秒內出現無法網站時就執行jws.restart進行重啟網站。這裡的三十秒指的是累計連續三次無法訪問,防止因為檢測時因為Jexus正忙而誤判斷重啟,對網站進行誤傷。

jws.guard的使用方法也比較簡單,只要把 “tools/jws_guard” 目錄中的 “guard.py” 和 “jws.guard” 兩個指令檔拷貝到Jexus的工作目錄(跟jws.start同一目錄),然後配置一下jws.guard 中的預設值即可。

我們首先把這兩個檔案拷貝出去

cd /usr/local/jexus/tools/jws_guard/

cp jws.guard guard.py /usr/local/jexus/

cd /usr/local/jexus/

我們已經把這兩個指令碼拷貝到工作目錄中。

 

用vi開啟並編輯jws.guard

把host、port、path改為我們需要的配置即可,它們分別代表主機地址,連接埠,檢查的路徑。一般情況下,如果Jexus採用80連接埠,這裡可以不作修改直接使用,而如果Jexus採用的不是80連接埠,也只需要修改port,改為正確的連接埠並儲存退出就可以了。host和path一般是不需要修改的,同時也不建議非必要的修改,因為修改jws.guard必須確保修改後修改的配置項是正確的,否則jws.guard就會因為無法訪問配置後的網站而反覆的重啟Jexus,造成不必要的麻煩。

修改好了之後只需要執行./jws.guard即可啟動這款Jexus的進程守護工具。

 我們嘗試性的把Jexus關掉。

……30秒之後……

Jexus又起來了。

通過jws.guard守護守護工具,我們可以很方便的讓系統自動的發現Jexus進程宕機並快速的重啟進程。同時我們只需要查閱Jexus的作業記錄即可發現問題所在。

這裡有三點需要提醒的:

  (1)、如果需要關閉Jexus服務30秒以上的,請在關閉Jexus之前先執行./jws.guard stopg關閉jws.guard守護工具,以免守護工具自動的把Jexus又啟動了起來。

  (2)、jws.guard是使用python語言編寫的指令碼,需要運行該工具時請確保系統中已經安裝了python,檢查方式可以執行 python -V ,如果沒有出現python的版本資訊則說明系統中沒有安裝python,這是,各位讀者可以通過yum或者其他方式安裝上python之後再運行jws.guard。

  (3)、再囉嗦一次,配置jws.guard時請確保配置的值是正確的。

新版的Jexus的穩定性已經非常強,加上jws.guard可以起到加固作用。

好的,至此Jexus的守護工具jws.guard就已經介紹完畢了。

至此為止,本回合對於Jexus的基礎討論已經全部講解完畢了。希望各位讀者在閱讀完本回合的文章之後能夠對Jexus有一個基礎性的瞭解,同時,如果各位讀者有發現本回合中任何知識點的錯漏、對本文章有任何的意見或者建議、對Linux.NEt的發展有任何的見解,都歡迎留言指教。

下一回合,我們將會對Jexus的進階功能:訪問IP過濾、伺服器的快取、URL重寫等功能進行深入的講解並逐一的示範,同時,也希望沒有搭建好Linux.NET的讀者能夠把環境搭建好,因為下回合所有的示範都是基於這個環境來進行實操。好吧,我們下回再見吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.