:::info
1、主讲老师:大地
2、合作网站:www.itying.com
3、我的专栏:https://www.itying.com/category-79-b0.html
4、必备基础:学习本教程要有golang 和go web基础
5、大地老师Golang入门实战系列教程地址:https://www.itying.com/category-90-b0.html
:::
八. go-micro框架
在前面的内容中,我们已经学习了微服务之间通信采用的通信协议,如何实现服务的注册和发现,搭建
服务管理集群,以及服务与服务之间的RPC通信方式。具体的内容包括:protobuf协议,consul及
docker部署consul集群,gRPC框架的使用等具体的实现方案。
以上这些具体的方案都是为了解决微服务实践过程中具体的某个问题而提出的,实现微服务架构的项目
开发。但是,在具体的项目开发过程中,开发者聚焦的是业务逻辑的开发和功能的实现,大量的环境配
置,调试搭建等基础性工作会耗费相当一部分的精力,因此有必要将微服务架构中所涉及到的,相关的
解决方案做集中管理和维护。这就是我们要学习的Micro。
8.1 go-micro介绍
Go Micro是一个简化分布式开发的微服务生态系统,该系统为开发分布式应用程序提供了高效,便捷
的模块构建,主要目的是简化分布式系统的开发。它默认实现了consul作为服务发现(2019年源码修
改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码。
学习完该框架以后,可以方便开发者们非常简单的开发出微服务架构的项目,并且随着业务模块的增加
和功能的增加,Go Micro还能够提供管理微服务环境的工具和功能。
**github地址:**https://github.com/asim/go-micro
8.2 go-micro的主要功能
:::info
身份验证- 身份验证作为一等公民内置。身份验证和授权通过为每个服务提供身份和证书来实现安
全的零信任网络。这还包括基于规则的访问控制。
动态配置- 从任何地方加载和热重载动态配置。config 接口提供了一种从任何来源(如环境变量、
文件、etcd)加载应用程序级别配置的方法。您可以合并源,甚至定义回退。
数据存储- 一个简单的数据存储接口,用于读取、写入和删除记录。它默认包括对内存、文件和
CockroachDB 的支持。状态和持久性成为原型设计之外的核心要求,Micro 希望将其构建到框架
中。
服务发现- 自动服务注册和名称解析。服务发现是微服务开发的核心。当服务 A 需要与服务 B 通话
时,它需要该服务的位置。默认发现机制是多播 DNS (mdns),一个 zeroconf 系统。
负载平衡- 基于服务发现的客户端负载平衡。一旦我们有了任意数量的服务实例的地址,我们现在
需要一种方法来决定路由到哪个节点。我们使用随机散列负载平衡来提供跨服务的均匀分布,并在
出现问题时重试不同的节点。
消息编码- 基于内容类型的动态消息编码。客户端和服务器将使用编解码器和内容类型为您无缝编
码和解码 Go 类型。任何种类的消息都可以被编码并从不同的客户端发送。默认情况下,客户端和
服务器会处理此问题。这默认包括 protobuf 和 json。
RPC 客户端/服务器- 基于 RPC 的请求/响应,支持双向流。我们为同步通信提供了一个抽象。对服
务的请求将被自动解析、负载平衡、拨号和流式传输。
Async Messaging - PubSub 作为异步通信和事件驱动架构的一等公民内置。事件通知是微服务
开发的核心模式。默认消息系统是 HTTP 事件消息代理。
事件流- PubSub 非常适合异步通知,但对于更高级的用例,事件流是首选。提供持久存储,从偏
移量和确认中消耗。Go Micro 包括对 NATS Jetstream 和 Redis 流的支持。
同步- 分布式系统通常以最终一致的方式构建。对分布式锁定和领导的支持作为同步接口内置。当
使用最终一致的数据库或调度时,请使用 Sync 接口。
Pluggable Interfaces - Go Micro 为每个分布式系统抽象使用 Go 接口。因此,这些接口是可插
拔的,并允许 Go Micro 与运行时无关。您可以插入任何底层技术。
:::
8.3 go-micro安装
go-micro内置了脚手架工具,通过脚手架命令行工具我们可以快速的创建service 和client https://gith
ub.com/go-micro/cli
go install go-micro.dev/v4/cmd/micro@v4.6.0
安装之后输入micro命令,显示如下就证明安装成功