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的目录。

 

posted @ 2019-11-03 18:49  songguojun  阅读(836)  评论(0编辑  收藏  举报