golang 微服务框架 go-micro 简介
go-micro简介
Go Micro 是一个插件化的基础框架,基于此可以构建微服务,Micro 的设计哲学是可插拔的插件化架构
在架构之外,它默认实现了 consul 作为服务发现,通过 http 进行通信,通过 protobuf 和 json 进行编码
go-micro 的主要功能
- 服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。当服务 A 需要与服务 B 通话时,它需要该服务的位置。默认发现机制是多播 DNS,一种零配置系统。你可以选择使用 SWIM 协议为 p2p 网络设置八卦,或者为弹性云设置设置 consul
- 负载均衡:基于服务发现构建的客户端负载均衡。一旦我们获得了服务的任意数量实例的地址,我们现在需要一种方法来决定要路由到哪个节点。我们使用随机散列负载均衡来提供跨服务的均匀分布,并在出现问题时充实不同的节点。
- 消息编码: 基于内容类型的动态消息编码。客户端和服务器将使用编解码器和内容类型为您无缝编码和解码 Go 类型。可以编码任何种类的消息并从不同的客户端发送。客户端和服务器默认处理此问题。这包括默认的 protobuf 和 json
- 请求/响应:基于RPC的请求/响应,支持双向流。我们提供了同步通信的抽象。对服务的请求将自动解决,负载均衡,拨号和流式传输。启用tls时间,默认传输为 http/1.1 或 http2
- Async Messageing:PubSub 是异步通信和事件驱动架构的一流公民。
- 可插拔接口: Go Micro 为每个分布式系统抽象使用 Go 接口,因此这些接口时可插拔的,并允许 Go Micro 与运行时无关。
go-micro 通信流程
- Server 监听客户端的调用,和 Broker 推送过来的信息进行处理。并且 Server 端需要向 Register 注册自己的存在或消亡,这样 Client 才能知道自己的状态
- Register 服务的注册的发现,Client 端从 Register 中得到 Server 的信息。然后每次调用都根据算法选择一个 Server 进行通信,当然通信是要经过编码/解码。选择传输协议等一系列过程的
- 如果有需要通知所有的 Server 端可以使用 Brocker 进行消息的推送,Brocker 信息队列进行信息的接受和发布
go-micro 核心接口
- go-micro 之所以可以高度定制和他的框架结构是分不开的。go-micro 由8个关键的 interface 组成,每一个 interface 都可以根据自己的需求重新实现,这 8 个主要的 interface 也构成了 go-micro 的框架结构