欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

概述

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

業(yè)務(wù)場景

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

設(shè)計方案

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

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

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

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

數(shù)據(jù)

拆分微服務(wù)最大的兩個問題是數(shù)據(jù)的一致性性能,系統(tǒng)性能的瓶頸主要是因為計算機Cpu,內(nèi)存(memory/內(nèi)存條、cache/Cpu的內(nèi)存) 是非??斓模械男阅軉栴}大同小異,磁盤I/O往往才是性能的瓶頸。

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

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

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

Go中的Grpc使用

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

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)限驗證部分,Go-zero不支持,所以自己寫了一些兼容包。

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ù),需要實現(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.驗證管理員權(quán)限
	resp, err := client.AdminMid(context.Background(), &pb.UserInternalParams_AdminMidReq{
		Session: Session,
	})
	//3.驗證菜單權(quán)限
	auth, err := client.AdminAuth(context.Background(), &pb.UserInternalParams_AdminAuthReq{
			Action:     Action,
			Controller: Controller,
			Param:      Param,
			Session:    Session,
		})
	//....
}

問題和反思

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

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

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

相關(guān)文章

  • Golang編程實現(xiàn)生成n個從a到b不重復(fù)隨機數(shù)的方法

    Golang編程實現(xiàn)生成n個從a到b不重復(fù)隨機數(shù)的方法

    這篇文章主要介紹了Golang編程實現(xiàn)生成n個從a到b不重復(fù)隨機數(shù)的方法,結(jié)合實例形式分析了Go語言字符串操作及隨機數(shù)生成的相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 詳解Golang中strconv庫的用法

    詳解Golang中strconv庫的用法

    strconv包提供了字符串和基本數(shù)據(jù)類型之間的相互轉(zhuǎn)換功能,本文將帶大家深入了解Go語言標(biāo)準(zhǔn)庫中的strconv包,掌握其常用的函數(shù)和用法,希望對大家有所幫助
    2023-06-06
  • Go語言實現(xiàn)AES加密并編寫一個命令行應(yīng)用程序

    Go語言實現(xiàn)AES加密并編寫一個命令行應(yīng)用程序

    密碼學(xué)中的高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是經(jīng)常采用的一種區(qū)塊加密標(biāo)準(zhǔn)。本文就來用Go語言實現(xiàn)AES加密算法,需要的可以參考一下
    2023-02-02
  • Go實現(xiàn)文件分片上傳

    Go實現(xiàn)文件分片上傳

    這篇文章主要為大家詳細介紹了Go實現(xiàn)文件分片上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    這篇文章主要和大家分享一下Go語言中的分支結(jié)構(gòu)(if?-?else-if?-?else、switch),文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • Golang http包構(gòu)建RESTful API的實現(xiàn)

    Golang http包構(gòu)建RESTful API的實現(xiàn)

    在Go語言中實現(xiàn)RESTful API可以利用標(biāo)準(zhǔn)庫net/http提供的功能,它允許你輕松地創(chuàng)建和處理HTTP請求,本文主要介紹了Golang http包構(gòu)建RESTful API的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • go解析svn log生成的xml格式的文件

    go解析svn log生成的xml格式的文件

    這篇文章主要介紹了go解析svn log生成的xml格式的文件的方法,非常的實用,有需要的小伙伴可以參考下。
    2015-04-04
  • 使用Golang調(diào)用攝像頭并進行圖像處理

    使用Golang調(diào)用攝像頭并進行圖像處理

    近年來,攝像頭成為了我們生活中不可或缺的設(shè)備之一,從智能手機到安全監(jiān)控系統(tǒng),無處不在的攝像頭給我們帶來了便利和安全,在開發(fā)攝像頭相關(guān)的應(yīng)用程序時,選擇一種高效和易用的編程語言是非常重要的,本文將介紹如何使用Golang調(diào)用攝像頭并進行圖像處理
    2023-11-11
  • go語言分布式id生成器及分布式鎖介紹

    go語言分布式id生成器及分布式鎖介紹

    這篇文章主要為大家介紹了go語言分布式id生成器及分布式鎖介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • go micro集成鏈路跟蹤的方法和中間件原理解析

    go micro集成鏈路跟蹤的方法和中間件原理解析

    這篇文章主要介紹了go-micro集成鏈路跟蹤的方法和中間件原理,關(guān)于Http或者說是Restful服務(wù)的鏈路跟蹤,go-micro的httpClient支持CallWrapper,可以用WrapCall來添加鏈路跟蹤的CallWrapper,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-05-05

最新評論