micro微服务框架梳理 - Go语言中文社区

micro微服务框架梳理


Micro 架构图

最近学了个微服务的新框架,根据自己的理解,梳理了下这个框架,做了个架构图
micro 架构图
Micro 工具集:管理和micro框架的包,可以启动API网关,指定处理器,提供了服务创建模版等功能,并且micro工具集的各个模块是可插拔的插件化开发模式
go-micro: micro 框架的核心基础服务,也是可插拔化的
关于这两个模块的介绍,可以看我的这篇博客:
micro如何实现插件化

API网关

API 网关,是服务对外暴露的唯一接口,micro 为我们提供了多种处理模式来处理来到的http请求,对应图中的handler,下面是每个handler 的介绍(引用官方):

  • API handler - 处理http请求,通过RPC来完全控制http的请求/响应。
  • RPC handler - 处理json及protobuf格式的POST请求,并转向RPC。
  • Proxy handler - 处理http请求并转向反向代理。
  • Event handler - 处理任意的http请求并向消息总线分发消息。
  • Web handler - 包含web socket的http反向代理。

除了这几种处理器的方式外,micro Api 网关还提供了一个直接访问service 方式,即图中的rpc 方式,这种方式是通过访问 http:ip:8080/rpc, 然后在post 提交的内容指定 服务路径的方式,绕过 micro web、micro api 等 直接访问servcies,例如:

 curl -d 'service=go.micro.srv.greeter'    -----服务路径
     	-d 'method=Say.Hello'            	 -------处理方法
     	-d 'request={"name": "John"}' 		--------请求参数
    	 http://localhost:8080/rpc

相关的内部服务

micro web 和 micro api 是我们业务逻辑的实现,可以是网站后台,可以是restful api ,通常对services的调用,都是通过web和api的间接调用,是我们提供给外部调用的服务模块;services 是我们内部的rpc微服务,可以是一些通用的、核心的服务组件或者些其他的我们希望对外封闭的东西,比如:游戏充值,跨游戏之间的服务调用等。micro client 是我们services的客户端,micro web,micro api 等都是通过client 调用 services。

微服务框架 (go-micro的基础服务)

这部分是框架的基础模块了,包括服务的发现、注册;发布订阅订阅功能;负载均衡;同步通信协议;异步通信;通信元数据的编码方式;(引用官网的介绍)

  • 注册(Registry)
    注册提供了服务发现机制来解析服务名到地址上。它可以使用Consul、etcd、zookeeper、dns、gossip等等提供支持。服务使用启动注册关机卸载的方式注册。服务可以选择性提供过期TTL和定时重注册来保证服务在线,以及在服务不在线时把它清理掉。

  • 选择器(Selector)
    选择器是构建在注册这上的负载均衡抽象。它允许服务被过滤函数过滤掉不提供服务,也可以通过选择适当的算法来被选中提供服务,算法可以是随机、轮询(客户端均衡)、最少链接(leastconn)等等。选择器通过客户端创建语法时发生作用。客户端会使用选择器而不是注册表,因为它提供内置的负载均衡机制。

  • 传输(Transport)
    Transport是服务与服务之间同步请求/响应的通信接口。和Golang的net包类似,但是提供更高级的抽象,请允许我们可以切换通信机制,比如http、rabbitmq、websockets、NATs。传输也支持双向流,这一强大的功能使得客户端可以向服务端推送数据。

  • 代理(Broker)
    Broker提供异步通信的消息发布/订阅接口。对于微服务系统及事件驱动型的架构来说,发布/订阅是基础。一开始,默认我们使用收件箱方式的点到点HTTP系统来最小化依赖的数量。但是,在go-plugins是提供有消息代理实现的,比如RabbitMQ、NATS、NSQ、Google Cloud Pub Sub等等。

  • 编码(Codec)
    编码包用于在消息传输到两端时进行编码与解码,可以是json、protobuf、bson、msgpack等等。与其它编码方式不同,我们支持RPC格式。所以我们有JSON-RPC、PROTO-RPC、BSON-RPC等格式。

    编码包把客户端与服务端的编码隔离开来,并提供强大的方法来集成其它系统,比如gRPC、Vanadium等等。

  • Server(服务端)
    Server包是使用编写服务的构建包,可以命名服务,注册请求处理器,增加中间件等等。服务构建在以上说的包之上,提供独立的接口来服务请求。现在服务的构建是RPC系统,在未来可能还会有其它的实现。服务端允许定义多个不同的编码来服务不同的编码消息。

  • Client(客户端)
    客户端提供接口来创建向服务端的请求。与服务端类似,它构建在其它包之上,它提供独立的接口,通过注册中心来基于名称发现服务,基于选择器(selector)来负载均衡,使用transport、broker处理同步、异步消息。

上面的这些组件都可以在micro中,从更高的角度看成是服务(Service)

go-plugins

这是micro框架提供的一些插件,我们知道go-micro是可插拔化的,想server、registry、broker等六个基础服务都是可以被替换的,go-plugins 就是这些相关插件的一个集合,也可以根据自己需求自己去实现,关于插件的开发可以通过前面提到那边博客了解下

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/caca95/article/details/89709842
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢