1. 概述
前言: Go Micro 是一个微服务开发的框架
2. 概述
Go Micro 为分布式系统开发 (包括 RPC 和事件驱动通信) 提供了核心要求. micro 的理念是具有可插拔架构的默认实践. 我们提供默认值, 让您快速入门, 但一切都可以轻松置换.
2.1. 特性
Go Micro 抽象了分布式系统的详细信息. 以下是主要功能.
- 服务发现 - 自动服务注册和名称解析. 服务发现是微服务开发的核心. 当服务 A 需要与服务 B 说话时, 它需要该服务的位置. 默认发现机制是多播 DNS (mdns), 这是一个零配置的发现系统.
- 负载平衡 - 基于服务发现构建的客户端负载平衡. 一旦我们拥有服务任意数量的实例的地址, 我们现在需要一种方法来决定要路由到哪个节点. 我们使用随机哈希负载平衡来跨服务提供均匀分布, 并在出现问题时重试其他节点.
- 消息编码 - 基于内容类型的动态消息编码. 客户端和服务器将使用编解码器以及内容类型来无缝编码和解码 Go 类型. 可以编码和从不同的客户端发送任何种类的消息. 默认情况下, 客户端和服务器处理此情况. 默认情况下, 这包括 protobuf 和 json.
- 请求/响应 - 基于 RPC 的请求/响应, 支持双向流式处理. 我们为同步通信提供抽象. 对服务发出的请求将自动解析, 负载平衡, 拨号和流式传输. 默认传输为 gRPC。
- 异步消息 - PubSub 是作为异步通信和事件驱动架构的一等公民而构建的. 事件通知是微服务开发的核心模式. 默认的消息系统是嵌入式 NATS 服务器.
- 可插拔接口- Go Micro 为每个分布式系统抽象使用 Go 接口. 因此这些接口是可插拔的, 并允许 Go Micro 与运行时无关. 您可以插入任何基础技术. 在 github.com/micro/go-plugins 中查找插件.
2.2. 开始
2.3. 依赖
默认情况下, Go Micro 会使用原型. 因此我们可以编写生成样板代码的代码, 并提供有效的线格式, 以便在服务之间来回传输数据.
我们还需要某种形式的服务发现, 以便将服务名称解析为其地址以及元数据和终结点信息. 有关详细信息, 请参阅下文.
2.3.1. Protobuf
您需要安装 protobuf 以生成 API 接口的代码:
2.3.2. 发现
服务发现用于将服务名称解析为地址. 默认情况下, 我们使用多播 DNS 提供零配置的发现系统. 这是在大多数操作系统上是内置的. 如果您需要更具弹性和多主机的东西, 请使用 etcd.
2.3.3. Etcd
etcd 可用作替代服务发现系统.
- 下载并运行 etdc
- 传递给任何命令或环境变量
--registry=etcd``MICRO_REGISTRY=etcd
MICRO_REGISTRY=etcd go run main.go
服务发现是可插拔的. 可在 micro/go-plugins 仓库中寻到 consul, kubernetes, zookeeper 和更多插件.
2.4. 安装
Go Micro 是基于 Go 的开发的框架. 您可以使用 go 工具链轻松获取此功能.
在服务中导入 go-micro
import "github.com/micro/go-micro/v2"
我们提供发布标签, 并建议坚持使用最新的稳定版本. 使用 go 模块将启用此功能.
# enable go modules
export GO111MODULE=on
# initialise go modules in your app
go mod init
# now go get
go get ./...
2.5. 编写服务
可以从检出 hello world 的例子开始