牛蛙!GoFrame2.7正式版的監控元件真是及時雨

王中阳Go1發表於2024-04-10

宣告:本文首發在同名公眾號:王中陽Go,未經授權禁止轉載。

👏👏👏GoFrame框架今天釋出了v2.7.0正式版本啦!👏👏👏

最大看點

本次版本最大的看點是提供了metric監控元件,主庫提供了介面化的metric設計,社群元件提供了基於OpenTelemetrymetric介面實現。該特性在預設情況下是關閉的,只有在引入具體的介面實現或者社群實現時才會預設啟用。當前版本同時提供了HTTP Client&Server的監控指標實現,其他元件的監控指標將在後續版本中陸續提供。詳情請參考GoFrame官方文件:服務監控告警

同時,在本次版本中實現了對dm/mssql/oracle/pgsql/sqlite資料庫的Save操作支援,感謝社群小夥伴💖。

由於本次版本變更內容較多,以下中文介紹一些較為重要的改進點,詳細的ChangeLog請參考:https://github.com/gogf/gf/releases/tag/v2.7.0

完整程式碼變更請參考:https://github.com/gogf/gf/compare/v2.6.0...v2.7.0

元件改進

  1. gdb
  • 新增Stats介面定義及實現,用於獲取當前資料庫orm物件維護的連線池資訊:ORM高階特性-連線池狀態

  • 新增FormatUpsert介面定義及實現,用於不同資料庫型別實現寫入/更新操作,即Save操作。

  • 新增SqlType型別,並將已有的sql type型別定義從string型別改為了SqlType型別。

  • 新增Model.OnConflict方法,用於實現部分資料庫型別當欄位唯一鍵衝突時的更新策略,特別是實現Save操作。

  • 修復ClearTableFieldsAll方法失效的問題。

  1. ghttp
  • 新增MiddlewareNeverDoneCtx中介軟體,開發者可以選擇使用,避免客戶端取消請求時服務端收到的context cancel問題:常見問題
  • 新增http server的監控指標實現,預設關閉不會影響效能,只有在開啟metrics特性時才會自動開啟:HTTPServer-監控指標
  • 改進tracing記錄,將span名稱從query uri改為了route uri,便於檢視時更容易聚合。
  • 改進Request物件中的EnterTime及LeaveTime屬性型別,從int64改為了*gtime.Time型別。
  • WebSocket方法標記廢棄,將會在未來的大版本中去掉,也會去掉http serverwebsocket的內嵌耦合支援。未來建議透過其他的websocket開源元件結合http server一起使用,更加解耦靈活。
  • 修復由於Request Body預設可重複讀取的問題引發的大檔案上傳佔用記憶體問題。
  • 修復StartPProfServer方法的pattern引數失效問題。
  • 檔案下載方法Request.ServeFileDownload方法新增Access-Control-Expose-Headers Header返回,以支援ajax檔案請求。
  • 服務配置新增SwaggerUITemplate配置項,用於快捷配置SwaggerUI頁面的HTML內容。
  • http server啟動路由列印時不再列印內建的中介軟體。
  1. gclient
  • 修復在開啟服務發現的情況下,所有的http請求均會強制走服務發現的域名解析問題。
  • 新增http client的監控指標實現,預設關閉不會影響效能,只有在開啟metrics特性時才會自動開啟:HTTPClient-監控指標
  1. gcon
  • 新增忽略符號#,對cron pattern中的秒欄位進行佔位,表示忽略秒欄位,用於將6段式的cron pattern轉換為5段式的linux crontab pattern定時任務-表示式
  • 修復在確定的秒級任務場景中(例如2 * * * * *),當底層時間出現不準確時可能引發兩次任務執行。
  1. gerror
  • 修復gerror.HasCode方法遞迴邏輯失效的問題。
  1. g
  • 改進DumpJson方法,用於實現對任意變數按照JSON格式進行列印。
  1. gcache
  • 修復大量建立Cache物件引發的goroutine過多問題。
  1. gcmd
  • 新增RunWithSpecificArgs方法,用於使用自定義的arguments執行命令物件。
  • 修復部分場景下由於引數結構體名稱和結構體標籤名稱衝突引發的引數丟失問題。
  1. gfsnotify
  • 修復gfsnotify物件關閉時可能引發的panic問題。
  1. glog
  • 修復rotate特性對gz字尾日誌壓縮檔案的重複rotate問題。
  1. gmetric
  • 新增gmetric元件,採用瞭解耦設計,只有介面定義和Noop的實現,真實的實現在社群元件中。只有引入具體的實現才會真實開啟metric特性:服務監控告警
  1. gproc
  • 修復程序引數解析在windows下可能失敗的問題。
  • 改進Signal訊號監聽實現,允許在執行時增加訊號監聽處理方法。
  1. gview
  • 修復由於os.Getwd方法執行失敗引起的健壯性問題。
  1. gconv
  • json.RawMessage支援接受slice型別的引數轉換。
  • 修復MapDeep內部轉換缺失Deep引數引發的遞迴轉換失敗問題。
  • 使用MapRange改進內部Map遍歷邏輯,提高執行效能。

社群元件

  1. 社群contrib/drivers資料庫元件的改進:
  • contrib/drivers/dm元件新增對Save操作的支援。
  • contrib/drivers/mssql元件新增對Save操作的支援。
  • contrib/drivers/oracle元件新增對Save操作的支援,並修復寫入引數不支援gdb.Raw型別的問題。
  • contrib/drivers/pgsql元件新增對Save操作的支援。
  • contrib/drivers/sqlite元件新增對Save操作的支援。
  • contrib/drivers/sqlitecgo元件新增對Save操作的支援。
  1. 新增contrib/metric/otelmetric元件,實現了對OpenTelemetry Metric的支援:服務監控告警
  2. 改進contrib/nosql/redis元件:
  • 新增SentinelUsernameSentinelPassword引數配置,以擴充套件對Redis Sentinel模式的支援:Redis-配置管理
  • 改進Redis介面實現,開發者可以靈活自定義擴充套件、覆蓋社群元件物件redis.Redis型別的實現:Redis-介面化設計
  1. 改進contrib/registry/etcd元件,允許開發者配置etcd連結的校驗資訊。
  2. 改進contrib/rpc/grpcx元件:
  • 對啟用tracing特性時,安全截斷請求內容。
  • 新增對logger配置項的支援,允許在配置檔案中透過logger配置項配置grpc server的日誌物件:服務端配置
  1. 改進contrib/trace/otlphttpcontrib/trace/otlpgrpc元件,修復在短程序場景下正常ShutDown仍可能會出現的trace資料丟失問題。

開發工具

  1. 改進gen dao生成的entity原始檔,增加orm標籤,以提高資料庫查詢結果轉換到entity物件的效率。
  2. 改進gen service命令,修復生成的原始碼檔案中,方法順序不一致問題。
  3. 改進build命令,將生成的二進位制檔案存放目錄path引數的預設值從./temp改為了.即當前目錄,以解決該引數自定義失效的問題。
  4. 改進init命令,新增-module/g引數,用於在初始化專案時顯式指定go module名稱。
  5. 修復gen dao在多個資料庫生成配置下,使用clear引數時刪除已生成的dao原始檔的問題。
  6. 修復gen pbentity命令,使用自定義的jsonCase引數無效的問題。
  7. 修復run命令的-w指定監聽目錄引數失效的問題。

早日上岸!

我們搞了一個免費的面試真題共享群,互通有無,一起刷題進步。

沒準能讓你能刷到自己意向公司的最新面試題呢。

感興趣的朋友們可以加我微信:wangzhongyang1993,備註:面試群。

本文首發在我的同名公眾號:王中陽Go,未經授權禁止轉載。

相關文章