合理使用nginxhash策略做更有意義的負載均衡

2021-07-24 11:55:29 字數 1515 閱讀 3851

目前,許多的web應用,或者web介面,都會在伺服器的入口處,使用乙個伺服器容器來監聽埠,然後進行請求**,例如nginx apache等。

伺服器容器對應整個web服務有著至關重要的作用,包括:可以很好的管理服務程序,進行**,對請求的預處理,以及負載均衡。

今天要討論的重點為在伺服器集群中,合理使用nginx的hash策略做更有意義的負載均衡。

當我們的服務是由一台伺服器支撐時,就絲毫不存在負載均衡的概念。只有當服務由多台伺服器(也就是伺服器集群)支撐時,才會使用到負載均衡。

負載均衡顧名思義,是一種策略,用於防止一台伺服器過載,而其他伺服器閒置情況發生的策略。通過該策略可以使得提供相同服務的伺服器負載基本相同。說得直白一點,就是當客戶端發起乙個請求之後,負載均衡會通過預先設定好的策略將該請求**給上游的一台伺服器進行處理。

如圖所示:

負載均衡是乙個很成熟的技術,其中對後端伺服器進行輪詢;通過客戶端請求ip進行hash;對後端伺服器指定權重等,是較為常見的負載均衡策略。這裡不再贅述。

對服務盲目的採用負載均衡策略,是不太合理的。負載均衡預設情況下是輪詢策略,這在一些場景下並不高效。

今天講解的重點是,兩種常見的負載均衡hash策略,以及對應的使用場景。

1、ip_hash(通過客戶端請求ip進行hash,再通過hash值選擇後端server):

當你服務端的乙個特定url路徑會被同乙個使用者連續訪問時,如果負載均衡策略還是輪詢的話,那該使用者的多次訪問會被打到各台伺服器上,這顯然並不高效(會建立多次http鏈結等問題)。甚至考慮一種極端情況,使用者需要分片上傳檔案到伺服器下,然後再由伺服器將分片合併,這時如果使用者的請求到達了不同的伺服器,那麼分片將儲存於不同的伺服器目錄中,導致無法將分片合併。所以,此類場景可以考慮採用nginx提供的ip_hash策略。既能滿足每個使用者請求到同一臺伺服器,又能滿足不同使用者之間負載均衡。

配置**如下:

upstream backend

server

}

上述是乙個極簡的監聽8081埠的的nginx服務,其中當請求url 為/upload/upload時,會走ip_hash策略; upstream是nginx的負載均衡模組,此處,配置了策略為ip_hash,參與負載均衡的機器有四台,其中後兩台末尾新增了down關鍵字,表示下線的意思。

2、url_hash(通過請求url進行hash,再通過hash值選擇後端server):

配置**如下:

upstream somestream 

server

}

上述同樣也是乙個極簡的監聽8081埠的nginx服務,當請求url為/get時,會走url_hash;同樣配置了upstream模組,hash $request_uri表明了是按照url規則進行hash策略。

以上就是本文要介紹的全部內容,本文側重講解了ip_hash和url_hash的使用場景和基本配置,另外,在進行nginx server 配置時,可以靈活一些,不同的location採用不同的策略,可以使得服務策略更加的合理。希望此文能為各位帶來些許幫助。

合理使用索引

索引是資料庫中重要的資料結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用ibm最先提出的isam索引結構。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引。在頻繁進行排序或分組 即進行group b...

合理使用快取

乙個優秀的專案,其中必然使用到了快取機制 乙個 遇到效能瓶頸是,第乙個解決方案一般是使用快取,快取的應用面特別廣,無論是客戶端,還是應用伺服器,或是儲存伺服器。快取一般存放讀寫比價頻繁,變化較少的資料,應用程式讀取資料時先從快取中讀取資料,獲取不到再訪問資料庫,再放到快取中,以便於下次快速獲取。快取...

合理使用Blob Clob

用了十多年的資料庫,工作需要也經常要幫忙資料庫效能調優。這裡簡單列一些我平時工作時用資料庫的體會和心得 介紹 雖然資料庫原生支援blob 二進位製大物件 和clob 字串大物件 但是從效能的考慮,我們把這些內容放在資料庫裡面不合適的。比如說我有1個100多m的 blob 或者說我有一大段文字 clo...