作者:Mikael
最近发现 golang
社区里出了一个新兴的微服务框架。看了一下官方提供的工具真的很好用,只需要定义好 .api
文件模版代码都可以一键生成,只需要关心业务;同时 core
中的工具极大减少了开发成本。
废话不多说,来看看这个微服务框架: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实际使用前,先说一下整体架构,更方便理解
Step1:本地deveploer开发好代码之后提交到gitlab(这里分支就不详细说明了)
Step2:jenkins,使用pipline方式部署
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根目录下:
下一篇我们来看看:
gateway 服务
?rpc 服务
?jobs
怎么定义?怎么和项目结合?未完待续~~~
https://github.com/tal-tech/go-zero
欢迎使用 go-zero 并 star 支持我们 👍
领取专属 10元无门槛券
私享最新 技术干货