15分鐘從零開始搭建支持10w+用戶的生產環境(三)
上一篇文章介紹了這個架構中,選擇MongoDB做為數據庫的原因,及相關的安裝操作。
三、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官網://linuxdot.net
Jexus完整實現了我們對於WebServer的全部期望:
- 正向代理
- 反向代理
- 負載均衡
- 緩存
同時,實測生產環境的應用,響應效率超過Nginx。
Jexus不僅可以運行在各種版本的Linux下,還可以運行在ARM架構下。國內主流的國產機型,可以完全適用。換句話說,Jexus可以滿足國產化的要求。
下面看看Jexus的下載和安裝:
可以從官網上直接下載。
另外,貼心的宇大,給了一個更簡單的安裝腳本:
curl //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
一個簡單的命令,服務就啟動了。
檢查網站是否正常運行,可以在瀏覽器中打開//your_server_ip/info
或//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/ //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 如果你想及時得到個人文章以及內容的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號)。 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 |