上一篇文章介紹了這個架構中,選擇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 掃描二維碼,關注個人公衆号,可以第一時間得到最新的個人文章和内容推送 本文版權歸作者所有,轉載請保留此聲明和原文連結 |