Go-Micro 微服务框架
Go-Micro框架简介
Go-Micro是go语言开发的微服务框架。
微服务框架和Web框架是不一样的,它们不同在于侧重点是不一样的,微服务框架主要用于微服务的搭建,包括微服务的治理等和微服务相关的,Gin是一款Web框架,主要用于搭建Web服务。当然go-micro与go-gin框架也可以集成在一起,因为go-micro 自带的micro web 封装太过简单,所以很多时候也有用go-micro+gin+consul做微服务。
在go微服务技术栈,也经常看见Go-kit,这个Go-kit和Go-Micro也稍有不同,Go-kit是一个微服务功能包的集合,本身不是一个框架。
所以Go-Micro则是基于 Go 语言实现的插件化 RPC 微服务框架。它提供了服务发现、负载均衡、同步传输、异步通信以及事件驱动等机制,并尝试去简化分布式系统间的通信,让开发者可以专注于自身业务逻辑的开发。
Go-Micro官网 https://micro.mu/
github地址: https://github.com/micro/micro
框架文档: https://micro.mu/docs/framework.html
Go-Micro功能特点
1. 提供了微服务实施的基础框架,包括Rpc、Web、Api,Srv 网关等各类工具。
2. Broker和异步消息。
3. Wrapper包装器来处理日志,限流等功能。
4. Go-Micro提供插件机制,可以安装多种功能插件,例如Rabbitmq插件。
5. 扩展性强,基于Wrapper模式与中间件实现的。
Go-Micro架构
Go-Micro架构图
Go-Micro 框架模型的上层由 Service 和 Client-Server 模型抽象组成。Server 服务器是用于编写服务的构建块,Client 客户端提供了向服务请求的接口,底层由代理、编解码器和注册表等类型的插件组成。github.com/micro/go-plugins是组件化的框架,每一个基础功能都有对应的接口抽象,方便扩展。
另外Go-Micro具有可插拔的特点,其提供的组件可帮助我们快速构建应用系统,并且可以定制所需要的插件功能。(相关插件可在仓库 github.com/micro/go-plugins 中找到。)
Go-Micro是组件化(插件化)的Rpc框架,每一个基础功能都是一个interface,方便扩展。同时,组件又是分层的,上层基于下层功能向上提供服务,整体构成go-micro框架。
Go-Micro的组件包括:
1. Registry组件:服务注册/发现组件,提供服务发现机制:解析服务名字至服务地址。目前支持的注册中心有consul、etcd、 zookeeper、dns、gossip等
2. Selector组件:负责服务选择,构建在Registry之上的客户端智能负载均衡组件,用于Client组件对Registry返回的服务进行智能选择。
3. Broker组件:发布/订阅组件,服务之间基于消息中间件的异步通信方式,默认使用http方式,线上通常使用消息中间件,如Kafka、RabbitMQ等。
4. Transport组件:同步消息组件,服务之间同步通信方式。
5. Codec组件:服务之间消息的编码/解码。
6. Server组件:服务主体,用于接受Rpc请求及消费消息,该组件基于上面的Registry/Selector/Transport/Broker组件,对外提供一个统一的服务请求入口。
7. Client组件:提供访问微服务的客户端,用于发送Rpc请求及广播消息,支持发送同步和异步请求。类似Server组件,它也是通过Registry/Selector/Transport/Broker组件实现查找服务、负载均衡、同步通信、异步消息等功能。
所有以上组件功能共同构成一个Go-Micro微服务。
Go-Micro提供三种服务
1. SRV:内部Rpc服务。
2. API:对外API服务。
3. Web:对外HTTP服务。
下面是Go-Micro一个示例架构图
Go-Micro框架安装
安装说明:
本地环境OS:Mac
golang版本:1.4
依赖:
Go-Micro有依赖于其它的框架会依赖两个项目
1. Consul :用于服务发现
brew install consul
2. Protobuf :protoc-gen-micro - 代码生成,这个插件主要作用是通过.proto
文件生成适用于go-micro
的代码。
go get github.com/golang/protobuf/proto
go get github.com/golang/protobuf/protoc-gen-go
安装micro框架及管理工具
micro提供了一系列的工具来帮助我们更好的使用 go-micro。
go get github.com/micro/go-micro
go get github.com/micro/micro
如果go get时候出现timeout 可以查看 https://github.com/goproxy/goproxy.cn , http://www.hishenyi.com/archives/1420
下载好之后查看下安装在GOPATH路径下的micro。
至此一个基本的 Go-Micro环境就安装完毕了。
运行Web Api
我们使用go module方式来运行go-micro框架。
1) 先创建一个目录GoMicro。
2)进入GoMicro目录,在当前目录所在路径执行go mod init go-micro-song命令来初始化。
3)创建main.go文件,添加内容
package main import ( "github.com/micro/go-micro/web" "net/http" ) func main() { server := web.NewService(web.Address(":8001")) server.HandleFunc("/",func(writer http.ResponseWriter,request *http.Request) { writer.Write([]byte("hello micro")) }) server.Run() }
4)执行go build命令构建。
5)在浏览器输入http://localhost:8001/,就可以看到已经运行成功。
Micro工具包部分目录说明
上图是Micro的目录。