zoukankan      html  css  js  c++  java
  • 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的目录。

  • 相关阅读:
    ios app: 使用企业license设置发布app的过程
    gtest测试代码编写思想
    受尽侮辱的语言
    创业者的思维误区---《精益创业》
    session的取代者:Json Web Tokens----在客户端存储登陆状态
    lineman 的理念与 modern web app
    angularjs框架及其生态环境 --待续
    javascript的崛起及其生态元素
    Cassandra 2.x 提示“错误: 代理抛出异常错误: java.lang.NullPointerException”
    cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法
  • 原文地址:https://www.cnblogs.com/songgj/p/11788435.html
Copyright © 2011-2022 走看看