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

Cody's 探索日誌

東摸西摸,十分好奇

PV: / UV:

TAGS

透過 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 隊列通道會是一個以上,預設可能只用一個 可以啟用多個通道進行接收並搭配多個 CPU,達到更高的接收、發送效能 有興趣的可以閱讀 Linux Network Scaling: Receiving Packets

微服務框架 go-micro (一) grpc

學習微服務框架是為了更了解各種架構對不同專案上的適應性 雖然並不是每個專案都適合為服務,但是也需要先熟練各種兵器好應對更種情況 介紹 go-micro 是一個使用 go 實現的微服務框架,可以方便幫助 go 進行微服務的開發 主要功能 服務發現 平衡負載 Client/Server Pub/Sub gRPC Require Install 安裝工具 1 2 3 4 go mod init . go get github.com/micro/micro/v2@v2.4.0 go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.0 go get -u github.com/micro/protoc-gen-micro/v2@v2.3.0 mod version 這邊遇到了一些麻煩的狀況,各個版本的相依性很高,不同版本搭配可能造成錯誤 所以在這邊提供的以下的版本是確定可運行的 1 2 3 4 5 6 7 8 go 1.14 require ( github.com/golang/protobuf v1.4.2 github.com/micro/go-micro/v2 v2.9.1 github.com/micro/protoc-gen-micro/v2 v2.3.0 // indirect google.golang.org/grpc v1.26.0 ) Simple 我試著使用各種寫法來實現簡單的範例 使用 go-micro 進行服務發現,再透過 grpc 進行傳輸

學習 gRPC - Go

是在了解微服務的同時,得知 Go 並且同時聽聞了 gRPC 所以現在來學習使用 gRPC,看看 gPRC 到底是哪裡特別 Require 首先需要安裝 gPRC 工具,撰寫好 gPRC 的 pb 文件之後,就能透過 protoc 轉換成 go 文件進行使用 1 2 go get -u google.golang.org/grpc go get -u github.com/golang/protobuf/protoc-gen-go 目錄 此次練習的目錄結構 . ├── go.mod ├── go.sum ├── proto │ └── hello.proto ├── rpc │ └── hello.pb.go ├── client │ └── main.go └── server └── main.go 撰寫 Proto 撰寫 proto 定義文件,此為官方文件 go - quickstart proto3 及 proto2 的程式文法不同,所以版本注意 syntax = "proto3"; option go_package= ".

嘗試 Golang GUI - WebView

繼上次嘗試 Zserge 的 Lorca 後,作者還有另一個專案 WebView 而且作者在 Lorca 有說,想要更好的控制視窗,推薦使用 WebView 或其他 API 就來使用 WebView 的操作和呈現是否會更好 安裝 WebView 未開啟 GO111MODULE = off 1 $ go get -u https://github.com/zserge/webview 有開啟 GO111MODULE = on 在專案目錄中初始化 Go模組管理環境 1 2 3 $ go mod init $ go get -u https://github.com/zserge/webview 入門 作者透過直接嵌入 Wiki 的頁面,而且非常迅速且簡單 就顯示網頁的呈現來說,感覺沒什麼問題,而且沒有 Google Chromium/Chrome Swipe 的問題 1 2 3 4 5 6 7 8 9 package main import "github.com/zserge/webview" func main() { // Open wikipedia in a 800x600 resizable window webview.

嘗試 Golang GUI - Lorca

Golang 本身是沒有自帶官方 GUI 給使用者開發,有 Qt、TK、Electron 各種不同實現的GUI實現方式桌面應用程式 當然較為可靠的是 Flutter for Desktop 來進行建構,畢竟背後是富爸爸 Google 進行維護 但是這次先不提 Flutter,想透過 WebView 來進行桌面應用程式開發 最初想要 HTML 嵌入顯示畫面,通常想到的都是使用 Electron 來實現 後來在 Github 上面找到 Lorca 使用 HTML5 + Golang 就能實現,不必須要 Electron Lorca 依賴於 Chrome/Chromium 實現 UI 層,並且不需要CGO 跟 Electron 相比肯定比原本來的更輕巧,所以一直想嘗試嘗試 限制 Chrome/Chromium >= 70 安裝 Lorca 未開啟 GO111MODULE = off 1 $ go get -u https://github.com/zserge/lorca 有開啟 GO111MODULE = on 在專案目錄中初始化 Go模組管理環境 1 2 3 $ go mod init $ go get -u https://github.