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

Go語(yǔ)言從單體服務(wù)到微服務(wù)設(shè)計(jì)方案詳解

 更新時(shí)間:2023年03月23日 14:35:39   作者:stark張宇  
這篇文章主要為大家介紹了Go語(yǔ)言從單體服務(wù)到微服務(wù)設(shè)計(jì)方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概述

微服務(wù)是一種思想,與編程語(yǔ)言無(wú)關(guān),編程語(yǔ)言是思想下具體的一種實(shí)現(xiàn)方式,怎么設(shè)計(jì)架構(gòu)方案和實(shí)現(xiàn)主要看主要面臨的業(yè)務(wù)場(chǎng)景。

業(yè)務(wù)場(chǎng)景

主站核心業(yè)務(wù)使用的是yaf(php)開(kāi)發(fā)的,要實(shí)現(xiàn)k8s + x編程語(yǔ)言 自主微服務(wù)實(shí)現(xiàn),受到陳皓(左耳聽(tīng)風(fēng))的影響,我選用的編程語(yǔ)言是Go,Go語(yǔ)言有更強(qiáng)大的生態(tài),有谷歌,k8s作為強(qiáng)大的后盾,摸著石頭過(guò)河。

設(shè)計(jì)方案

Api網(wǎng)關(guān)

提到微服務(wù)我們就聯(lián)想到Rpc,主流微服務(wù)價(jià)格設(shè)計(jì),微服務(wù)之間的調(diào)用都使用Rpc,微服務(wù)也有直接用http實(shí)現(xiàn)的,Rpc限制了開(kāi)發(fā)時(shí)候的靈活性和兼容性,主要3點(diǎn)原因:

1.Http協(xié)議是實(shí)際通信的標(biāo)準(zhǔn),靈活性和兼容性得到了很好的市場(chǎng)驗(yàn)證,對(duì)Rpc我抱有懷疑態(tài)度,在Api層進(jìn)行權(quán)限的統(tǒng)一認(rèn)證( Token/Cookies ) , 后期微服務(wù)體系成熟,可以統(tǒng)一接入Api網(wǎng)關(guān)服務(wù),Api網(wǎng)關(guān)服務(wù)是不可缺少的,全使用Nginx反向代理的方式,再數(shù)據(jù)統(tǒng)計(jì)的角度上局限性。

2.控制異常,如果發(fā)生異常,Rpc服務(wù)掛掉或者遭到網(wǎng)絡(luò)攻擊/刷請(qǐng)求,請(qǐng)求會(huì)直接打到Rpc上,如果有網(wǎng)關(guān)層,可以在Redis中加Redis鎖,把無(wú)效的網(wǎng)絡(luò)請(qǐng)求進(jìn)行隔離。

數(shù)據(jù)

拆分微服務(wù)最大的兩個(gè)問(wèn)題是數(shù)據(jù)的一致性性能,系統(tǒng)性能的瓶頸主要是因?yàn)橛?jì)算機(jī)Cpu,內(nèi)存(memory/內(nèi)存條、cache/Cpu的內(nèi)存) 是非??斓?,所有的性能問(wèn)題大同小異,磁盤(pán)I/O往往才是性能的瓶頸。

1.數(shù)據(jù)的一致性的解決辦法

模塊化拆分和遷移微服務(wù)功能,把涉及到的整塊進(jìn)行遷移,可以按比重分流/整體功能進(jìn)行,按比重分流要保留新舊數(shù)據(jù)的兼容,需要雙寫(xiě),現(xiàn)在的有聲業(yè)務(wù)體量小,可以整塊整塊的遷移。

2.性能:有聲的數(shù)據(jù)量非常小,暫時(shí)不使用redis緩存可能也不會(huì)造成什么性能問(wèn)題,所以我把很小的公共部分進(jìn)行了緩存,主要考慮C端用戶的體驗(yàn)。

Go中的Grpc使用

Go-zero這個(gè)框架使用goctl工具開(kāi)發(fā)速度非常高效,對(duì)調(diào)用外部的Grpc服務(wù)需要做更多的兼容,這里做一個(gè)解釋說(shuō)明,protoc-gen-go、protoc-gen-go-grpc這兩個(gè)工具是protobuf的工具,是Go 1.5版本后新加的,這個(gè)地方饒了好大一圈。

GitHub Demo 地址 : github.com/grpc/grpc-g…

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

在有聲微服務(wù)中,是調(diào)用UserRpc的權(quán)限驗(yàn)證部分,Go-zero不支持,所以自己寫(xiě)了一些兼容包。

1.首先pb文件生成Pb和Grpc文件

$ ll
-rw-r--r--  1 stark  staff    69K  3 20 15:51 cp_user_internal.pb.go
-rw-r--r--  1 stark  staff    34K  3 20 15:51 cp_user_internal_grpc.pb.go

2.調(diào)用UserRpc服務(wù),需要實(shí)現(xiàn)的包是客戶端部分代碼,本地需要TLS加密,服務(wù)才能被調(diào)用的到,grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))是TLS靈魂。

package client
func Auth(Session string, Action string, Controller string, Param string) bool {
    // 1.建立鏈接
    flag.Parse()
	conn, err := grpc.Dial("testing.gongzicp.com:1443", grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	client := pb.NewUserInternalClient(conn)
	//2.驗(yàn)證管理員權(quán)限
	resp, err := client.AdminMid(context.Background(), &pb.UserInternalParams_AdminMidReq{
		Session: Session,
	})
	//3.驗(yàn)證菜單權(quán)限
	auth, err := client.AdminAuth(context.Background(), &pb.UserInternalParams_AdminAuthReq{
			Action:     Action,
			Controller: Controller,
			Param:      Param,
			Session:    Session,
		})
	//....
}

問(wèn)題和反思

1.有聲服務(wù)和主站的關(guān)聯(lián)非常小,但是也有關(guān)聯(lián)NovelId獲取信息的部分,Novel屬于核心服務(wù),可能每一個(gè)地方的需要都不少。

2.Web端(Ukey) 、App安卓/Ios(Token) 本質(zhì)上是一個(gè)維度的東西,類型上應(yīng)該只用戶/和系統(tǒng)管理員2種類型,最好是把服務(wù)類抽離出來(lái)做成單獨(dú)的服務(wù),可能會(huì)更好一些。

以上就是Go語(yǔ)言從單體服務(wù)到微服務(wù)設(shè)計(jì)方案詳解的詳細(xì)內(nèi)容,更多關(guān)于Go單體服務(wù)微服務(wù)設(shè)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go中stdout/stderr/println混用導(dǎo)致非確定性輸出的解決方法

    Go中stdout/stderr/println混用導(dǎo)致非確定性輸出的解決方法

    文章解析了Go中混用fmt.Println、fmt.Fprintln(os.Stdout)和println導(dǎo)致的非確定性輸出問(wèn)題,詳細(xì)分析了不同輸出方式的底層實(shí)現(xiàn)和原因,并提出在生產(chǎn)代碼中應(yīng)統(tǒng)一使用標(biāo)準(zhǔn)日志庫(kù)和標(biāo)準(zhǔn)輸出流的建議,需要的朋友可以參考下
    2026-04-04
  • go中普通map和sync.map的區(qū)別小結(jié)

    go中普通map和sync.map的區(qū)別小結(jié)

    本文主要介紹了go中普通map和sync.map的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 深入探究Golang中l(wèi)og標(biāo)準(zhǔn)庫(kù)的使用

    深入探究Golang中l(wèi)og標(biāo)準(zhǔn)庫(kù)的使用

    Go?語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的?log?包設(shè)計(jì)簡(jiǎn)潔明了,易于上手,可以輕松記錄程序運(yùn)行時(shí)的信息、調(diào)試錯(cuò)誤以及跟蹤代碼執(zhí)行過(guò)程中的問(wèn)題等。本文主要來(lái)深入探究?log?包的使用和原理,幫助讀者更好地了解和掌握它
    2023-05-05
  • Go語(yǔ)言切片??嫉拿嬖囌骖}解析

    Go語(yǔ)言切片??嫉拿嬖囌骖}解析

    了解最新的Go語(yǔ)言面試題型,讓面試不再是難事,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言切片面試常考的一些問(wèn)題,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Go語(yǔ)言使用對(duì)稱加密的示例詳解

    Go語(yǔ)言使用對(duì)稱加密的示例詳解

    在項(xiàng)目開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到需要使用對(duì)稱密鑰加密的場(chǎng)景,比如客戶端調(diào)用接口時(shí),參數(shù)包含手機(jī)號(hào)、身份證號(hào)或銀行卡號(hào)等。本文將詳細(xì)講解Go語(yǔ)言使用對(duì)稱加密的方法,需要的可以參考一下
    2022-06-06
  • Golang::slice和nil的對(duì)比分析

    Golang::slice和nil的對(duì)比分析

    這篇文章主要介紹了Golang::slice和nil的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言單向通道的實(shí)現(xiàn)

    Go語(yǔ)言單向通道的實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言單向通道的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go模塊布局管理文檔翻譯理解

    Go模塊布局管理文檔翻譯理解

    這篇文章主要為大家介紹了Go模塊布局管理文檔翻譯理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang多線程下載器實(shí)現(xiàn)高效快速地下載大文件

    Golang多線程下載器實(shí)現(xiàn)高效快速地下載大文件

    Golang多線程下載器是一種高效、快速地下載大文件的方法。Golang語(yǔ)言天生支持并發(fā)和多線程,可以輕松實(shí)現(xiàn)多線程下載器的開(kāi)發(fā)。通過(guò)使用Golang的協(xié)程和通道,可以將下載任務(wù)分配到多個(gè)線程中并行處理,提高了下載的效率和速度
    2023-05-05
  • Go語(yǔ)言提升開(kāi)發(fā)效率的語(yǔ)法糖技巧分享

    Go語(yǔ)言提升開(kāi)發(fā)效率的語(yǔ)法糖技巧分享

    每門(mén)語(yǔ)言都有自己的語(yǔ)法糖,像java的語(yǔ)法糖就有方法變長(zhǎng)參數(shù)、拆箱與裝箱、枚舉、for-each等等,Go語(yǔ)言也不例外。本文就來(lái)介紹一些Go語(yǔ)言的語(yǔ)法糖,需要的可以參考一下
    2022-07-07

最新評(píng)論

古浪县| 晋中市| 泰宁县| 西宁市| 繁峙县| 维西| 泾川县| 金昌市| 剑河县| 汉寿县| 张家港市| 绥滨县| 文水县| 夏河县| 大港区| 涪陵区| 乡宁县| 南华县| 七台河市| 贡山| 青岛市| 涿鹿县| 仁化县| 高邑县| 忻城县| 大兴区| 尉氏县| 锦屏县| 依兰县| 吴川市| 聂荣县| 饶阳县| 肇东市| 祁阳县| 岚皋县| 西青区| 金湖县| 伊川县| 龙川县| 宣汉县| 洛川县|