您好,登錄后才能下訂單哦!
本篇內容介紹了“企業項目如何遷移go-zero”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
最先接觸go-zero是2020年10月國慶假期,說來也巧,看到有人在go-micro群中問go-zero情況,當時go-zero作者在群中就大概回答了一下,引起了我的好奇,當時公司用的go-micro1.x,因為go-micro版本真的太混亂了,2還沒多少人用明白,現在又搞了個3,而且這幾個大版本之間高度不兼容,簡直一團糟。我抱著好奇心去github.com查看了go-zero,當時并沒有因為它的star數、文檔少而放棄,哈哈,抱著試玩的心態去go get它,從此發現了新大陸,并加入了go-zero群,開始了go-zero之旅。
微服務:在現在這個大環境下,單體服務詬病已經越來越多了,項目大起來之后 “牽一發而動全身” 的教訓比比皆是,維護越來越困難,測試測起來也是很頭疼,構建速度慢等等,在這樣趨勢下擁抱微服務成為了大趨勢,go-zero就是一個微服務框架并且能為我解決很多實際項目中遇到的痛點、難點
穩定性:內外同源。穩定性是我很看重的,他們公司內外同源勢必保證了此框架的穩定性。
高并發:經歷了2020年疫情期間,“曉黑板” 輕松獲得支撐千萬日活服務
工作效率:說到工作效率,必須要提的就是goctl,goctl配合go-zero所有代碼基本都是可以通過這個工具生成,只需要關心自己的業務邏輯即可,包括一鍵生成dockerfile,k8s的yaml文件,簡直不要太爽,大大提高了工作效率
代碼質量:大概看了一些go-zero的源碼,代碼質量上感覺還是沒得噴的,至少感覺比我自己寫的好很多,哈哈,這個每個人看法不同,大家可以去親自看一下。
團隊:當時加了go-zero作者微信,感覺他為人很謙和,無論問一些比較基礎的東西還是一些線上實戰經驗,也總是會耐心給我解答、意見,在使用期間我也提了一些bug,go-zero團隊都能及時的解決,迭代速度真的讓我驚艷。大家應該都知道,在國內做開源有多么不容易。
對比go其他微服務框架:go的微服務框架大概我玩過go-micro、go-kit、kratos、rpcx、go-zero。
go-micro我開始就說了是版本真心有點混亂
go-kit也不錯但是資料相對來說較少
kratos經過b站源碼泄漏大家應該都知道它了,前一段時間都斷更了,差點安樂死,毛神在issue中說太忙了,不過他們在出2.0版本了,還是很期待
rpcx 玩了一下玩的不多,但是他們宣傳是“好未來”也在用,go-zero就是“好未來”的呀,哈哈
go-zero 上面我都說過了,就不再提了。
在介紹go-zero實際使用前,先說一下整體架構,更方便理解
Step1:本地deveploer開發好代碼之后提交到gitlab(這里分支就不詳細說明了)
Step2:jenkins,使用pipline方式部署
從gitlab拉取代碼
docker build ,基于最新gitlab上的code構建鏡像
docker push,將構建好的鏡像推送到鏡像倉庫(當然一般都是有自己私有鏡像倉庫比如harbor,用阿里云的也可以)
kubectl apply -f xxx.yaml :使用kubectl 部署到k8s中 (阿里云k8s容器服務那么好用,不用豈不可惜?)
kubectl部署之后,k8s就會根據你的service中的yaml定義的鏡像來你的鏡像倉庫拉取剛才你打包的最新鏡像,so~~上線成功啦!
嗯,有的同學說,阿里云k8s好用是好用,可是我不會寫or不想寫Dockerfile,不會寫k8s的yaml or 不想寫,沒關系,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 透過防火墻,首先訪問到阿里云的負載均衡SLB,同時SLB可以將你的后端服務器ip隱藏起來,同時可以預防DDOS攻擊,雖然有額度的,但是好過沒有~~,然后SLB訪問到前面的nginx,nginx作為代理使用,k8s中的service通過 nodeport方式暴露出來在nignx中代理到該service,同時在nginx中上報日志到kafka,然后api可以在etcd中拿到多個rpc節點,調用多個后端rpc服務,rpc負責跟db交互、或者調用其他rpc獲取數據(當然api、rpc之間是通過etcd動態發現的)返回給api,api就是聚合數據,然后層層返回到客戶端。
整體架構都是高可用高可用
項目地址:https://github.com/Mikaelemmmm/gozerobasic
go的項目比較靈活不像java已經形成統一標準化了,所以對于不同項目的結構都不一樣,我的做法是如下:
整個項目使用的一個大倉,項目fishtwo根目錄下:
app : 應用內部程序
build:構建、以及腳本等
lib:應用程序用到的內部庫
app下分為3個模塊:
gateway:api服務
services: rpc服務
jobs:日常要處理的任務(這個可以使用 go-zero
作者的 go-queue
,測試了下很好用,哈哈,后面搞好也會寫進來)
“企業項目如何遷移go-zero”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。