来自GO 夜读 学习笔记
学习来源:https://www.bilibili.com/video/BV18E411o7c5?from=search&seid=1560428182298849204
(1)关于Micro Api的说明
(2)关于Micro web的说明
(3)关于Micro Proxy的说明
(4) 关于GO-Micro 框架模块
(5)关于GO-Micro 基础组件调用关系
流程说明:
每一个Service服务都有一个Cilent 和Server
:1 Service启动时候调用注册模块,注册的到我们的注册中 Consul.
:2 另一个服务客户端Cilent ,如果需要调用另一个服务Server,首选这个服务的客户端Cilent 去调用Selector选择器查询,
:3 Selector选择器通过Registry再去查询需要元数据信息,
如果元数据信息没有不存在的话 Registry会想注册中心Consul获取服务元数据信息,然后返返回给Registry
:4 Registry向想注册中心Consul获取服务元数据信息,然后返返回给Registry传递给客户端
:5 客户端开始对相关的元数据信息进行编码,编码完成后,就发送 客户端Cilent 侧的Transport模块
:6 客户端Cilent 侧Transport模块 发送到客户端Cilent 侧Codec模块进行编码----
:7 Cilent 侧Codec模块 将消息发送另一个服务Server中的 Codec 然后进行解码,然后进行业务逻辑处理
go-micro中服务发现和注册:
(6)关于GO-Micro 其他组件
(7)关于GO-Micro 中的Registry注册组件
注册主键主要几个接口信息:
- 服务的注册,服务的卸载,服务的获取,监听服务变动,获取服务列表
- 服务和服务间是不是直接调用中间件,是通过自身内部注册模块进行调用中间件查询的
GO-Micro 中的注册类型:
:1 基于通用型注册中心,如Etcd、Consul、Zookeeper、Eureka(已停更了)
:2 基于网络广播,如mDNS、Gossip
:3 基于消息中间件,如NATs
Registry注册组件类型介绍
(1) Registry注册方式---通用性注册中心,Consul注册方式类型(中心化):
流程:
:1 服务启动后把元数据信息注册到注册中心
:2 需要服务调用就问Consul获取
(2) Registry注册方式---基于广播域名解析的方法【mDNS:多路广播域名解析】:
流程:
假设存在4个服务 (M A,B,C四个服务)
:1 M 问谁是服务A,广播一个谁是A的消息
:2 广播到所有的服务上,问谁是A服务(A,B,C服务都收到广播信息)
:3 B,C服务不响应,A服务响应(广播消息出去,此时其他服务都知道A再哪里,B,C也收到)
(3) Registry注册方式---基于消息中间件【基于NATs消息系统Pub/Sub注册】:
(8)关于GO-Micro 中的Selector 选择器组件
8.1)职责
负责负载均衡
8.2)工作原理
假设有三台服务(B1,B2,B3),A服务调用B服务的时候
流程:
:1 A服务客户端Client,调用Selector选择器组件查询B服务的地址信息
:2 A服务客户端Client中的Selector组件回去 A服务客户端Client中的Registry组件获取B的信息,选择器Selector拿到相关的B信息(3台的列表信息)
:3 A服务客户端Client中的Selector组件根据算法(轮询,随机)获取列表中的一台B服务的信息