溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

企業(yè)項(xiàng)目如何遷移go-zero

發(fā)布時間:2021-10-20 09:28:31 來源:億速云 閱讀:135 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“企業(yè)項(xiàng)目如何遷移go-zero”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

起源

聊聊與go-zero結(jié)緣

最先接觸go-zero是2020年10月國慶假期,說來也巧,看到有人在go-micro群中問go-zero情況,當(dāng)時go-zero作者在群中就大概回答了一下,引起了我的好奇,當(dāng)時公司用的go-micro1.x,因?yàn)間o-micro版本真的太混亂了,2還沒多少人用明白,現(xiàn)在又搞了個3,而且這幾個大版本之間高度不兼容,簡直一團(tuán)糟。我抱著好奇心去github.com查看了go-zero,當(dāng)時并沒有因?yàn)樗膕tar數(shù)、文檔少而放棄,哈哈,抱著試玩的心態(tài)去go get它,從此發(fā)現(xiàn)了新大陸,并加入了go-zero群,開始了go-zero之旅。

選擇它的幾點(diǎn)原因

  • 微服務(wù):在現(xiàn)在這個大環(huán)境下,單體服務(wù)詬病已經(jīng)越來越多了,項(xiàng)目大起來之后 “牽一發(fā)而動全身” 的教訓(xùn)比比皆是,維護(hù)越來越困難,測試測起來也是很頭疼,構(gòu)建速度慢等等,在這樣趨勢下?lián)肀⒎?wù)成為了大趨勢,go-zero就是一個微服務(wù)框架并且能為我解決很多實(shí)際項(xiàng)目中遇到的痛點(diǎn)、難點(diǎn)

  • 穩(wěn)定性:內(nèi)外同源。穩(wěn)定性是我很看重的,他們公司內(nèi)外同源勢必保證了此框架的穩(wěn)定性。

  • 高并發(fā):經(jīng)歷了2020年疫情期間,“曉黑板” 輕松獲得支撐千萬日活服務(wù)

  • 工作效率:說到工作效率,必須要提的就是goctl,goctl配合go-zero所有代碼基本都是可以通過這個工具生成,只需要關(guān)心自己的業(yè)務(wù)邏輯即可,包括一鍵生成dockerfile,k8s的yaml文件,簡直不要太爽,大大提高了工作效率

  • 代碼質(zhì)量:大概看了一些go-zero的源碼,代碼質(zhì)量上感覺還是沒得噴的,至少感覺比我自己寫的好很多,哈哈,這個每個人看法不同,大家可以去親自看一下。

  • 團(tuán)隊(duì):當(dāng)時加了go-zero作者微信,感覺他為人很謙和,無論問一些比較基礎(chǔ)的東西還是一些線上實(shí)戰(zhàn)經(jīng)驗(yàn),也總是會耐心給我解答、意見,在使用期間我也提了一些bug,go-zero團(tuán)隊(duì)都能及時的解決,迭代速度真的讓我驚艷。大家應(yīng)該都知道,在國內(nèi)做開源有多么不容易。

  • 對比go其他微服務(wù)框架:go的微服務(wù)框架大概我玩過go-micro、go-kit、kratos、rpcx、go-zero。

    • go-micro我開始就說了是版本真心有點(diǎn)混亂

    • go-kit也不錯但是資料相對來說較少

    • kratos經(jīng)過b站源碼泄漏大家應(yīng)該都知道它了,前一段時間都斷更了,差點(diǎn)安樂死,毛神在issue中說太忙了,不過他們在出2.0版本了,還是很期待

    • rpcx 玩了一下玩的不多,但是他們宣傳是“好未來”也在用,go-zero就是“好未來”的呀,哈哈

    • go-zero 上面我都說過了,就不再提了。

設(shè)計架構(gòu)

在介紹go-zero實(shí)際使用前,先說一下整體架構(gòu),更方便理解

企業(yè)項(xiàng)目如何遷移go-zero

CI/CD

Step1:本地deveploer開發(fā)好代碼之后提交到gitlab(這里分支就不詳細(xì)說明了)

Step2:jenkins,使用pipline方式部署

  • 從gitlab拉取代碼

  • docker build ,基于最新gitlab上的code構(gòu)建鏡像

  • docker push,將構(gòu)建好的鏡像推送到鏡像倉庫(當(dāng)然一般都是有自己私有鏡像倉庫比如harbor,用阿里云的也可以)

  • kubectl apply -f xxx.yaml :使用kubectl 部署到k8s中 (阿里云k8s容器服務(wù)那么好用,不用豈不可惜?)

kubectl部署之后,k8s就會根據(jù)你的service中的yaml定義的鏡像來你的鏡像倉庫拉取剛才你打包的最新鏡像,so~~上線成功啦!

嗯,有的同學(xué)說,阿里云k8s好用是好用,可是我不會寫or不想寫Dockerfile,不會寫k8s的yaml or 不想寫,沒關(guān)系,goctl說放開它,讓我來

生成 Dockerfile

$ goctl docker -go user.go

生成k8s yaml

$ goctl kube deploy -name user-api -namespace blog -image user:v1 -o user.yaml -port 2233

所以,就是這么簡單

訪問流程

app/web/pc 透過防火墻,首先訪問到阿里云的負(fù)載均衡SLB,同時SLB可以將你的后端服務(wù)器ip隱藏起來,同時可以預(yù)防DDOS攻擊,雖然有額度的,但是好過沒有~~,然后SLB訪問到前面的nginx,nginx作為代理使用,k8s中的service通過 nodeport方式暴露出來在nignx中代理到該service,同時在nginx中上報日志到kafka,然后api可以在etcd中拿到多個rpc節(jié)點(diǎn),調(diào)用多個后端rpc服務(wù),rpc負(fù)責(zé)跟db交互、或者調(diào)用其他rpc獲取數(shù)據(jù)(當(dāng)然api、rpc之間是通過etcd動態(tài)發(fā)現(xiàn)的)返回給api,api就是聚合數(shù)據(jù),然后層層返回到客戶端。

整體架構(gòu)都是高可用高可用

項(xiàng)目設(shè)計

項(xiàng)目地址:https://github.com/Mikaelemmmm/gozerobasic

go的項(xiàng)目比較靈活不像java已經(jīng)形成統(tǒng)一標(biāo)準(zhǔn)化了,所以對于不同項(xiàng)目的結(jié)構(gòu)都不一樣,我的做法是如下:

企業(yè)項(xiàng)目如何遷移go-zero

整個項(xiàng)目使用的一個大倉,項(xiàng)目fishtwo根目錄下:

  • app : 應(yīng)用內(nèi)部程序

  • build:構(gòu)建、以及腳本等

  • lib:應(yīng)用程序用到的內(nèi)部庫

  • app下分為3個模塊:

    • gateway:api服務(wù)

    • services: rpc服務(wù)

    • jobs:日常要處理的任務(wù)(這個可以使用 go-zero 作者的 go-queue ,測試了下很好用,哈哈,后面搞好也會寫進(jìn)來)

“企業(yè)項(xiàng)目如何遷移go-zero”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI