亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

什么是Go chassis

go chassis是一個(gè)go語(yǔ)言微服務(wù)開(kāi)發(fā)框架,專(zhuān)注于云原生應(yīng)用的開(kāi)發(fā)主要的使用場(chǎng)景是云服務(wù)開(kāi)發(fā)。go chassis將云服務(wù)開(kāi)發(fā)過(guò)程中沉淀的能力融入到了開(kāi)發(fā)框架中,以幫助開(kāi)發(fā)團(tuán)隊(duì)快速編寫(xiě)云原生應(yīng)用。

文章目標(biāo)

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

誕生背景

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

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

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

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

可以跟隨這個(gè)文檔體驗(yàn)。

github.com/go-chassis/…

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

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

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

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

可擴(kuò)展的處理鏈條:handler chain as middleware

我們以Java為例,大家在寫(xiě)一個(gè)攔截器或者過(guò)濾器的時(shí)候可以對(duì)請(qǐng)求進(jìn)行處理,處理完,這個(gè)攔截器的的執(zhí)行過(guò)程就結(jié)束了,那么如何達(dá)成以下目標(biāo)?

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

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

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

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

Java的答案很簡(jiǎn)單,注解。那么go呢?

我們引入了handler chain編程模型,chain中每個(gè)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é)果,所以每一個(gè)handler處理時(shí)都可以按需定義自己的ResponseCallBack來(lái)獲取后面handler甚至是業(yè)務(wù)邏輯代碼的執(zhí)行結(jié)果。幫助通用邏輯(即中間件)和業(yè)務(wù)邏輯徹底解耦??梢钥聪卢F(xiàn)在已經(jīng)支持的中間件,無(wú)論限流,熔斷,負(fù)載均衡,認(rèn)證鑒權(quán),審計(jì),我們都用此機(jī)制實(shí)現(xiàn):

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

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

不只是API,通過(guò)配置簡(jiǎn)化開(kāi)發(fā)過(guò)程

只舉2個(gè)例子

監(jiān)控

減少讓開(kāi)發(fā)者自己調(diào)用API的過(guò)程,將他們簡(jiǎn)化為配置項(xiàng)

例如可觀察:

引入一行代碼

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

加上配置

handler:
  chain:
    Provider:
      default: monitoring

就可以在服務(wù)端進(jìn)行監(jiān)控,導(dǎo)出請(qǐng)求數(shù),延遲等指標(biāo),大大加速開(kāi)發(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)

可信軟件

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

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

插件化

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

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

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

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

項(xiàng)目地址:

github.com/go-chassis/…

目前的用戶:

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

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

相關(guān)文章

  • 使用golang編寫(xiě)一個(gè)并發(fā)工作隊(duì)列

    使用golang編寫(xiě)一個(gè)并發(fā)工作隊(duì)列

    這篇文章主要介紹了使用golang編寫(xiě)一個(gè)并發(fā)工作隊(duì)列的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 一文詳解Go語(yǔ)言io.LimitedReader類(lèi)型

    一文詳解Go語(yǔ)言io.LimitedReader類(lèi)型

    這篇文章主要為大家介紹了Go語(yǔ)言io.LimitedReader類(lèi)型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Golang中互斥鎖和讀寫(xiě)互斥鎖原理及示例代碼

    Golang中互斥鎖和讀寫(xiě)互斥鎖原理及示例代碼

    在Golang中,互斥鎖是一種基本的同步原語(yǔ),用于實(shí)現(xiàn)對(duì)共享資源的互斥訪問(wèn),讀寫(xiě)互斥鎖是一種特殊類(lèi)型的互斥鎖,它允許多個(gè)協(xié)程同時(shí)讀取某個(gè)共享資源,本文將通過(guò)過(guò)示例代碼詳細(xì)介紹Golang中互斥鎖和讀寫(xiě)互斥鎖,需要的朋友可以參考下
    2023-05-05
  • 一文帶你深入理解Golang Context包

    一文帶你深入理解Golang Context包

    在 Go 語(yǔ)言中,Context 包是一種非常常用的工具,它被用來(lái)管理 goroutine 之間的通信和取消。本文將深入探討Context 包的基本原理,包括使用場(chǎng)景、原理和一些最佳實(shí)踐,需要的可以參考下
    2023-05-05
  • Golang中make與new使用區(qū)別小結(jié)

    Golang中make與new使用區(qū)別小結(jié)

    Go語(yǔ)言中new和make是內(nèi)建的兩個(gè)函數(shù),主要用來(lái)創(chuàng)建分配類(lèi)型內(nèi)存,本文主要給大家介紹了Go語(yǔ)言中函數(shù)new與make的使用和區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 一文帶你深入了解Go語(yǔ)言中的事務(wù)

    一文帶你深入了解Go語(yǔ)言中的事務(wù)

    事務(wù)中止時(shí),你結(jié)束事務(wù)了嗎?在開(kāi)發(fā)時(shí)有可能就會(huì)犯這樣的錯(cuò)誤,其問(wèn)題就是你在提交事務(wù)時(shí),如果中間有其他業(yè)務(wù)就取消操作,那么事務(wù)也關(guān)閉了嗎?本文就來(lái)詳細(xì)講講
    2023-04-04
  • Go語(yǔ)言實(shí)現(xiàn)彩色輸出示例詳解

    Go語(yǔ)言實(shí)現(xiàn)彩色輸出示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言實(shí)現(xiàn)彩色輸出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    fmt包實(shí)現(xiàn)了類(lèi)似C語(yǔ)言printf和scanf的格式化I/O,主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分,本文就來(lái)介紹一下GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用,感興趣的可以了解下
    2023-10-10
  • 一文掌握Go語(yǔ)言并發(fā)編程必備的Mutex互斥鎖

    一文掌握Go語(yǔ)言并發(fā)編程必備的Mutex互斥鎖

    Go 語(yǔ)言提供了 sync 包,其中包括 Mutex 互斥鎖、RWMutex 讀寫(xiě)鎖等同步機(jī)制,本篇博客將著重介紹 Mutex 互斥鎖的基本原理,需要的可以參考一下
    2023-04-04
  • Go語(yǔ)言中反射的正確使用

    Go語(yǔ)言中反射的正確使用

    Go本身不支持模板,因此在以往需要使用模板的場(chǎng)景下往往就需要使用反射(reflect). 反射使用多了以后會(huì)容易上癮,有些人甚至?xí)纬梢环N莫名其妙的鄙視鏈。下面這篇文章就給大家介紹了如何正確使用Go語(yǔ)言中的反射以及在使用前的注意,有需要的朋友們下面來(lái)一起看看吧。
    2016-12-12

最新評(píng)論