by Rain Chu | 4 月 1, 2024 | Linux , Ubuntu
調整NFS(Network File System)的效能可以從多個角度進行,包括調整NFS伺服器和客戶端的參數、網絡配置、以及文件系統的選擇。
增加快取功能
暫時使用快取功能
mount -o remount,actimeo=60,noatime /mnt/uploads
各參數作用說明
參數 作用 是否影響效能 actimeo=60NFS 屬性快取 60 秒 (最關鍵)✅ 大幅減少 NFS metadata IO noatime不更新檔案存取時間 ✅ 小幅改善 remount重新掛載、不用卸載 —
永久增加快取功能
10.140.0.9:/mnt/web1 /mnt/webs nfs rw,nfsvers=4,noatime,actimeo=60,rsize=1048576,wsize=32768 0 0
改成之後要
actimeo=60 會不會有副作用?
對 uploads(媒體)來說:幾乎零風險
因為:
媒體檔案:
就算 60 秒內看不到最新 mtime 👉 對 WordPress 功能完全沒影響
哪些情況「不適合」?
以下目錄 不要 用高 actimeo:
類型 原因 PHP 原始碼 可能部署後看不到最新檔案 cache 需要即時同步 可能讀到舊狀態 lock 檔案 可能 race condition
👉 所以 最佳實務是 :
/mnt/uploads → actimeo=60 或更高
/mnt/webs(整站) → 看情況(通常 30~60 也 OK)
程式碼 → 最好不要放 NFS(要無狀態化)
進階最佳化
acregmin=60,acregmax=120,acdirmin=60,acdirmax=120
調整 NFS 參數:
NFS Server 端
使用 NFSv4: NFSv4 提供更好的效能和安全性。
根據工作負載調整 rpc.mountd.port 和 rpc.nfsd.port 參數的值。
調整 nfsd.minthreads 和 nfsd.maxthreads 參數的值,以優化執行緒數量。
調整 nfs.readahead 和 nfs.writebehind 參數的值,以優化讀寫緩衝區大小。
範例如下
我的主機是 4VPU,4G RAM 來設計
修改 /etc/nfs.conf 文件(或你系統中相對應的配置文件),設置最小執行緒數為 8,最大執行緒數為 64 :
調整邏輯,將 nfsd.minthreads 和 nfsd.maxthreads 參數設置為與 CPU 核心的數量相同或是略高一些
編輯 /etc/sysctl.conf
# NFS Setup
nfsd.minthreads =8
nfsd.maxthreads = 64
nfs.readahead = 65536
nfs.writebehind = 262144
重啟主機
sudo service nfs-kernel-server start
NFS Client 端
使用 NFSv4: NFSv4 提供更好的效能和安全性。
調整 mount.nfs.rsize 和 mount.nfs.wsize 參數的值,以優化讀寫緩衝區大小。
調整 mount.nfs.mountd_port 和 mount.nfs.nfsd_port 參數的值。
調整邏輯,將 mount.nfs.rsize 和 mount.nfs.wsize 參數設置為與 TCP MTU 相同或是略低一點
範例如下
/etc/fstab
server:/path/to/share /mnt/nfs nfs rw,nfsvers=4,noatime,rsize=32768,wsize=32768 0 0
提高讀取的性能
mount -o async,noac,rsize=1048576 nfs://server/share /mnt
兼顧安全性以及效能的設定可以參考
mount -o async,noac,noatime,nodev,noexec,norecovery,rsize=1048576,tcp,nfsvers=4 nfs://server/share /mnt
讀取大型文件,如影音,透過 readahead 來幫助提高性能,這裡將 readahead 設置為 128 塊(每塊的大小依賴於系統配置,通常是 4KB)
sudo mount -t nfs -o rsize=32768,wsize=32768,readahead=128 server:/path/to/share /mnt/nfs
調整網路配置:
使用高性能網路設備。
調整 TCP/IP 參數,例如 tcp_keepalive 和 tcp_window_size。
常見的 NFS 掛載選項
async: 允許 NFS 客户端在將數據寫入磁碟之前將其發送到伺服器。這可以提高寫入性能,但可能會導致數據丟失。
bg: 在後台掛載 NFS 共享。
intr: 允許 NFS 客户端在伺服器無響應時中斷操作。
noac: 不使用 NFS 屬性緩衝區。這可以提高性能,但可能會導致文件屬性不一致。
noatime: 不更新文件的訪問時間。這可以提高性能,但可能會導致文件元數據不準確。
nodev: 不將 NFS 共享上的設備映射到本地設備。
noexec: 不允許在本地執行 NFS 共享上的可執行文件。
norecovery: 在 NFS 伺服器發生故障時不嘗試重新掛載共享。
ro: 以唯讀模式掛載 NFS 共享。
rsize: 設置 NFS 客户端每次讀取操作從伺服器接收的最大數據量。
rw: 以讀寫模式掛載 NFS 共享。
soft: 在 NFS 伺服器無響應時允許 NFS 客户端重試操作。
tcp: 使用 TCP 而不是 UDP 進行 NFS 通信。
timeo: 設置 NFS 客户端在伺服器無響應之前等待的時間。
nfsvers: 指定 NFS 協議版本
其中最常用到的是 async, noac, noatime, rsize, nfsvers.
noatime
多數情況下,禁用對文件訪問時間的更新可以提升性能,因為它減少了對伺服器的寫操作。
rsize和wsize:
對於現代網絡,32768(32KB)或65536(64KB)是比較常見的設定值,能夠提供良好的效能。你可以從這個基點開始,進行實際的性能測試來找到最適合你環境的值。
NFS 版本的比較說明 (nfsvers)
NFSv4 比較新,提供了更好的安全性(如Kerberos身份驗證)和效能優化,包括更高效的文件鎖定機制和狀態保持功能。
NFSv3 在一些舊系統上仍然很流行,對於不需要v4的安全性增強的環境來說,可能仍是一個好選擇。在某些情況下,它可能由於其無狀態性而提供更好的效能。
監控與調整
使用 nfsstat 這樣的工具來監控 NFS 伺服器的性能,然後根據實際運行情況進行調整。
之後就可以輸入 nfsstat 取得相關資訊
高效能伺服器
使用 NFS Ganesha: NFS Ganesha 高性能的 NFS 代理伺服器
by Rain Chu | 3 月 28, 2024 | AI , Chat
在當今快速發展的人工智慧領域中,Perplexity作為一家新興的對話式AI平台公司,於2022年8月成立,迅速吸引了眾多目光。這家新創公司不僅得到了科技界巨頭如黃仁勳和傑夫·貝佐斯等人的重金注資,更是以其創新的知識搜尋平台而聞名。Perplexity提供了一種全新的搜尋體驗,將傳統的網路搜尋與最先進的人工智慧技術結合起來,為使用者遇到的每個問題提供高品質的答案。
Perplexity的特色
注資背景顯赫 :得到黃仁勳、貝佐斯等科技界巨頭的注資,顯示了市場對Perplexity業務模式和未來發展潛力的高度認可。
創新的知識搜尋平台 :Perplexity是一個結合了網路搜尋與人工智慧的對話式AI平台,致力於解決用戶可能遇到的各種問題,無論是學術問題、日常疑惑還是專業咨詢。
高品質的答案 :Perplexity憑藉先進的AI技術,提供的答案品質高於一般搜尋引擎,更加準確、有深度且可靠。
提供參考來源 :為了確保信息的透明度和可信度,Perplexity在提供答案的同時,會附上參考來源,讓用戶可以進一步查證。
自動推薦追問問題 :該平台能夠根據用戶的查詢自動推薦相關的追問問題,豐富用戶的探索過程。
搜尋YouTube影片 :Perplexity不僅限於文本搜尋,還能夠搜索YouTube影片,為用戶提供更多樣化的信息來源。
Chrome擴充工具「Perplexity – AI Companion 」 :Perplexity還推出了一款Chrome擴充工具,讓用戶在瀏覽網頁時能夠更方便地使用其服務。
至於Perplexity的商業模式,它提供了專業版服務,專業版用戶支付每月20美元的費用,便可無限制使用其「Copilot」功能,享受客服支援,甚至可以上傳自己的資料請Perplexity分析。截至目前,Perplexity已擁有約10萬名付費用戶,顯示出其服務的受歡迎程度以及市場的廣大潛力。
https://www.perplexity.ai/
by Rain Chu | 3 月 28, 2024 | Nginx , SERVER , wordpress
定義 proxy cache path
先找到設定檔,通常在
sudo nano /etc/nginx/nginx.conf
找到 http ,在他的配置中設定
http {
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
...
}
緩存配置
緩存文件儲存的路徑: /path/to/cache
緩存目錄的層級: 1:2
緩存區域的名稱和大小: my_cache:10m
緩存區域名稱: my_cache
緩存區域大小: 10MB
緩存的最大大小: 10GB
在指定的時間內沒有被訪問的緩存文件將被刪除: 60m
直接在緩存路徑上操作,而不是使用臨時路徑: off
詳細說明
緩存文件將儲存在指定的目錄中。您可以根據您的需求設置此路徑。
此設置控制緩存目錄的層級結構。例如,設置為 1:2 表示將使用兩個層級的目錄來儲存緩存文件。第一層級將包含 10 個子目錄,第二層級將包含 100 個子目錄。
此設置控制緩存區域的名稱和大小。緩存區域是緩存文件的分組。您可以根據您的需求設置多個緩存區域。
此設置控制緩存的最大大小。超過此大小時,最舊的緩存文件將被刪除。
此設置控制在指定的時間內沒有被訪問的緩存文件將被刪除。
修改設定檔,配置 proxy cache
找到 config 中的 server ,在裡面添加相關設定
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://your_backend_server;
proxy_cache my_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 1;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
反向代理配置
後端伺服器的地址: proxy_pass
此設置指定後端伺服器的地址。後端伺服器是 Nginx 將請求轉發到的伺服器。
使用之前定義的緩存區域: proxy_cache
此設置指定要使用的緩存區域。緩存區域是 Nginx 用於儲存靜態內容的區域。
啟用後,會在緩存過期時向後端伺服器驗證緩存內容是否仍然有效: proxy_cache_revalidate
此設置控制是否在緩存過期時向後端伺服器驗證緩存內容是否仍然有效。默認情況下,Nginx 將在緩存過期時直接使用緩存內容。
在緩存內容之前,請求必須達到指定的次數: proxy_cache_min_uses
此設置控制在緩存內容之前,請求必須達到指定的次數。這可以防止頻繁更新的內容被緩存。
在後端伺服器錯誤或超時時,使用舊的緩存數據: proxy_cache_use_stale
此設置控制在後端伺服器錯誤或超時時是否使用舊的緩存數據。默認情況下,Nginx 將在後端伺服器錯誤或超時時向客戶端返回錯誤。
在更新緩存內容時,防止多個請求同時向後端伺服器發送: proxy_cache_lock
此設置控制在更新緩存內容時是否防止多個請求同時向後端伺服器發送。這可以防止後端伺服器過載。
設定不同響應狀態碼的緩存時間: proxy_cache_valid
此設置控制不同響應狀態碼的緩存時間。您可以根據您的需求設置不同的緩存時間。
重新開啟 Nginx 讓設定生效
sudo nginx -t
sudo systemctl reload nginx
快取的時間設定
Nginx 支持多種時間單位来指定 cache 的有效期,这包括:
s 秒
m 分鐘
h 小時
d 天
w 周
M 月(30 天)
y 年(365 天)
舉例子
快取檔案 30 秒
proxy_cache_valid 200 302 30s;
刪除快取的方法
1.直接刪除快取檔案
找到你設定的路徑,直接刪除檔案即可
sudo rm -rf /path/to/cache/*
2.使用 Nginx Cache Purge
如果你在編譯 Nginx 有加入 cache purge ,就可以用下面的設定,如果你是用預設安裝,通常不包含 cache purge,可以看下我之前的安裝教學
location /purge_cache/ {
proxy_cache_purge my_cache $scheme$host$request_uri;
}
by Rain Chu | 3 月 27, 2024 | GCP , MIS
要執行該操作GCP中的執行個體的自動開啟以及自動關閉,您需要給予 Compute Engine System service account(服務帳戶) compute.instances.start 和 compute.instances.stop 權限。
錯誤訊息
Compute Engine System service account [email protected] needs to have [compute.instances.start,compute.instances.stop] permissions applied in order to perform this operation.
以下是需要採取的步驟:
找到 Compute Engine System Service Account
打開 Google Cloud Console。
導航到「IAM & Admin」-> 「IAM」。
在右側的窗口中,勾選「Include Google-provided role grants」(包含 Google 提供的角色授權)。
使用搜尋欄 (Ctrl + F) 並輸入「compute-system」找到服務帳戶。服務帳戶的 email 格式為 [email protected] 。
添加權限
點擊服務帳戶旁邊的鉛筆圖示來編輯。
點擊「ADD ANOTHER ROLE」(新增另一個角色)。
在角色過濾器中,輸入「compute」,並選擇:
Compute Instance Admin (v1) – roles/compute.instanceAdmin.v1
或是更精細的權限如 roles/compute.instanceAdmin 、roles/compute.osAdminLogin。
點擊「SAVE」(儲存)。
等待權限生效 :
新權限生效可能需要幾分鐘。
重要注意事項:
Compute Engine System Service Account 是一個由 Google 管理的特殊服務帳戶,允許 Compute Engine 在您的專案裡進行必要的配置。避免賦予過廣的權限。
如果您只是需要啟動和停止 VM 的權限,選擇更精細的權限來降低風險。
徹底瞭解要賦予的權限,以及它們可能產生的影響。Google Cloud 的 IAM 文件: https://cloud.google.com/iam/docs/ 提供了角色與權限的詳細說明。
如果是在使用像 Cloud Scheduler 這類的服務來啟動或停止 VM,那麼就是該服務所使用的服務帳戶需要這些權限 。
by Rain Chu | 3 月 26, 2024 | AI , Chat
想要做自己的 chatGPT ? 想要用自己的 DATA 訓練機器人? 不知道甚麼是 VectorDB,或是想要企業的聊天機器人應用? 還是想要結合EXCEL回答問題,還是想用機器人幫你完成各式各樣的任務。
第一步驟推薦看下面的文章
GitHub – xuhaoruins/Azure-OpenAI-App-Innovation-Workshop
Azure_App_Innovation_Inspiration_Demo · Streamlit (haxu.dev)
近期留言