1. 程式人生 > >15分鐘從零開始搭建支援10w+使用者的生產環境(三)

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/infohttp://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

一般應用時,我們需要關注以下幾個引數:

  1. port,應用的埠號
  2. root,應用的根目錄。應用可以放在任何目錄,在設定裡指向這個目錄就成
  3. hosts,應用繫結的域名
  4. AppHost,專用於Dotnet core的指向,指向到core應用的SelfHost
  5. reproxy,用於負載均衡模式時,指向實際伺服器
  6. UseHttps,決定是否使用https。如果設為true,則下面ssl.certificate和ssl.certificatekey用於設定證書

詳細的配置說明,可以參見目錄中readme.cn.txt。

看看,WebServer也因為Jexus而變得超級簡單。

至此,我們完成了整個架構中主體部分的安裝和有效性測試。

四、擴充套件和延伸

在一個小應用的情況下, 可以直接按上文的內容,做一個簡單的架構。

而在應用擴充套件時,可以依次擴充套件WebServer和資料庫,以達到應用容量的延伸。

  1. 擴充套件Jexus

依託Jexus的反代特性,把Jexus擴充套件到多個伺服器,並用一個Jexus做負載均衡,就完成了WebServer的擴充套件。

  1. 擴充套件資料庫

依託MongoDB的特性,把MongoDB擴充套件到叢集,即可支援海量的資料和毫秒級的響應。

通過這樣簡單的擴充套件配置,這個架構很容易就可以擴充套件到可以支援千萬級使用者的應用。

下一篇文章,我會用一個專案來實踐這個架構。敬請期待

(未完待續)

 


 

微信公眾賬號:老王Plus

如果你想及時得到個人文章以及內容的訊息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號)。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。