回覆列表
  • 1 # CoreCode

    不看裝置不看機器,至少1w個請求同時訪問

    在專案運營時,我們都會遇到一個問題,專案需要更新時,我們可能需先暫時關閉下伺服器來更新。但這可能會出現一些狀況:

    1.使用者還在操作,被強迫終止了(我們可以看日誌等沒人操作的時候更新,但總可能會有萬一)

    2.不知道的使用者可能會想網站是不是被攻擊了,降低了對網站的信任程度,從而導致失去部分潛在客戶,這點尤其對金融網際網路公司不利。

    1.Nginx簡單介紹及開啟

    Nginx是一款輕量級兼備高效能的Http和反向代理伺服器。所謂反向代理就是指在使用者發起訪問請求,由代理伺服器接收,然後將請求轉發給正式伺服器,並且將正式伺服器處理完的資料返回給客戶端,此時代理伺服器就表現為一個伺服器。這麼做看起來多經過了一步,稍顯麻煩,但實則是好處多多,在下面的demo中我會將其體現出來。

    首先我們去Nginx官網下載個Nginx,我這是在自己電腦上,所以當然下載的是windows版本的。下載完成後直接放在某個盤中即可,不需要安裝。接下去我們開啟cmd,進入nginx的目錄下,輸入start nginx。

    我們可以看到一個視窗一閃而過,這樣nginx就已經被開啟了,我們在任務管理器中可以找到它的程序。

    2.使用Nginx實現反向代理

    現在我們搭建一個基於SpringMVC +Spring + Mybaties框架的maven專案,搭建過程不加以贅述。功能很簡單,就是能跳轉到一個頁面就行了,當然也可以使用別的框架。

    執行demo,我這tomcat埠是8080,在瀏覽器輸入localhost:8080,出現我們的頁面。

    這時我們還是直接訪問tomcat伺服器的,現在我想透過nginx訪問tomcat,即輸入localhost就能顯示我們demo的頁面。

    這就要我們去修改nginx的核心配置檔案,在其目錄下的conf資料夾下的nginx.conf檔案,那麼首先我們就要了解該檔案中一些節點的作用。

    worker_processes:工作程序個數,可配置多個

    worker_connections:單個程序最大連線數

    server:每一個server相當於一個代理伺服器

    lister:監聽埠,預設80

    server_name:當前服務的域名,可以有多個,用空格分隔(我們是本地所以是localhost)

    location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裡

    index:當沒有指定主頁時,預設會選擇這個指定的檔案,可多個,空格分隔

    proxy_pass:請求轉向自定義的伺服器列表

    upstream name{ }:伺服器叢集名稱

    下面我們對這段程式碼進行一些小小修改。就是將請求轉向我們定義的伺服器。

    隨後在cmd中輸入命令nginx -s reload即可重啟nginx。

    重啟後,我們再輸入localhost,可以看到跳轉到的頁面是我們demo的。

    至此,反向代理已完成,這樣所有請求都需經過代理伺服器才能訪問到正式伺服器,某種程度上可以保護網站安全。

    3.使用Nginx實現負載均衡

    負載均衡即是代理伺服器將接收的請求均衡的分發到各伺服器中。

    負載均衡的優勢在訪問量少或併發小的時候可能並不明顯,且不說淘寶雙11、鐵道部搶票這種級別的訪問量、高併發,就是一般網站的搶購活動時,也會給伺服器造成很大壓力,可能會造成伺服器崩潰。而負載均衡可以很明顯的減少甚至消除這種情況的出現,下面我們說說實現方法。

    首先我們再開啟一個tomcat伺服器,這裡區分一下就叫tomcat2吧,原先的叫tomcat1。將tomcat1上的專案,複製到tomcat2上,稍微修改下頁面上的文字以便等下區分我們的請求被分發到了哪個tomcat上。tomcat2埠我這裡為8081。在瀏覽器中輸入localhost:8081。

    伺服器準備好了,我們要在server外部定義個伺服器叢集,即用到了上文中提到的upstream 標籤。伺服器叢集名字取為test。

    同時我們需要再修改下server,將定向的路徑轉到問你伺服器叢集上。

    重啟下nginx,在瀏覽器輸入localhost,再多重新整理幾次,可以看到兩個頁面在來回切換。

    這樣即實現了負債均衡。假設我們伺服器在執行過程中,其中一個tomcat掛了,仍然還有另一個可以訪問。更新的時候也能先關閉只其中一個,輪流更新。另外還能有效緩解伺服器壓力,是不是很棒呢?

    當然,以上nginx的配置是簡單化的,實際上我們還可以配置nginx對靜態資源的快取等等,在此就不多加演示了。

    4.小結

    花了好些時間,總算陸陸續續要寫好了,在此小結一下。

    nginx作為一個反向代理伺服器,能快取我們專案的靜態檔案,並實現反向代理與均衡負載,可以有效減少伺服器壓力,即使專案不大,也可以使用。

    大家另外應該都還發現了個問題,雖然這樣請求能分別請求到兩個tomcat上,如果是一般不需身份校檢的或什麼認證的方法尚可,但如果出現這類情況:

    我們在tomcat1上進行了登入,這時使用者session當然是存在tomcat1上的,而這時進入個人中心的請求請求到tomcat2上了,這時就會出現問題了。tomcat2會告訴你還未登入,這顯然不是我們想看到的。

    這就涉及到session共享了,如何讓兩個伺服器上的session共用。我這裡放到下次再說,作為碼農比較忙,可能要過個好幾天。另外我將這次的demo原始碼上傳了,下次還要用,nginx配置就不傳了,大家自己多動手試驗。

  • 中秋節和大豐收的關聯?
  • 侏羅紀時代什麼恐龍殺傷力最強大?