Micro 介绍
Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。
组成
Micro 主要有三部分组成:
go-micro - 开发 sdk, 包含了 RPC 框架,服务发现,消息订阅 / 发布 等功能.
go-plugins - micro 插件
micro - Micro 提供的管理工具,包含了 API 网关,仪表盘,RPC 代理等功能.
go-micro
Micro 的主要开发 SDK, 里面包含了开发所用到的常用功能模块,主要模块之间关系如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-aMoGDYQl-1585099608719)(https://micro.mu/docs/images/go-micro.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-aMoGDYQl-1585099608719)(https://micro.mu/docs/images/go-micro.png)]
模块 | 说明 |
---|---|
services | 微服务,提供了对微服务功能开发的封装,通过它可以快速创建一个微服务. |
client | RPC 客户端,提供了诸如 服务发现 / 负载均衡 / RPC 代理和调用。以及失败时的重试 / 超时 / 上下文等功能。 |
server | RPC 服务端,提供了如何实现 RPC 请求的方法,功能逻辑主要使用这个实现. |
codec | 数据编码 模块,提供将程序调用数据转换成 RPC 调用数据的功能。目前支持: json /protobuf |
broker | pub/sub 模块,提供事件 发布 / 订阅 功能,目前支持: nats /rabbitmq/http (开发) |
transport | 数据传输 模块,通过抽象实现对传输协议的无缝替换。目前支持: http /rabbitmq/nats |
regediry | 服务发现 模块,提供 集群的服务发现功能,目前支持: consul /etcd/memory /kubernetes |
selector | 负载均衡 模块,当 client 发出请求时,它负责在多个满足条件的服务器列表中决定使用哪个服务器,目前支持:循环 / 哈希 / 黑名单 |
go-plugins
没研究…
micro 工具
micro 工具 是 Micro 提供的一个管理工具,主要分为以下几个功能:
命令 | 说明 |
---|---|
api | API 网关,将 HTTP 请求转换为 RPC 并转发给相应的服务。 |
web | micro 提供了一个默认管理界面,并且已 HTTP 方式提供了 对 srv 服务的代理。 |
new | 生成模板代码,帮助你快速创建项目. |
cli | 可以通过命令行来和 micro 交互. |
bot | 机器人?具体的还没有接触 |
proxy | 代理?还没研究清楚 |
micro-api
API 网关或代理,将 HTTP 请求转换为 RPC 并转发给相应的服务。以便使用一个入口点来访问微服务.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-WUJkzbR1-1585099608728)(https://micro.mu/docs/images/api.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-WUJkzbR1-1585099608728)(https://micro.mu/docs/images/api.png)]
使用入门:
- 安装
1
| go get -u github.com/micro/micro
|
- 运行
1
micro api
使用 ACME
需要设置环境变量: MICRO_ENABLE_ACME=true
1 2 3 4 5 6 7 8 9 10 | linux: MICRO_ENABLE_ACME=true micro api windows: set MICRO_ENABLE_ACME=true && micro api 也可以指定主机白名单: linux: MICRO_ENABLE_ACME=true \ MICRO_ACME_HOSTS=example.com,api.example.com \ micro api |
开启 HTTPS
需要设置环境变量: MICRO_ENABLE_TLS=true
1 2 3 4 5 | linux: MICRO_ENABLE_TLS=true \ MICRO_TLS_CERT_FILE=/path/to/cert \ MICRO_TLS_KEY_FILE=/path/to/key \ micro api |
设置命名空间
默认名称空间为 go.micro.api, 名称空间和路径用于解析服务名称 / 方法
1 2 | linux: MICRO_NAMESPACE=com.example.api micro api |
micro-web
提供了一个仪表盘以及对服务的查看和查询功能。并且提供了一个对 rpc 的反向代理.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-vQfc6Q2z-1585099608729)(https://micro.mu/docs/images/web.png)]
API:
1 2 3 4 | - / (UI) - 仪表盘 - / rpc - RPC 代理 - / stats - 相关统计信息 - / [service] - 查看和查询服务 |
使用入门:
- 安装
1
| go get github.com/micro/micro
|
- 运行
通常
1
| micro web
|
使用 ACME 加密
1 2 3 | micro --enable_acme web 也可以指定主机白名单: micro --enable_acme --acme_hosts=example.com,web.example.com web |
开启 HTTPS
1
| micro --enable_tls --tls_cert_file=/path/to/cert --tls_key_file=/path/to/key web
|
修改默认命名空间
默认名称空间为 go.micro.web , 名称空间和路径用于确定反向代理代理的目标
1
| micro web --namespace=com.example.web
|
开启统计功能
可以通过 –enable_stats 标志启用统计信息,通过 /stats 访问
1
| micro --enable_stats web
|
在 Micro 架构中,一个完整的请求流程是这样的:
api-gateway => [customer-api | customer-web ] => customer-srv
其中 api-gateway 是 有 micro 工具直接提供的,customer-(api | web | srv) 则是 micro 中的开发概念.
在 micro 中,服务分为三种类型.
名称 | 说明 |
---|---|
srv | srv 是标准的 RPC 服务,也可以叫做后端服务,开发人员通常写的就是这种类型。在 Micro 的设想中,这一服务永远不会面向用户,属于内部服务. |
api | 提供 HTTP 到 RPC 的转换服务,API 网关默认情况下会将请求转发给它来处理. |
web | Micro 认为 web 也可以当做微服务来创建 |
请求处理流程
Golang 微服务框架系列 - 2, Micro 框架的安装以及运行示例
Micro 介绍
Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。
依赖关系
通常 micro 会依赖两个项目
- consul - 服务发现
- protoc-gen-micro - 代码生成
consul 安装运行:
1 2 3 4 | source: go get -u -v github.com/hashicorp/consul && consul agent -dev docker: docker run consul |
protoc-gen-micro 安装:
1
| go get -u -v github.com/micro/protoc-gen-micro
|
开发环境
- 开发微服务的框架:
1
go get -u -v github.com/micro/go-micro
- 管理工具:
1 2 3 4
source: go get -u -v github.com/micro/micro docker: docker pull microhq/micro
运行示例
- 获取示例源码:
1
| go get -u -v github.com/micro/examples
|
- 运行 greeter 示例服务:–registry_address=127.0.0.1:8500 用来指定服务发现的地址,就是上面的 consul 的地址,consul 默认端口是 8500
1
go get github.com/micro/examples/greeter/srv && srv --registry_address=127.0.0.1:8500
- 通过命令行验证:
获取服务列表
–registry_address=127.0.0.1:8500 用来指定服务发现的地址,就是上面的 consul 的地址,consul 默认端口是 8500
1 2 3 | $ micro --registry_address=127.0.0.1:8500 list services consul go.micro.srv.greeter |
获取服务详细信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ micro get service go.micro.srv.greeter service go.micro.srv.greeter version 1.0.0 Id Address Port Metadata go.micro.srv.greeter-34c55534-368b-11e6-b732-68a86d0d36b6 192.168.1.66 62525 server=rpc,registry=consul,transport=http,broker=http Endpoint: Say.Hello Metadata: stream=false Request: { name string } Response: { msg string } |
尝试调用服务
1 2 3 4 | $ micro query go.micro.srv.greeter Say.Hello '{"name": "John"}' { "msg": "Hello John" } |
Golang 微服务框架系列 - 3, 使用 Micro 框架生成并编译运行第一个 srv服务
Micro 介绍
Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。
通过 micro 创建项目:
1 2 3 4 | micro new --type "srv" \ --namespace "com.test" \ --alias "first_srv" \ github.com/micro/examples/first_srv |
命令会生成一个 工程目录,包含了一些通用代码,目录结构:
1 2 3 4 5 6 7 8 9 10 11 | ├── main.go ├── plugin.go ├── handler │ └── example.go ├── subscriber │ └── example.go ├── proto\example │ └── example.proto ├── Dockerfile ├── Makefile └── README.md |
安装 protobuf:
- 去 https://github.com/google/protobuf/releases 下载对应平台的 protobuf 包
- 把 bin 目录添加到 PATH 环境变量中.
- 在命令行中运行 protoc , 如果提示命令未找到检查 protobuf 是否安装成功.
安装 protobuf 代码生成相关库:
1 2 | go get -u github.com/golang/protobuf/{proto,protoc-gen-go} go get -u github.com/micro/protoc-gen-micro |
通过 proto 文件生成 go 代码:
1 2 | cd $GOPATH\src\github.com\micro\examples\first_srv protoc --go_out=. --micro_out=. proto/example/example.proto |
运行:
1 2 3 4 | $ go build github.com/micro/examples/first_srv && first_srv 2018/06/17 13:26:13 Listening on [::]:9040 2018/06/17 13:26:13 Broker Listening on [::]:9041 2018/06/17 13:26:13 Registering node: com.test.srv.first_srv-f325ad49-71ee-11e8-a4a2-7054d2dea53d |
由于使用的是服务发现,所以上面打印的端口在你机器上可能不一样,因为端口是随机的,但不影响正常运行.