微服务架构下,服务调用主要依赖下面几个基本组件:
服务描述
服务调用首先要解决的问题就是服务如何对外描述。
常用的服务描述方式包括RESTful API、XML配置以及IDL文件三种。
其中,RESTful API方式通常用于HTTP协议的服务描述,并且常用Wiki或者Swagger来进行管理。
注册中心
有了服务的接口描述,下一步要解决的问题就是服务的发布和订阅,就是说你提供了一个服务,如何让外部想调用你的服务的人知道。这个时候就需要一个类似注册中心的角色,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务的地址,然后发起请求。
服务框架
通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。
服务监控
一旦服务消费者与服务提供者之间能够正常发起服务调用,你就需要对调用情况进行监控,以了解服务是否正常
服务追踪
除了需要对服务调用情况进行监控之外,你还需要记录服务调用经过的每一层链路,以便进行问题追踪和故障定位
服务治理
服务监控能够发现问题,服务追踪能够定位问题所在,而解决问题就得靠服务治理了。服务治理就是通过一系列的手段来保证在各种意外情况下,服务调用仍然能够正常进行
----------------------------------
微服务组件:
服务发布和引用
RESTful API :http/https协议形式
XML配置 :
IDL文件 : IDL主要是用作跨语言平台的服务之间的调用,有两种最常用的IDL:一个是Facebook开源的Thrift协议,另一个是Google开源的gRPC协议。无论是Thrift协议还是gRPC协议,它们的工作原理都是类似的
注册和发现服务:
注册中心原理
在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry),三者的交互关系请看下面这张图,我来简单解释一下。
-
-
RPC Server提供服务,在启动时,根据服务发布文件server.xml中的配置的信息,向Registry注册自身服务,并向Registry定期发送心跳汇报存活状态。
-
RPC Client调用服务,在启动时,根据服务引用文件client.xml中配置的信息,向Registry订阅服务,把Registry返回的服务节点列表缓存在本地内存中,并与RPC Sever建立连接。
-
当RPC Server节点发生变更时,Registry会同步变更,RPC Client感知后会刷新本地内存中缓存的服务节点列表。
-
RPC Client从本地缓存的服务节点列表中,基于负载均衡算法选择一台RPC Sever发起调用。
-