在 kubernetes 剛出來的時期,很早就有接觸和使用,但當時畢竟只是一個研究生 並沒有太多商業上的開發經驗,雖然覺得很 k8s 很酷,但經歷一段時間的磨練和理解想重溫 K8S 的懷抱 Kubernetes 啟動 docker 附帶 kubernetes,暫時先不進行架設
觀念學習 pod 是最小單位,擺放 container 的位置,可以啟動單個或多個 container replic deployment 是一個 設定撰寫 Deployment 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 apiVersion: apps/v1 kind: Deployment metadata: name: test-staging-dep # deployment 名稱 namespace: default labels: # deployment 標籤 app: test-app spec: selector: matchLabels: # 選擇器會管理具備此標籤的 pod app: test-app replicas: 3 # 要啟動多少個 pod 副本 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: # pod 的模版指定的標籤,會受到上面 deployment 的選擇器控管 app: test-app spec: containers: - name: test # container 名稱 image: 192.
為了解決網路程式的收發效能,根據三個面向進行研究 分別是系統、程式、硬體三個面向 程式面向 程式處理邏輯優化,縮短處理下一包的時間 使用多核效能,更改成多進程或多執行序,同時以參考 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 隊列通道會是一個以上,預設可能只用一個
可以啟用多個通道進行接收並搭配多個 CPU,達到更高的接收、發送效能
有興趣的可以閱讀 Linux Network Scaling: Receiving Packets
不想透過純命令的方式去合併 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 的頁面不會時常更新,希望透過緩存的方式減少不必要的損耗,並同時加速頁面載入速度 雖然 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
levels: 設定目錄結構,例如 1:2,總共用了兩層目錄,第一層目錄單個 16 進制命名,第二層為兩個 16 進制命名
前言 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
最近協助改善查詢 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 解決方法 問題
前端透過 for loop 依序對缺失的時間軸補 0 ,效能低下,花費了約 3.24 秒左右的時間 前言
久久查詢一次 前端效能未知 查詢範圍固定 解決思路
補 0 透過 DB 處理 優化前端補 0 方法 這裡我選擇由 DB 進行補 0
最近開發有用到 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/config,讓 SSH Session 連線可以保持
SSH Config ~/.ssh/config : 用戶設定檔 /etc/ssh/ssh_config : 系統設定檔 以下設定的意思是,任何主機的連線,每 60秒 發送一個 KeepAlive,使其保持連線
Host * ServerAliveInterval 60 雖然前輩說用 top 讓連線之間保持傳輸即可,但有時候還是會忘記用,結果就段開了
還要請客戶協助重新登入是真的挺麻煩的
Ref Keeping SSH session alive