1. 接口
前言: go-micro 接口的描述
Go Micro 是一个可插拔的框架, 它利用接口进行抽象和构建基块. 这使我们能够为基础分布式系统概念创建定义强的抽象, 并可置换实现.
1.1. 接口
Go micro 由以下接口列表组成:
- auth - 用于身份验证和授权
- broker - 异步消息传递
- client - 用于高级别请求/响应和通知
- config - 用于动态配置的
- codec - 用于消息编码的
- debug - 调式日志, 跟踪, 统计信息
- netwrok - 多云的网络
- registry - 服务发现的注册表
- runtime - 用于运行服务
- selector - 用于负载平衡
- server - 用于处理请求和通知
- store - 用于数据存储
- sync - 用于同步, 锁和选举领导
- transport - 用于同步通信
- tunnel - 用于 vpn 隧道
有关每个接口的说明, 请参阅下文
待办: 填补空白
1.1.1. 代理
代理为异步 pub/sub 子通信提供消息代理的接口. 这是事件驱动体系结构和微服务的基本要求之一. 默认情况下, 我们使用收件箱样式点来点 HTTP 系统, 以尽量减少开始所需的依赖项数. 但是在 go-plugins 中有许多消息代理实现, 例如 RabbitMQ, NATS, NSQ, Google Cloud Pub Sub.
1.1.2. 客户端
客户端提供一个接口来向服务发出请求. 同样与服务器一样, 它构建在其他包上, 提供统一接口, 用于使用注册表按名称查找服务, 使用选择器进行负载平衡, 使用代理使用传输和异步消息传递进行同步请求.
上述组件在微作为 服务 的顶级级别进行组合.
我们还为分布式系统开发提供了一些其他组件:
1.1.3. 编解码器
编解码器用于编码和解码消息, 然后再通过导线传输消息. 数据可能是 json, protobuf, beson, msgpack 等. 这与大多数其他编解码器的不同之处在于, 我们实际上也支持此处的 RPC 格式. 因此们有 JSON-RPC, PROTO-RPC, BSON-RPC 等. 它将编码与客户端/服务器分离, 并提供集成其他系统 (如 gRPC, Vandium 等) 的强大方法.
1.1.4. 配置
配置是一个接口, 用于从任意数量的源进行动态配置加载, 这些源是可以合并的. 大多数系统都主动要求独立于代码进行更改的配置. 拥有一个配置接口, 可以根据需要动态加载这些值是强大的. 它还支持许多不同的配置格式.
1.1.5. 服务器
服务器是编写服务的构建基块. 在这里, 您可以命名您的服务, 注册请求处理程序, 添加中间件等. 该服务基于上述包, 为服务请求提供统一接口. 内置服务器是 RPC 系统. 将来可能还会有其他实现. 服务器还允许您定义多个编解码器以服务不同的编码消息.
1.1.6. 存储
存储是一个简单的键值存储接口, 用于抽象掉轻量级数据存储. 我们不是试图实现一个完整的 sql 方言或存储, 只是仅仅能够保持状态, 否则将丢失在无状态的服务. 它们存储接口将成为未来所有形式的存储的构建基块.
1.1.7. 注册表
注册表提供一种服务发现机制, 用于将名称解析为地址. 它可以由 consul, etcd zookeeper, dns, gossip 等支持. 服务应在启动时使用注册表进行注册, 并在关闭时取消注册. 服务可以选择提供过期的 TTL 并在间隔内重新注册, 以确保服务在失效时进行清理.
1.1.8. 选择器
选择器是一个负载平衡抽象, 它建立在注册表上. 它允许使用筛选器函数"筛选"服务, 并使用随机, 循环, 最小等算法选择"选择". 客户在发出请求时利用选择器. 客户端将使用选择器而不是注册表, 因为它提供了内置的负载平衡机制.
1.1.9. 传输
传输是服务之间同步请求/响应通信的接口. 它类似于 golang 网络包, 但提供了一个更高级别的抽象, 允许我们切换通信机制, 例如 http, rabbitmq, websocket, NATS. 传输还支持双向流. 这对客户端推送到服务器功能非常强大.