Go Micro 教程

Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。

Go Micro 提供了分布式系统开发的核心库,包含 RPC 与事件驱动的通信机制。

Micro 的设计哲学是可插拔的插件化架构理念,它提供可快速构建系统的组件,并且可以根据自身的需求剥离默认实现并自行定制。


 

1. Go Micro 功能

  • 服务发现
    自动服务注册和名称解析,服务程序自动注册到服务中心,客户端可以实现服务发现。
  • 负载均衡
    客户端负载均衡,用于平衡服务实例之间的请求。一旦我们获得了服务的任意数量实例的地址,我们可以使用随机、轮询等均衡策略来提供跨服务的均匀分布,并在出现问题时重试不同的节点。
  • 同步通信
    提供请求/响应传输层。
  • 异步通信
    内置发布/订阅功能。
  • 消息编码
    基于内容类型的动态消息编码。客户端和服务器将使用编解码器无缝地编码和解码Go类型。我们可以编码任何种类的消息,并从不同的客户端发送,客户端和服务器默认处理此问题。这包括默认的protobuf和json。
  • RPC 客户机/服务器包: 利用上述功能并公开接口来构建微服务。

 

2. Go Micro 架构

Go Micro 微体系结构可以描述为三层堆栈

 

 

顶层由客户端-服务器模型和服务抽象组成。

  • 服务器: 用于编写服务的构建块。
  • 客户端: 提供了向服务请求的接口。

底层由以下类型的插件组成:

  • 代理: 为异步发布/订阅通信提供消息代理的接口。
  • 编解码器: 用于编码/解码消息。支持的格式包括 json、bson、protobuf、msgpack 等。
  • 注册表: 提供服务发现机制。
  • 选择器: 建立在注册表上的负载平衡抽象。它允许使用诸如随机、轮循、最小链接等算法来 “选择” 服务。
  • 传输: 服务之间同步请求 / 响应通信的接口。
  • Sidecar: Sidecar 可以支持使用 Go 以外的语言编写的服务。Sidecar 提供服务注册,gRPC 编码/解码和 HTTP 处理程序,支持多种语言。

 

3. Go Micro 范例

以下为最简单的范例,使用了 net/http 标准库监听路由,输出 Hello World。

package main
import (
	"github.com/micro/go-micro/web"
	"net/http"
)

func main() {
	service := web.NewService(web.Address(":8081")) // 路由
	service.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello World"))
	})
	if err := service.Run(); err != nil {
		log.Fatal(err)
	}
}

通过浏览器,输入 http://localhost:8081,将会输出 Hello World。

使用 Go Micro 需要安装 proto 编译工具、micro 命令工具以及依赖包。本文的 Go语言 使用了 1.13 版本,如果使用更高的 Go 语言版本,那么生成的框架代码会略有不同。Go 语言安装可以参考 ...