当前位置: 代码迷 >> 综合 >> MICRO和GO-MICRO
  详细解决方案

MICRO和GO-MICRO

热度:35   发布时间:2023-12-26 04:22:52.0

createdtime 20211124

updatedtime 20211126

author venki.chen


一、是什么
1. 定义,是做什么用的?

go micro是什么?

go-micro是框架,不是服务,但是使用它来编写微服务。

go micro详解

micro是什么?

micro是基于go-micro编写,面向go-micro服务治理与生态的工具集,它包含很多服务和工具。

micro和go-micro之间的关系是什么?

在这里插入图片描述

①micro与go-micro是两个项目。

②go-micro微服务开发库,micro基于go-micro开发的运行时工具集(工具与服务)。

2. 我的理解

micro是为go-micro服务的。

micro其实可以分为两部分:1.go-micro框架;2.micro工具集。

二、为什么
解决什么问题,可以带来什么好处?

优点:

缺点:

三、怎么用
1. 应用场景
2. 具体应用
3. 注意事项
四、思考点
1. 它山之石
Go Micro 初探及其底层架构

Go Micro 简介与设计理念

在这里插入图片描述

Go Micro 简介与设计理念
Go Micro 是一个基于 Go 语言编写的、用于构建微服务的基础框架,提供了分布式开发所需的核心组件,包括 RPC 和事件驱动通信等。

它的设计哲学是「可插拔」的插件化架构,其核心专注于提供底层的接口定义和基础工具,这些底层接口可以兼容各种实现。例如 Go Micro 默认通过 consul 进行服务发现,通过 HTTP 协议进行通信,通过 protobuf 和 json 进行编解码,以便你可以基于这些开箱提供的组件快速启动,但是如果需要的话,你也可以通过符合底层接口定义的其他组件替换默认组件,比如通过 etcd 或 zookeeper 进行服务发现,这也是插件化架构的优势所在:不需要修改任何底层代码即可实现上层组件的替换。

Go Micro 基础架构介绍
在这里插入图片描述

Go Micro 框架的基础架构如下,由 8 个核心接口组成,每个接口都有默认实现:

  • 最顶层的 Service 接口是构建服务的主要组件,它把底层的各个包需要实现的接口,做了一次封装,包含了一系列用于初始化 Service 和 Client 的方法,使我们可以很简单的创建一个 RPC 服务;
  • Client 是请求服务的接口,从 Registry 中获取 Server 信息,然后封装了 Transport 和 Codec 进行 RPC 调用,也封装了 Brocker 进行消息发布,默认通过 RPC 协议进行通信,也可以基于 HTTP 或 gRPC;
  • Server 是监听服务调用的接口,也将以接收 Broker 推送过来的消息,需要向 Registry 注册自己的存在与否,以便客户端发起请求,和 Client 一样,默认基于 RPC 协议通信,也可以替换为 HTTP 或 gRPC;
  • Broker 是消息发布和订阅的接口,默认实现是基于 HTTP,在生产环境可以替换为 Kafka、RabbitMQ 等其他组件实现;
  • Codec 用于解决传输过程中的编码和解码,默认实现是 protobuf,也可以替换成 json、mercury 等;
  • Registry 用于实现服务的注册和发现,当有新的 Service 发布时,需要向 Registry 注册,然后 Registry 通知客户端进行更新,Go Micro 默认基于 consul 实现服务注册与发现,当然,也可以替换成 etcd、zookeeper、kubernetes 等;
  • Selector 是客户端级别的负载均衡,当有客户端向服务端发送请求时,Selector 根据不同的算法从 Registery 的主机列表中得到可用的 Service 节点进行通信。目前的实现有循环算法和随机算法,默认使用随机算法,另外,Selector 还有缓存机制,默认是本地缓存,还支持 label、blacklist 等方式;
  • Transport 是服务之间通信的接口,也就是服务发送和接收的最终实现方式,默认使用 HTTP 同步通信,也可以支持 TCP、UDP、NATS、gRPC 等其他方式。

各个组件接口之间的关系可以通过下图串联
在这里插入图片描述

小结

通过上述介绍,可以看到,Go Micro 简单轻巧、易于上手、功能强大、扩展方便,是基于 Go 语言进行微服务架构时非常值得推荐的一个 RPC 框架,基于其核心功能及插件,我们可以轻松解决之前讨论的微服务架构引入的需要解决的问题:

  • 服务接口定义:通过 Transport、Codec 定义通信协议及数据编码;
  • 服务发布与调用:通过 Registry 实现服务注册与订阅,还可以基于 Selector 提高系统可用性;
  • 服务监控、服务治理、故障定位:通过 Plugins Wrapper 中间件来实现。
Micro初探及其底层架构

micro工具集组件

  1. api

将http请求转向内部应用

在这里插入图片描述

micro api 常见5中网关:

  • api:将http请求映射到api接口。
  • rpc:将http请求映射到rpc服务。
  • event:将http请求广播到订阅者。
  • proxy:反向代理。
  • web:支持websocket的反向代理。
  1. web

web反向代理与管理控制台。

  1. proxy

在这里插入图片描述

代理micro风格的请求,支持异构系统只需要瘦客户端便可以调用micro服务。

与micro api不同的是,proxy只处理micro风格的rpc请求,而非http请求。

  1. cli

以命令行操控micro服务。

  1. bot

与常见的通信软件对接,负责传送信息,远程指令操作。

2. 可以攻玉
  1. go-micro中消息交互的格式默认是protobuf,所以你需要安装protobuf,并且还需要安装protoc-gen-go和protoc-gen-micro这两个插件。protoc-gen-go是供protoc生成工具生成go文件的调用插件,protoc-gen-micro是供protoc-gen-go生成micro格式的go文件所需的插件。
  2. micro工具,它是辅助你开发微服务使用的,因为你基于go-micro开发微服务,他们之间是可以相互通信的,外面访问不到。它可以辅助调试你的程序。如果你自己开发两个程序,互相调试,并且只是想先跑跑例子看看,那么这个工具可以暂时不装。
五、参考链接
  1. Golang RPC 之 gRPC。
  2. RPC与Protobuf。
  3. RPC与restful,以及简单引入gRPC。
  4. 浅谈 RPC 和 REST: SOAP, gRPC, REST。
  5. 【维基百科-读书笔记】远程过程调用RPC。
  6. 基于micro开发之环境搭建篇。
  相关解决方案