0%

Golang 微服务框架系列 - 1, Micro 框架使用方式以及架构介绍

Micro 介绍

官方网站: micro.mu
官方文档: micro.mu/docs
源码仓库: github.com/micro/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)]

模块 说明
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)]

使用入门:

  • 安装
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 也可以当做微服务来创建

请求处理流程

请求处理流程