本文目錄一覽:
- 1、求助,安裝golang環境後運行報錯
- 2、一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
- 3、限流器系列(3)–自適應限流
- 4、Golang入門到項目實戰 | golang簡介及安裝
- 5、Golang中的限速器 time/rate
求助,安裝golang環境後運行報錯
下載WebStorm 10
安裝WebStorm
Windows請參考Win版的安裝方式
下載Golang Plugin(最新版本是201)
為WebStorm安裝Go Plugin
啟動WebStorm(如果你更改了一些默認配置會提示重啟)
安裝下載好的Golang Plugin
Configure – Plugins
從本地磁盤選擇下載好的Go Plugin,安裝後重啟WebStorm
創建一個Golang項目
選擇Empty Project,選擇好Golang項目的文件目錄,點擊Create
創建一個Go文件main.go
設置Golang SDK,並在main.go里編寫你的Golang代碼
配置Golang運行環境
點擊右上角的向下三角形按鈕,在彈出窗口點擊加號新增一個Go Application
在File項選擇我們剛才的main.go文件(請注意提示,記得把文件的包名改為main才可以運行)
點擊右上角的綠色三角形運行
到此配置完畢,enjoy coding!
一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
原項目採用gopath來管理的引用庫,但有小夥伴反應說包不好下,雖然我把對應的包做了百度雲盤共享,但小夥伴們仍然感覺不太好用。特別是最近把go SDK升級到1.18.在管理包上終於下決心使用mod來重新重構下包管理。
一、配置啟用Mod
首先那:
確定是否開啟了
如果沒有開啟請開啟它。開啟命令執行:
#設置 使用七牛雲下載
來看下現在的配置:
二、創建項目
上邊都說了如何開啟了。下面介紹下如何使用
1. 可以隨便找一個目錄創建項目:myGoProjectNew
這個時候查看目錄下會多出一個go.mod的文件:
裏面也有了。標識了下SDK的版本1.18
2. 創建 main.go文件
3. 執行:
這時候就會自動下載引用了。
查看Go.mod文件
最後放兩張效果圖:
感覺還可以得點贊收藏哦。想要源碼的私信我獲取源碼。
限流器系列(3)–自適應限流
漏斗桶/令牌桶確實能夠保護系統不被拖垮, 但不管漏斗桶還是令牌桶, 其防護思路都是設定一個指標, 當超過該指標後就阻止或減少流量的繼續進入,當系統負載降低到某一水平後則恢複流量的進入。但其通常都是被動的,其實際效果取決於限流閾值設置是否合理,但往往設置合理不是一件容易的事情.
項目日常維護中, 經常能夠看到某某同學在群里說:xx系統429了, 然後經過一番查找後發現是一波突然的活動流量, 只能申請再新增幾台機器. 過了幾天 OP 發現該集群的流量達不到預期又下掉了幾台機器, 然後又開始一輪新的循環.
這裡先不討論集群自動伸縮的問題. 這裡提出一些問題
這些其實都是採用漏斗桶/令牌桶的缺點, 總體來說就是太被動, 不能快速適應流量變化
對於自適應限流來說, 一般都是結合系統的 Load、CPU 使用率以及應用的入口 QPS、平均響應時間和並發量等幾個維度的監控指標,通過自適應的流控策略, 讓系統的入口流量和系統的負載達到一個平衡,讓系統儘可能跑在最大吞吐量的同時保證系統整體的穩定性。
比較出名的自適應限流的實現是 Alibaba Sentinel. 不過由於提前沒有發現 Sentinel 有個 golang 版本的實現, 本篇文章就以 Kratos 的 BBR 實現探討自適應限流的原理.
借鑒了 Sentinel 項目的自適應限流系統, 通過綜合分析服務的 cpu 使用率、請求成功的 qps 和請求成功的 rt 來做自適應限流保護。
cpu 800 AND (Now – PrevDrop) 1s AND (MaxPass * MinRt * windows / 1000) InFlight
使用方式
該函數是核心函數. 其計算公式: MaxPass * MinRt * windows / 1000. maxPASS/minRT都是基於 metric.RollingCounter 來實現的, 限於篇幅原因這裡就不再具體看其實現(想看的可以去看rolling_counter_test.go還是蠻容易理解的)
Golang入門到項目實戰 | golang簡介及安裝
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。
go語言特點
go語言的應用領域
哪些公司(項目)在使用go語言
下載開發包
windows下安裝
1.打開下載的msi可執行文件,根據提示進行安裝。默認會安裝在c:/Program Files/go目錄下面。會自動添加go可執行文件環境變量。
2.驗證安裝情況
a.打開命令行
b. 輸入$ go version
linux下安裝
1.在/usr/local/下面創建一個目錄go
2.下載壓縮文件到該目錄(/usr/local/go),並解壓縮
3.添加/usr/local/go/bin到PATH環境變量,打開$HOME/.profile 或者/etc/profile輸入如下內容:
4.執行如下命令使得配置文件及時生效
驗證
1.如果你的mac有Homebrew包管理工具,可以使用它來安裝
2.如果沒有下載mac安裝包,根據提示安裝
3.默認安裝在/usr/local/go下面
4.設置環境變量,同Linux
Golang中的限速器 time/rate
在高並發的系統中,限流已作為必不可少的功能,而常見的限流算法有:計數器、滑動窗口、令牌桶、漏斗(漏桶)。其中滑動窗口算法、令牌桶和漏斗算法應用最為廣泛。
這裡不再對計數器算法和滑動窗口作介紹了,有興趣的同學可以參考其它相關文章。
非常很好理解,就像有一個漏斗容器一樣,漏鬥上面一直往容器里倒水(請求),漏斗下方以 固定速率 一直流出(消費)。如果漏斗容器滿的情況下,再倒入的水就會溢出,此時表示新的請求將被丟棄。可以看到這種算法在應對大的突發流量時,會造成部分請求棄用丟失。
可以看出漏斗算法能強行限制數據的傳輸速率。
令牌桶算法
從某種意義上來說,令牌算法是對漏斗算法的一種改進。對於很多應用場景來說,除了要求能夠限制數據的平均傳輸速率外,還要求允許某種程度的突發情況。這時候漏桶算法可能就不合適了,令牌桶算法更為適合。
令牌桶算法是指一個固定大小的桶,可以存放的令牌的最大個數也是固定的。此算法以一種 固定速率 不斷的往桶中存放令牌,而每次請求調用前必須先從桶中獲取令牌才可以。否則進行拒絕或等待,直到獲取到有效令牌為止。如果桶內的令牌數量已達到桶的最大允許上限的話,則丟棄令牌。
Golang標準庫中的限制算法是基於令牌桶算法(Token Bucket) 實現的,庫名為golang.org/x/time/rate
對於限流器的消費方式有三種,分別為 Allow()、 Wait()和 Reserve()。前兩種內部調用的都是Reserve() ,每個都對應一個XXXN()的方法。如Allow()是AllowN(t, 1)的簡寫方式。
主要用來限速控制並發事件,採用令牌池算法實現。
使用 NewLimiter(r Limit, b int) 函數創建限速器,令牌桶容量為b。初始化狀態下桶是滿的,即桶里裝有b 個令牌,以後再以每秒往裏面填充 r 個令牌。
允許聲明容量為0的限速器,此時將會拒絕所有操作。
// As a special case, if r == Inf (the infinite rate), b is ignored.
有一種特殊情況,就是 r == Inf 時,此時b參數將被忽略。
Limiter 提供了三個主要函數 Allow, Reserve, 和 Wait. 大部分時候使用Wait。其中 AllowN, ReserveN 和 WaitN 允許消費n個令牌。
每個方法都可以消費一個令牌,當沒有可用令牌時,三個方法的處理方式不一樣
AllowN方法表示,截止在某一時刻,目前桶中數目是否至少為n個。如果條件滿足,則從桶中消費n個token,同時返回true。反之不消費Token,返回false。
使用場景:一般用在如果請求速率過快,直接拒絕請求的情況
輸出
當使用Wait方法消費Token時,如果此時桶內Token數量不足(小於N),那麼Wait方法將會阻塞一段時間,直至Token滿足條件。否則直接返回。
// 可以看到Wait方法有一個context參數。我們可以設置context的Deadline或者Timeout,來決定此次Wait的最長時間。
輸出
// 此方法有一點複雜,它返回的是一個*Reservation類型,後續操作主要針對的全是這個類型
// 判斷限制器是否能夠在指定時間提供指定N個請求令牌。
// 如果Reservation.OK()為true,則表示需要等待一段時間才可以提供,其中Reservation.Delay()返回需要的延時時間。
// 如果Reservation.OK()為false,則Delay返回InfDuration, 此時不想等待的話,可以調用 Cancel()取消此次操作並歸還使用的token
輸出
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/242529.html