go-zero
参考
简介
go zero
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。(抄自官网go-zero 缩短从需求到上线的距离)
微服务
所谓的微服务就是,微小的服务。
为什么大型公司喜欢使用微服务呢?既然大型公司的大型项目,为什么又叫做微服务呢?
所谓的微服务就是将一个大的项目做了一个拆分,然后组成一个大型的项目
为什么需要微服务呢?
相比于单体项目,使用单个文件执行的项目,比如go就可以直接使用可以执行的文件。java 使用jar 包 进行部署,叫做单体项目
但是使用微服务的话,每一个模块,分配就更好,团队合作的效率也会更高
什么时候使用go-zero
虽然go-zero 这么多功能,我们也不应该直接使用完全的无脑的上go-zero
很多小型的项目其实并不需要使用微服务,单体的服务更有利于部署,拆分成多个微服务,造成的代码分层,代码复杂度就一下就上去了
go-zero 项目结构
- 每一个微服务就是一个目录
- 如果微服务数量比较少,就可以直接放根目录下
- 如果微服务的数量多,可以使用一个在根目录先放一个apps 然后将所有的微服务放入里面
环境安装
安装goctl(go-zero)
1 |
|
安装protoc
1 |
|
由于go get 需要依赖于go module 我们可以创建一个项目
1 |
|
生成api
由于我们这里微服务的数量很少,所以直接将微服务放在了根文件
1 |
|
现在的项目结构
在api.api中,就是每一个api 相关的信息
我们开发者重点放于internal里面的logic 里面完善自己的逻辑
然后添加对应的东西
1 |
|
现在就可以开启一个server 了
1 |
|
创建rpc 服务
注意rpc 服务名字,尽量不要使用’rpc’
1 |
|
etcd
简介
Etcd是一个高可用的分布式键值存储系统,主要用于共享配置信息和服务发现。它采用Raft一致性算法来保证数据的强一致性,并且支持对数据进行监视和更新
可以简单的说是一个加强版的redis
主要是用于微服务的配置中心,服务发现
在传统的服务中,使用配置文件的形式,标注每一个微服务的位置在哪里?但是这有一个问题就是如果微服务的地址发生了变化,那么对应的就需要修改对应配置文件项,然后重启对应的微服务。
使用etcd 的方式的话,我们就可以使用键值对的形式,使用key 最为服务的查询条件,并写入到配置文件中,每一个更新就需要更新key 对应的value 然后使用读取key 的value 的方式,取出对应的地址,就可以完成整个服务的连接