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工具集组件
- api
将http请求转向内部应用
micro api 常见5中网关:
- api:将http请求映射到api接口。
- rpc:将http请求映射到rpc服务。
- event:将http请求广播到订阅者。
- proxy:反向代理。
- web:支持websocket的反向代理。
- web
web反向代理与管理控制台。
- proxy
代理micro风格的请求,支持异构系统只需要瘦客户端便可以调用micro服务。
与micro api不同的是,proxy只处理micro风格的rpc请求,而非http请求。
- cli
以命令行操控micro服务。
- bot
与常见的通信软件对接,负责传送信息,远程指令操作。
2. 可以攻玉
- go-micro中消息交互的格式默认是protobuf,所以你需要安装protobuf,并且还需要安装protoc-gen-go和protoc-gen-micro这两个插件。protoc-gen-go是供protoc生成工具生成go文件的调用插件,protoc-gen-micro是供protoc-gen-go生成micro格式的go文件所需的插件。
- micro工具,它是辅助你开发微服务使用的,因为你基于go-micro开发微服务,他们之间是可以相互通信的,外面访问不到。它可以辅助调试你的程序。如果你自己开发两个程序,互相调试,并且只是想先跑跑例子看看,那么这个工具可以暂时不装。
五、参考链接
- Golang RPC 之 gRPC。
- RPC与Protobuf。
- RPC与restful,以及简单引入gRPC。
- 浅谈 RPC 和 REST: SOAP, gRPC, REST。
- 【维基百科-读书笔记】远程过程调用RPC。
- 基于micro开发之环境搭建篇。