如今,網際網路資訊不斷增加。為減小對伺服器的壓力,越來越多使用者開始採用負載均衡機制以減小對伺服器的壓力。這種做法不但能夠保證服務的可用性,還可以提升使用者體驗。本文將介紹如何透過使用 Nginx 實現對 Milvus 的負載均衡,從而提高伺服器資源的使用效率和 Milvus 的可用性。
簡介
1.1 Nginx
Nginx 是一款免費的開源、高效能 HTTP 伺服器和反向代理伺服器。Nginx 可以透過反向代理實現負載均衡的功能。該功能具備以下幾個優點:
轉發功能:Nginx 會根據使用者配置的策略將客戶端請求轉發到不同的伺服器上, 減輕單臺伺服器壓力,提高系統併發能力。
故障轉移:若配置的叢集中有一臺伺服器出現了故障或者請求超時, Nginx 會將已經發送至該伺服器的請求轉發至另一臺伺服器。
恢復新增:如檢測到發生故障的伺服器恢復工作,Nginx 自動將其新增到請求處 理隊伍中。
1.2 Milvus
Milvus 是一款開源的分散式向量相似度搜索引擎。透過整合業界成熟的向量相似度搜索技術和大幅度最佳化高效能計算框架,Milvus 支援針對 TB 級向量的增刪改操作和近實時查詢,具有高度靈活、穩定可靠以及高速查詢等特點。Milvus 集成了 Faiss、NMSLIB、Annoy 等廣泛應用的向量索引庫,提供了一整套簡單直觀的 API,使用者可以針對不同場景選擇不同的索引型別。
Milvus 適用於多種場景,與深度學習相融合的架構如下圖所示:
採用 Milvus 的資料處理流程包括以下幾個步驟:
與深度學習模型相結合,將非結構化資料轉化為特徵向量。
將特徵向量儲存到 Milvus 並建立索引。
返回向量相似性搜尋結果。
實現方案
如下圖所示,客戶端將多個讀請求傳送給 Nginx。Nginx 根據在配置檔案中設定的負載均衡策略,將請求按時間順序逐一分配到不同的 Milvus 伺服器中。Nginx 負載均衡策略還包含輪詢方式、依據 ip 分配方式、權重方式等。使用者可以根據實際場景選擇相應的負載均衡策略。本教程採用輪詢的策略。
2.1 安裝 Nginx
1。 Nginx 的安裝包分為開發版、穩定版和過期版。本教程使用穩定版 Nginx 安裝包。從 Nginx 官網 下載安裝包並解壓。
2。 安裝 C++ 依賴庫、openssl 依賴庫、pcre 依賴庫和 zlib 依賴庫。
3。先配置 Nginx 的安裝地址,將 Nginx 安裝到指定路徑下。
4。 編譯 Nginx。
5。 安裝 Nginx。
⚠️ 如果沒有許可權,需要切換到 Root 許可權
6。 啟動 Nginx。
7。 檢查 Nginx 是否啟動成功:如果 Nginx 程序啟動則說明 Nginx 啟動成功了。
2.2 配置 Milvus
本教程中使用 Milvus 的版本為 1。0,安裝方式參考 Milvus 官網。安裝時,將所有裝置中資料儲存的位置都設定為共享儲存的路徑,如下圖所示。
Milvus 預設使用 SQLite 作為元資料後臺管理服務,但是在生產環境中,需要使用 MySQL 管理元資料。MySQL 安裝完成後,在 Milvus 的配置檔案
server_config.yaml
中修改引數
meta_uri
。
伺服器 1 的 IP 地址為 192。168。1。85 ,伺服器 2 的 IP 地址為 172。16。10。1。在伺服器 1 上安裝 Milvus1 和 Milvus3。Milvus1 設定為只讀 IP 地址 192。168。1。85:19537,Milvus3 設定為只寫 IP 地址 192。168。1。85:19539。伺服器 2 安裝 Milvus2,將其設定為只讀 IP 地址 172。16。10。1:19538 。
server_config.yaml
配置檔案中修改引數
enable
和
role
,如下圖所示。
其中引數 enable 表示是否設定為分散式模式。引數 role 表示 Milvus 是隻讀還是隻寫。引數 meta_uri 應修改為安裝 MySQL 的裝置地址,其餘配置參照 Milvus 單機版的配置。
2.3 配置 Nginx
完成 Milvus 配置後,根據 Nginx 的配置檔案路徑,修改配置檔案 Nginx。conf。在配置檔案的末尾新增如下程式碼:對 Milvus1 和 Milvus2 兩個讀節點進行輪詢。
stream { log_format proxy ‘$remote_addr [$time_local] ’ ‘$protocol $status $bytes_sent $bytes_received ’ ‘$session_time “$upstream_addr” ’ ‘“$upstream_bytes_sent” “$upstream_bytes_received” “$upstream_connect_time”’; # 日誌格式配置 access_log /var/log/Nginx/access。log proxy ; open_log_file_cache off; #日誌快取設定,此處設定為禁用 server { listen 19585; #為監聽的埠號不能和Milvus的埠號衝突 proxy_pass Milvus; } upstream Milvus { server 192。168。1。85:19537;#為Milvus1的Ip地址 server 172。16。70。1:19538;#為Milvus2的Ip地址 } }
注:如果是 gRPC client 呼叫 Nginx 的介面需要在 Nginx。conf 配置檔案的server 部分進行修改,詳見 GitHub 專案修改 Nginx 配置檔案後,測試是否配置正確。停止 Nginx 服務並重新啟動。多次執行 GitHub 專案 中提供的指令碼進行測試,並檢視 Nginx 的日誌檔案。
Ngnix 日誌查詢結果如下圖所示。Nginx 將請求分別分發給 Milvus1 和 Milvus2 這兩個讀節點。
總結
本文主要介紹瞭如何透過使用 Nginx 實現對 Milvus 的負載均衡。負載均衡機制能夠有效應對單臺伺服器出現故障的情況。而且負載均衡機制根據使用者配置的策略將請求轉發到不同的伺服器上,減輕單臺伺服器的壓力,提升使用者的體驗。希望本文對大家有所幫助,如果想要了解更多 Milvus 的教程和應用場景,可以關注我們的微信公眾號或者加入微信群中,期待與你的進一步交流!
About Zilliz
Zilliz 以重新定義資料科學為願景,致力於打造一家全球領先的開源技術創新公司,並透過開源和雲原生解決方案為企業解鎖非結構化資料的隱藏價值。
Zilliz 構建了 Milvus 向量資料庫,以加快下一代資料平臺的發展。Milvus 目前是 LF AI & Data 基金會的孵化階段專案,能夠管理大量非結構化資料集。我們的技術在新藥發現、計算機視覺、推薦引擎、聊天機器人等方面具有廣泛的應用。
Zilliz 官網:https://www。zilliz。com/