15分鐘從零開始搭建支援10w+使用者的生產環境(三)
上一篇文章介紹了這個架構中,選擇MongoDB做為資料庫的原因,及相關的安裝操作。
原文地址:15分鐘從零開始搭建支援10w+使用者的生產環境(二)
三、WebServer
在SOA和gRPC大行其道的今天,WebServer在系統中屬於重中之重,是一個系統的發動機。
在第一篇文章中我們說過,伺服器需要用Linux。
傳送門:15分鐘從零開始搭建支援10w+使用者的生產環境(一)
Java在Linux上,一向做得很好。Apache的安裝除錯,在網上隨便找。再不濟,還有各種大牛的一鍵安裝,夠了。
但是,今天我不說Java,而要說說Microsoft,說說Dotnet Framework和Dotnet core。
很多人想到Dotnet,就會想到IIS,想到這東西需要跑到Windows上。但實際上,這已經是一個很老很過時的概念了。
Dotnet Framework和Dotnet core,幾年前就可以在Linux上開發、除錯和應用了。
只不過,兩個框架在應用上稍有區別。
Framework需要Mono框架的支援,是Windows下編譯的DLL,通過Mono框架在LInux下執行。
而Dotnet core,從第一天就是為跨平臺而生的。一套程式碼,可以跑在Windows、Linux、MacOS、Arm下,不需要任何額外的設定。
Nginx可以支援Dotnet在Linux上執行。不過那個安裝過程之複雜,是會讓高手都眼暈的。
Dotnet core本身有SelfHost功能,可以直接執行。但是,對於複雜一點的系統,會有多個API應用,因為做不到統一管理,後續操作又會麻煩。
今天我們介紹一個神器,叫Jexus。
Jexus是國內大神「宇內流雲」的作品,本身並不開源,但可以免費使用。
Jexus官網:https://linuxdot.net
Jexus完整實現了我們對於WebServer的全部期望:
- 正向代理
- 反向代理
- 負載均衡
- 快取
同時,實測生產環境的應用,響應效率超過Nginx。
Jexus不僅可以執行在各種版本的Linux下,還可以執行在ARM架構下。國內主流的國產機型,可以完全適用。換句話說,Jexus可以滿足國產化的要求。
下面看看Jexus的下載和安裝:
可以從官網上直接下載。
另外,貼心的宇大,給了一個更簡單的安裝指令碼:
curl https://jexus.org/release/x64/install.sh | sh
指令碼會自動從官網下載最新的Jexus,並安裝到/usr/jexus。
指令碼執行完成後,安裝Jexus就完成了。
我們看一下目錄:
$ ls /usr/jexus -l
-rw-r--r-- 1 root root 1015 Jan 1 03:30 def.py
-rwxr-xr-x 1 root root 2691 Jan 1 03:30 jws
-rw-r--r-- 1 root root 37 Jan 1 03:30 JwsAspd.exe
-rwxr-xr-x 1 root root 334928 Mar 16 09:39 JwsAspd.exe.so
-rw-r--r-- 1 root root 688 Jan 30 01:13 jws.conf
-rwxr-xr-x 1 root root 515848 Mar 16 09:39 jwsHttpd.exe.so
-rwxr-xr-x 1 root root 122560 Mar 16 09:39 jwsLog.exe.so
-rwxr-xr-x 1 root root 4861920 Apr 15 15:14 jwss
drwxr-xr-x 2 root root 4096 Apr 15 15:15 log
-rw-r--r-- 1 root root 3810 Jan 1 03:30 mime.conf
-rwxr-xr-x 1 root root 79 Jan 1 03:30 mozroots
-rw-r--r-- 1 root root 211 Apr 27 08:45 os.def
-rw-r--r-- 1 root root 21273 Jan 1 03:30 readme.cn.txt
drwxr-xr-x 5 root root 4096 Jan 1 03:30 runtime
drwxr-xr-x 2 root root 4096 Feb 18 15:13 siteconf
-rw-r--r-- 1 root root 753 Jan 1 03:30 state4.conf
-rw-r--r-- 1 root root 3 Apr 27 08:45 state.pid
這個目錄中:
jws 主控程式,網站的啟動/停止/重啟全靠它
Jws.config 針對作業系統級別的主控程式設定
mime.conf 預定義的mime。絕大多數mime已經定義好了。如果需要,可以直接追加
siteconf 網站應用定義目錄。所有的網站應用設定都在這個目錄裡
log 網站日誌目錄。各個網站執行的日誌都在這裡
我們試著啟動一下Jexus:
./jws start
一個簡單的命令,服務就啟動了。
檢查網站是否正常執行,可以在瀏覽器中開啟http://your_server_ip/info
或http://your_domain/info
,如果看到下面的網站,就說明網站正常啟動了。
釋出應用時,每個應用有一個獨立的配置檔案。
$ cat /usr/jexus/siteconf/default
######################
# Web Site: Default
########################################
port=80
root=/ /var/www/default
hosts=* #OR your.com,*.your.com
# User=www-data
# AspNet.Workers=2 # Set the number of asp.net worker processes. Defauit is 1.
# addr=0.0.0.0
# CheckQuery=false
NoLog=true
# AppHost={cmd=dotnet /usr/local/x/app.dll; root=/usr/local/x; port=5000}
# NoFile=/index.aspx
# Keep_Alive=false
# UseGZIP=false
# UseHttps=true
# ssl.certificate=/x/xxx.crt #or pem
# ssl.certificatekey=/x/xxx.key
# ssl.protocol=TLSv1.0 TLSv1.1 TLSv1.2
# ssl.ciphers=ECDHE-RSA-AES256-GCM-SHA384:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE
# DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
# AllowFrom=192.168.*.*
# DenyDirs=~/cgi, ~/upfiles
# indexes=myindex.aspx
# Deny asp ...
rewrite=^/.+?\.(asp|cgi|pl|sh|bash|dll)(\?.*|)$ /.deny->$1
rewrite=.*/editor/.+ /.deny->editor
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com 301
# ResponseHandler.Add=myKey:myValue
ResponseHandler.Add=X-Frame-Options:SAMEORIGIN
# Jexus php fastcgi address is '/var/run/jexus/phpsvr'
#######################################################
# fastcgi.add=php|socket:/var/run/jexus/phpsvr
# php-fpm listen address is '127.0.0.1:9000'
############################################
# fastcgi.add=php|tcp:127.0.0.1:9000
一般應用時,我們需要關注以下幾個引數:
- port,應用的埠號
- root,應用的根目錄。應用可以放在任何目錄,在設定裡指向這個目錄就成
- hosts,應用繫結的域名
- AppHost,專用於Dotnet core的指向,指向到core應用的SelfHost
- reproxy,用於負載均衡模式時,指向實際伺服器
- UseHttps,決定是否使用https。如果設為true,則下面ssl.certificate和ssl.certificatekey用於設定證書
詳細的配置說明,可以參見目錄中readme.cn.txt。
看看,WebServer也因為Jexus而變得超級簡單。
至此,我們完成了整個架構中主體部分的安裝和有效性測試。
四、擴充套件和延伸
在一個小應用的情況下, 可以直接按上文的內容,做一個簡單的架構。
而在應用擴充套件時,可以依次擴充套件WebServer和資料庫,以達到應用容量的延伸。
- 擴充套件Jexus
依託Jexus的反代特性,把Jexus擴充套件到多個伺服器,並用一個Jexus做負載均衡,就完成了WebServer的擴充套件。
- 擴充套件資料庫
依託MongoDB的特性,把MongoDB擴充套件到叢集,即可支援海量的資料和毫秒級的響應。
通過這樣簡單的擴充套件配置,這個架構很容易就可以擴充套件到可以支援千萬級使用者的應用。
下一篇文章,我會用一個專案來實踐這個架構。敬請期待
(未完待續)
![]() |
微信公眾賬號:老王Plus 如果你想及時得到個人文章以及內容的訊息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號)。 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。 |