RSS Email Twitter GitHub Dribbble LinkedIn Facebook Instagram YouTube Pinterest Reddit icon menu

Cody's 探索日誌

東摸西摸,十分好奇

PV: / UV:

透過 Golang 進行 XDP 進行 UDP 收發

為了解決網路程式的收發效能,根據三個面向進行研究 分別是系統、程式、硬體三個面向 程式面向 程式處理邏輯優化,縮短處理下一包的時間 使用多核效能,更改成多進程或多執行序,同時以參考 Reactor、Proactor 等模型架構,不一定要採用 透過 SO_REUSEPORT 搭配 RSS 進行有效的 CPU 使用 系統面向 系統層的優化,分別針對收容能力及核心分配做處理 收容能力 不用無條件的往上增加,而是增對需求條件進行調校,因為不單單只有收容能力需要調整 1 2 3 4 5 6 # 增加對 NIC Ring Buffer 的抓取的 CPU 資源,預設 300 net.core.netdev_budget=900 # 寫入的 Socket Buffer net.core.wmem_max=20971520 # 接收的 Socket Buffer net.core.rmem_max=20971520 核心分配 若為多行程/多進程設計,並有搭配 REUSEPORT,則可以降低 CPU 分配 透過 taskset、isolation、cgroup 進行分配、隔離、綁定 硬體面向 透過支援的網卡設定 Receive Side Scaling (RSS),並透過 SO_REUSEPORT 的搭配,使 CPU 有效分配 RSS 這邊簡端說明,NIC 隊列通道會是一個以上,預設可能只用一個

透過 VScode 將 Git Commit 壓縮提交

不想透過純命令的方式去合併 Git Commits,操作起來很不直觀 想透過 VScode 直接將 Git Commits 合併成一個 Commit 套件 圖形化的 Git Commits VScode Extension - Git Graph VScode 設定 開啟 設定 並搜尋 git force,然後開啟 Git: Allow Force Push 合併 Commits 首先進入到 VScode 的 Git 控制頁面,然後選擇 View Git Graph 的 Icon 然後可以看到 Commits 圖形化,然後選擇欲合併的 Commit 選擇 Reset Current Branch to this Commit… 然後這邊選擇 Mixed 然後會看到建立一個本地分支 這時候會看到之前變更過的檔案需要重新提交 然後會看到合併之後的提交 最後透過 推送(強制更新) / Push(Force) 進行推送 最終就會看到提交合併了,Github 上也是如此 Ref Github - Squashing commits Dannyherran - Git squash commits in VS Code

Wordpress - Nginx 反向代理緩存

Wordpress 的頁面不會時常更新,希望透過緩存的方式減少不必要的損耗,並同時加速頁面載入速度 雖然 Wordpress 有眾多的緩存插件可以使用,但用起來的效果感覺都沒有很好,所以決定用 Nginx 來實現緩存 環境 Ubuntu - 20.04 LTS Nginx - 1.18.0 (Ubuntu) nginx-cache-purge - 0.1.8 Lua - 5.2.4 實現 Nginx 緩存 一個最基本的 Wordpress 的反向代理設定 1 2 3 4 5 6 7 8 9 10 11 http { server { listen 80; server_name domain.com; location / { proxy_hide_header X-Frame-Options; proxy_pass http://192.168.0.100; } } } 設定緩存路徑及緩存鍵名 proxy_cache_path <path> [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] [use_temp_path=on|off]; <path>: 設定代理緩存位置的相關設定為 /var/run/proxy_cache

[網路] UDP 丟包追查

前言 UDP 若發生丟包,往往會認為封包遺失在路上,然而需要因環境架構來進行判斷 若發生問題的在一個大量的高速 UDP 的環境,則狀況可能會更加複雜,但往往事實出乎意料 知識 接收 網卡接收封包存入 Ring Buffer 然後透過 Kernel 存入 Socket Buffer 然後 Application 再從 Socket Buffer 取出封包 傳出 APP 將封包透過系統調用執行 sendTo 經歷 UDP封裝、IP封裝後進入 Socket Buffer,然後經由 Traffic Control 的 Qdisc(Classless Queuing Disciplines),而 Qdisc 會有一套傳輸的規則,符合規則才從 Ring Buffer 透過網卡送出 發生原因 傳送方 UDP 傳送速率太快受到 Qdisc 規則限制 TX Ring Buffer 太小 Socket Buffer 太小 接收方 RX Ring Buffer 太小 Socket Buffer 太小 App 處理太慢 檢查流程 確認網路協議統計 UDP 是否出現丟包 buffer errors 是否不為 0

MySQL/MariaDB - 時序查詢補零

最近協助改善查詢 DB 中的時序資料性能上的問題 由於現階段補零的動作交由前端處理,但是性能低落,導致前端圖表顯示較慢 測試資料 以下為範例資料表 test 為每 15 分鐘一筆,若此 15 分鐘無資料則不會寫進 DB Table seq - Primary Key created_at - INDEX seq value created_at 1 100 2021-12-20 10:00:00 2 500 2021-12-20 11:15:00 3 100 2021-12-20 12:45:00 … … … 50 300 2021-12-20 22:30:00 解決方法 問題

vscode 支援 ipynb 介面

最近開發有用到 python,但是已經用習慣 vscode,後來發現原來 vscode 已經支援 ipynb 進行開發 Env vscode: 1.59.1 python: 3.9.6 64-bit Install vscode 要安裝以下套件,可以透過 command 進行安裝 1 2 code --install-extension ms-toolsai.jupyter code --install-extension ms-python.python 如果想要將 ipynb 轉換成 python script 進行匯出,則需要再安裝 jupyter 透過以下指令 1 pip3 install notebook Conclusion 所以如果不轉換檔案,就可以不安裝 jupyter,並且 vscode 是可以正常運行的 Ref VS Code的Python擴充套件現支援原生編輯Jupyter Notebooks

保持 SSH 連線

在公司工作的時候,需要連至客戶的伺服器時,有時候放置太久就斷線了 根據網路上的資料,可以設定 ~/.ssh/config,讓 SSH Session 連線可以保持 SSH Config ~/.ssh/config : 用戶設定檔 /etc/ssh/ssh_config : 系統設定檔 以下設定的意思是,任何主機的連線,每 60秒 發送一個 KeepAlive,使其保持連線 Host * ServerAliveInterval 60 雖然前輩說用 top 讓連線之間保持傳輸即可,但有時候還是會忘記用,結果就段開了 還要請客戶協助重新登入是真的挺麻煩的 Ref Keeping SSH session alive

ByPass - Chrome Https Error

在聽 Will 保哥在疫情期間中有介紹 SSL/TLS 的一些觀,過程中有提到一個 Chrome 小技巧 ByPass Https Error 在內部網頁服務的使用過程中,可能會遇到各種憑證問題導致無法正常瀏覽網頁 要確認網頁是安全的才可以繼續瀏覽 但是如果頁面有繼續瀏覽的選項可以點擊,但也不是太麻煩 但就怕沒有繼續按鈕可以使用,這個時候我都會開啟 Safari 去信任憑證,然後透過 Safari 瀏覽 鍵盤要注意是小寫 根據影片中述說,在 Chrome 的憑證或不安全的頁面中輸入 thisisunsafe 就可以順利繼續瀏覽 Chrome Flags 這個在開發一些網頁服務的時候蠻方便的,不然偶爾就要一直重新按繼續瀏覽,真的是非常麻煩 透過在 chrome 瀏覽器網址中輸入 chrome://flags/#allow-insecure-localhost,並將此設定開啟 Ref 深入理解 TLS/SSL 安全加密協定 Chrome: Bypass “Your connection is not private” Message