<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ego-go簡單的 Go 微服務(wù)框架

          聯(lián)合創(chuàng)作 · 2023-09-28 04:57

          EGO是一個集成里各種工程實踐的框架。通過組件化的設(shè)計模式,保證了業(yè)務(wù)方能夠統(tǒng)一的調(diào)用方式啟動各種組件

          使用EGO的優(yōu)勢

          • 配置化驅(qū)動組件
          • 屏蔽底層組件啟動細節(jié)
          • 微服務(wù)組件的可觀測、可治理
          • 可插拔的Ego-Component組件
          • Fail Fast理念和錯誤友好提示

          2.1 提升組件熟練度

          我們工程師要想提升組件熟練度,首先要大量看開源組件文檔和代碼,然后堅持長時間使用,才能形成肌肉記憶,提升我們做業(yè)務(wù)的速度。而這一切所投入的時間和精力是非常大的。

          要減少這個投入成本,讓更多開發(fā)者使用好優(yōu)秀的開源組件,EGO的做法是標(biāo)準(zhǔn)化所有開源組件,對其做一層封裝,統(tǒng)一各種行為。

          • 統(tǒng)一組件文件名
          • 統(tǒng)一組件配置參數(shù)
          • 統(tǒng)一組件調(diào)用API
          • 統(tǒng)一組件錯誤行為
          • 統(tǒng)一組件監(jiān)控行為

          讓人掌握了一種組件,就可以舉一反三使用其他組件。

          2.2 提升故障排查效率

          • 統(tǒng)一錯誤碼
          • 組件錯誤、慢響應(yīng)、鏈路、常規(guī)請求攔截器埋點(服務(wù)端、客戶端均會攔截)
          • 收斂錯誤字段
          • 注入組件關(guān)鍵信息:代碼行號、配置名、目標(biāo)地址、耗時、請求數(shù)據(jù)、響應(yīng)數(shù)據(jù)
          • 調(diào)試階段,錯誤高亮、格式化友好提示
          • 調(diào)試階段,組件內(nèi)置debug攔截器

          2.3 自動生成重復(fù)代碼

          • 生成代碼,配置、數(shù)據(jù)解析、模版分離
          • 不依賴于語言,構(gòu)建項目代碼
          • 利用Go1.16特性embed,啟動web,生成代碼
          • 項目地址: https://github.com/gotomicro/egoctl

          3 Ego的組件

          我們支持多種EGO組件,加快你的開發(fā)速度

          Component Name Code Example Doc
          HTTP Server Code Example Doc
          gRPC Server Code Example Doc
          Governance Service Code Example Doc
          Job Code Example Doc
          Corn job Code Example Doc
          Distributed Scheduled Job Code Example Doc
          HTTP Client Code Example Doc
          gRPC Client Code Example Doc
          gRPC Client using ETCD Code Example Doc
          gRPC Client using k8s Code Example Doc
          Sentinel Code Example Doc
          MySQL Code Example Doc
          Redis Code Example Doc
          Redis Distributed lock Code Example Doc
          Mongo Code Example Doc
          Kafka Code Example Doc
          ETCD Code Example Doc
          K8S Code Example Doc
          Oauth2 Code Example  

          4 EGO的定義

          4.1 框架分層

          我們框架分為三個層次

          • 核心層提供配置、日志、監(jiān)控和鏈路,是其他組件的基石
          • 組件層提供客戶端、服務(wù)端、任務(wù)端里的各種組件
          • 膠水層控制了各種組件的生命周期,錯誤處理

          4.2 架構(gòu)圖

          4.3 生命周期

          4.4 組件分層

          我們認為一切均是組件,我們將組件分為四個部分:

          • Container 處理組件類型、組件配置、組件啟動
          • Config 配置參數(shù)
          • Component 組件的調(diào)用方法
          • Options 配置和組件可選項

          5 版本要求

          • v0.8.2以下 需要 go大于go1.13
          • v0.8.3后 需要 go大于go1.16
          • v1.0.0后 需要 go大于go1.17

          6 下載工具

          bash <(curl -L https://raw.githubusercontent.com/gotomicro/egoctl/main/getlatest.sh)

          通過以上腳本,可以下載protoc工具全家桶,以及ego的protoc插件和egoctl

          • /usr/local/bin/egoctl EGO工具
          • /usr/local/bin/protoc 生成Pb工具
          • /usr/local/bin/protoc-gen-go 生成Pb工具
          • /usr/local/bin/protoc-gen-go-grpc 生成gRPC工具
          • /usr/local/bin/protoc-gen-go-errors 生成錯誤碼工具
          • /usr/local/bin/protoc-gen-openapiv2 生成HTTP工具
          • /usr/local/bin/protoc-gen-go-http 生成HTTP工具

          7 特性介紹

          • 配置驅(qū)動 所有組件啟動方式為組件名稱.Load("配置名稱").Build(),可以創(chuàng)建一個組件實例。如以下http serveregin是組件名稱,server.http是配置名稱
          egin.Load("server.http").Build()
          • 友好的debug 通過開啟debug配置和命令行的export EGO_DEBUG=true, 我們可以在測試環(huán)境里看到所有組件的請求里的行號、配置名、請求地址、耗時、請求數(shù)據(jù)、響應(yīng)數(shù)據(jù)

             

          并且使用Goland同學(xué),可以直接通過行號點擊到對應(yīng)的代碼路徑(gRPC、HTTP客戶端支持行號)

          8 Quick Start

          8.1 HelloWorld

          配置

          [server.http]
              port = 9001
              host = "0.0.0.0"

          代碼

          package main
          import (
             "github.com/gin-gonic/gin"
             "github.com/gotomicro/ego"
             "github.com/gotomicro/ego/core/elog"
             "github.com/gotomicro/ego/server"
             "github.com/gotomicro/ego/server/egin"
          )
          //  export EGO_DEBUG=true && go run main.go --config=config.toml
          func main() {
             if err := ego.New().Serve(func() *egin.Component {
                server := egin.Load("server.http").Build()
                server.GET("/hello", func(ctx *gin.Context) {
                   ctx.JSON(200, "Hello EGO")
                   return
                })
                return server
             }()).Run(); err != nil {
                elog.Panic("startup", elog.FieldErr(err))
             }
          }

          8.2 使用命令行運行

          export EGO_DEBUG=true # 默認日志輸出到logs目錄,開啟dev后日志輸出到終端
          go run main.go --config=config.toml
          

          8.3 如下所示

          圖片

          這個時候我們可以發(fā)送一個指令,得到如下結(jié)果

          ?  helloworld git:(master) ? curl http://127.0.0.1:9001/hello
          "Hello Ego"%  
          

          8.4 更加友好的包編譯

          使用scripts文件夾里的包編譯,可以看到優(yōu)雅的version提示

          9 更新日志

          Releases

          Contributors

          Thanks for these wonderful people:


          askuy

          Wei Zheng

          shaoyuan

          Panda

          劉文哲

          zhangjunjun

          devincd

          Ming Deng

          Angelia

          Wbofeng

          clannadxr

          Link Duan

          Costa

          MEX7

          LincolnZhou
          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧洲福利视频 | 青青自拍视频免费观看 | 天天干天天射天天爽 | 尻屄视频在线看 | 免费的A黄片 |