15分鐘從零開始搭建支持10w+用戶的生產環境(三)

上一篇文章介紹了這個架構中,選擇MongoDB作爲數據庫的緣由,及相關的安裝操做。php

原文地址:15分鐘從零開始搭建支持10w+用戶的生產環境(二)html

3、WebServer

在SOA和gRPC大行其道的今天,WebServer在系統中屬於重中之重,是一個系統的發動機。linux

在第一篇文章中咱們說過,服務器須要用Linux。web

傳送門:15分鐘從零開始搭建支持10w+用戶的生產環境(一)數據庫

Java在Linux上,一貫作得很好。Apache的安裝調試,在網上隨便找。再不濟,還有各類大牛的一鍵安裝,夠了。瀏覽器

可是,今天我不說Java,而要說說Microsoft,說說Dotnet Framework和Dotnet core。緩存

不少人想到Dotnet,就會想到IIS,想到這東西須要跑到Windows上。但實際上,這已是一個很老很過期的概念了。bash

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而變得超級簡單。

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

4、擴展和延伸

在一個小應用的狀況下, 能夠直接按上文的內容,作一個簡單的架構。

而在應用擴展時,能夠依次擴展WebServer和數據庫,以達到應用容量的延伸。

  1. 擴展Jexus

依託Jexus的反代特性,把Jexus擴展到多個服務器,並用一個Jexus作負載均衡,就完成了WebServer的擴展。

  1. 擴展數據庫

依託MongoDB的特性,把MongoDB擴展到集羣,便可支持海量的數據和毫秒級的響應。

經過這樣簡單的擴展配置,這個架構很容易就能夠擴展到能夠支持千萬級用戶的應用。

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

(未完待續)

 


 

微信公衆號:老王Plus

掃描二維碼,關注我的公衆號,能夠第一時間獲得最新的我的文章和內容推送

本文版權歸做者全部,轉載請保留此聲明和原文連接

相關文章
相關標籤/搜索