最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go?chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)

 更新時間:2022年08月24日 11:24:50   作者:二手雄獅  
這篇文章主要為大家介紹了Go?chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

什么是Go chassis

go chassis是一個go語言微服務(wù)開發(fā)框架,專注于云原生應(yīng)用的開發(fā)主要的使用場景是云服務(wù)開發(fā)。go chassis將云服務(wù)開發(fā)過程中沉淀的能力融入到了開發(fā)框架中,以幫助開發(fā)團隊快速編寫云原生應(yīng)用。

文章目標(biāo)

本文介紹我們的設(shè)計理念和目標(biāo),為何go chassis會誕生。后面的系列文章會著重介紹使用方法,項目實戰(zhàn)。對于微服務(wù)架構(gòu)模式,云原生要素,為什么選擇go語言等將不再贅述。

誕生背景

公司開發(fā)云服務(wù),要構(gòu)建健壯,韌性,安全,高可靠的云服務(wù),必然有大量基礎(chǔ)能力需要編寫,為了加速開發(fā),我們將這些能力便沉淀在了該框架中。為什么呢?

我們希望加速每一個組件也就是微服務(wù)的開發(fā)速度。有的人看到的只是冰山一角,真的要達成微服務(wù)架構(gòu)模式的愿景,其實需要繁重的工作量。就像冰山那樣,我們要將通用能力沉淀下去,能夠復(fù)用。如果讓各個業(yè)務(wù)團隊同時照顧冰山上下,各自開發(fā)各自的,那結(jié)果將是災(zāi)難性的,企業(yè)用人成本極高。

在業(yè)務(wù)交付的過程中,各個云團隊有大量的管理服務(wù)需要對接,每個團隊都在寫重復(fù)的代碼,通過框架能力,將交付職責(zé)分離,減少開發(fā)成本:

如何快速開發(fā)一個微服務(wù)

可以跟隨這個文檔體驗。

github.com/go-chassis/…

統(tǒng)一治理和協(xié)議模型

我們使用Invocation概念來統(tǒng)一協(xié)議描述,當(dāng)協(xié)議請求到來后,go chassis會把request轉(zhuǎn)換為Invocation進行治理(如負載均衡,限流,熔斷,重試,金絲雀發(fā)布等),這樣就可以允許任意的協(xié)議接入到go chassis,并無縫使用go chassis提供的核心功能,當(dāng)前默認提供原生grpc和http兩種協(xié)議的接入。

為什么會有這樣的設(shè)計呢?

  • 每個協(xié)議層的優(yōu)化空間非常大,用戶態(tài)到內(nèi)核態(tài)的調(diào)用速度本來就相對內(nèi)部代碼來說是很慢的,優(yōu)化這一層代碼很重要,RPC怎么也比http來得好。
  • 不同部門可能有私有協(xié)議訴求,那么服務(wù)治理就交給核心框架完成。協(xié)議由業(yè)務(wù)部門決定自主研發(fā)或是集成現(xiàn)有協(xié)議。當(dāng)你發(fā)現(xiàn)公司內(nèi)部不同部門都在開發(fā)自己的協(xié)議做自己的服務(wù)治理時,再向?qū)I(yè)務(wù)統(tǒng)一一個架構(gòu),一個工具鏈上,將非常困難。

可擴展的處理鏈條:handler chain as middleware

我們以Java為例,大家在寫一個攔截器或者過濾器的時候可以對請求進行處理,處理完,這個攔截器的的執(zhí)行過程就結(jié)束了,那么如何達成以下目標(biāo)?

1.跟蹤業(yè)務(wù)執(zhí)行結(jié)果指標(biāo),比如http狀態(tài)碼,并導(dǎo)出他們讓prometheus收集。

2.跟蹤關(guān)鍵的業(yè)務(wù)執(zhí)行結(jié)果,審計這些信息。比如請求返回的一些結(jié)果信息

3.分布式調(diào)用鏈追蹤,end span必須等到請求返回才能拿到。

  • 客戶端調(diào)用遠程服務(wù)時,也需要進行中間處理,比如客戶端負載均衡,請求重試,這些不能夠耦合在業(yè)務(wù)代碼中

Java的答案很簡單,注解。那么go呢?

我們引入了handler chain編程模型,chain中每個handler都可以拿到后面的handler的執(zhí)行結(jié)果,包括業(yè)務(wù)代碼的執(zhí)行結(jié)果。

看下接口定義

type Handler interface {
	Handle(*Chain, *invocation.Invocation, invocation.ResponseCallBack)
	Name() string
}
// ResponseCallBack process invocation response
type ResponseCallBack func(*Response)

ResponseCallBack用于接受后置handler返回的結(jié)果,所以每一個handler處理時都可以按需定義自己的ResponseCallBack來獲取后面handler甚至是業(yè)務(wù)邏輯代碼的執(zhí)行結(jié)果。幫助通用邏輯(即中間件)和業(yè)務(wù)邏輯徹底解耦??梢钥聪卢F(xiàn)在已經(jīng)支持的中間件,無論限流,熔斷,負載均衡,認證鑒權(quán),審計,我們都用此機制實現(xiàn):

go-chassis.readthedocs.io/en/latest/m…

將公司全部的工具鏈,服務(wù)治理手段,安全合規(guī)等都落入到處理鏈中,可快速加快研發(fā)速度,并統(tǒng)一規(guī)范,減少管理負擔(dān)。

不只是API,通過配置簡化開發(fā)過程

只舉2個例子

監(jiān)控

減少讓開發(fā)者自己調(diào)用API的過程,將他們簡化為配置項

例如可觀察:

引入一行代碼

import _ github.com/go-chassis/go-chassis/v2/middleware/monitoring

加上配置

handler:
  chain:
    Provider:
      default: monitoring

就可以在服務(wù)端進行監(jiān)控,導(dǎo)出請求數(shù),延遲等指標(biāo),大大加速開發(fā)人員效率

# HELP request_count 
# TYPE request_count counter
request_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14
# HELP request_process_duration 
# TYPE request_process_duration summary
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.5"} 3
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.9"} 80
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.99"} 80
request_process_duration_sum{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 315
request_process_duration_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14

需要自定義指標(biāo):

err := metrics.CreateCounter(metrics.CounterOpts{
		Name:   “user_login”,
		Labels: labelsSlice,
	})
metrics.CounterAdd(“user_login”, 1, labelMap)

可信軟件

公司對軟件質(zhì)量的高要求,需要我們編寫大量的基礎(chǔ)代碼。我們也將通用的部分都落地到了框架中,通過簡單的配置文件啟用,不再需要不同團隊重復(fù)編寫代碼

servicecomb:
  transport:
    failure:
      rest: http_500,http_502 #統(tǒng)計錯誤率時,例如只把500和502作為錯誤
    maxIdleCon:
      rest: 1024
    maxBodyBytes:
      rest: 20 #只需要指定我的服務(wù)能接受的body體大小,訪問的超時時間即可不再需要各個團隊維護代碼。
    maxHeaderBytes:
      rest: 1 #限制http header大小
    timeout: #限制客戶端超時
      rest: 30s

插件化

為了應(yīng)對不同業(yè)務(wù)訴求,我們總是要考慮“可替換性”。而這個的優(yōu)先級總是大于“可復(fù)用性”。這就是go chassis的插件理念?;舅械闹匾M件都是插件化的,框架已經(jīng)定義好標(biāo)準接口,只需要開發(fā)者實現(xiàn)好,注冊到框架中,就可以在配置文件中配置并生效了,業(yè)務(wù)開發(fā)者是完全不感知的??梢詤⒖嘉覀儗uota組件的擴展過程,他負責(zé)資源的配額管理

go-chassis.readthedocs.io/en/latest/d…

后續(xù)將詳細剖析go chassis的內(nèi)部設(shè)計和特性使用。

在下一篇文章中,我將講述go chassis如何快速開發(fā)出一個微服務(wù)。由于是系列文章,隨著文章不斷更新,如果有期望了解的話題,內(nèi)容可以留言反饋,我會加入到后續(xù)文章中。

項目地址:

github.com/go-chassis/…

目前的用戶:

  • 華為
  • 趣頭條
  • Shopee
  • KubeEdge
  • ServiceComb

以上就是Go chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)的詳細內(nèi)容,更多關(guān)于Go chassis云原生微服務(wù)框架的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang時間處理中容易踩的坑分析解決

    Golang時間處理中容易踩的坑分析解決

    這篇文章主要為大家介紹了Golang時間處理中容易踩的坑分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • GO語言臨界資源安全問題的深入理解

    GO語言臨界資源安全問題的深入理解

    臨界資源安全問題也就是以往我們常聽到的線程安全問題,本文詳細的介紹了GO語言臨界資源安全問題的深入理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • VS?Code安裝go插件失敗原因分析以及解決方案

    VS?Code安裝go插件失敗原因分析以及解決方案

    vscode安裝go插件時,由于各種原因,在安裝插件時總是失敗,下面這篇文章主要給大家介紹了關(guān)于VS?Code安裝go插件失敗原因分析以及解決的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Golang服務(wù)中context超時處理的方法詳解

    Golang服務(wù)中context超時處理的方法詳解

    在Go語言中,Context是一個非常重要的概念,它存在于一個完整的業(yè)務(wù)生命周期內(nèi),Context類型是一個接口類型,在實際應(yīng)用中,我們可以使用Context包來傳遞請求的元數(shù)據(jù),本文將給大家介紹Golang服務(wù)中context超時處理的方法和超時原因,需要的朋友可以參考下
    2023-05-05
  • go slice不同初始化方式性能及數(shù)組比較詳解

    go slice不同初始化方式性能及數(shù)組比較詳解

    這篇文章主要為大家介紹了go slice不同初始化方式性能及數(shù)組比較示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • golang中的空slice案例

    golang中的空slice案例

    這篇文章主要介紹了golang中的空slice案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 如何在Go中使用切片容量和長度

    如何在Go中使用切片容量和長度

    這篇文章主要介紹了如何在Go中使用切片容量和長度,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Golang實踐之Error創(chuàng)建和處理詳解

    Golang實踐之Error創(chuàng)建和處理詳解

    在 C#、Java 等語言中常常使用 try...catch的方式來捕獲異常,但是在Golang 對于錯誤處理有不同的方式,像網(wǎng)上也有很多對 error 處理的最佳實踐的文章,其中很多其實就是對 error 的統(tǒng)一封裝,使用規(guī)范進行約束,本文主要是記錄自己對處理 Error 的一些認識和學(xué)習(xí)
    2023-09-09
  • go kratos源碼及配置解析

    go kratos源碼及配置解析

    這篇文章主要為大家介紹了go kratos源碼及配置解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Golang定時任務(wù)框架GoCron的源碼分析

    Golang定時任務(wù)框架GoCron的源碼分析

    本文主要介紹了Golang定時任務(wù)框架GoCron的源碼分析,原生的gocron存在一些問題,如任務(wù)列表維護不當(dāng)、并發(fā)操作不可預(yù)測等,經(jīng)過改進的gocron解決了這些問題,感興趣的可以了解一下
    2025-03-03

最新評論

石城县| 苗栗县| 博罗县| 无锡市| 保亭| 东辽县| 阜宁县| 武穴市| 乌鲁木齐市| 封开县| 屏山县| 巴中市| 荃湾区| 广州市| 永嘉县| 安达市| 普安县| 长宁区| 临澧县| 临城县| 贵溪市| 汝州市| 邢台市| 宝应县| 饶阳县| 河北省| 高安市| 个旧市| 红原县| 镇赉县| 新源县| 淮阳县| 平乡县| 郸城县| 儋州市| 保靖县| 沂南县| 汽车| 德阳市| 卢湾区| 和林格尔县|