服务提供者如何发布一个服务,服务消费者如何引用这个服务。具体来讲,就是这个服务的接口名是什么?调用这个服务须要传递哪些参数?接口的返回值是什么类型?以及一些其余接口描述信息
最多见的服务发布和引用的方式有三种:
RESTful API (通常对外)
XML配置 (对内)
IDL文件(跨语言,Thrift, gRPC)mysql
在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry)。正则表达式
RPC Server提供服务,在启动时,根据服务发布文件server.xml中的配置的信息,向Registry注册自身服务,并向Registry按期发送心跳汇报存活状态。redis
RPC Client调用服务,在启动时,根据服务引用文件client.xml中配置的信息,向Registry订阅服务,把Registry返回的服务节点列表缓存在本地内存中,并与RPC Sever创建链接。算法
当RPC Server节点发生变动时,Registry会同步变动,RPC Client感知后会刷新本地内存中缓存的服务节点列表。sql
RPC Client从本地缓存的服务节点列表中,基于负载均衡算法选择一台RPC Sever发起调用。浏览器
注册中心的实现主要涉及几个问题:注册中心须要提供哪些接口,该如何部署;如何存储服务信息;如何监控服务提供者节点的存活;若是服务提供者节点有变化如何通知服务消费者,以及如何控制注册中心的访问权限。缓存
注册中心必须提供如下最基本的API服务器
除此以外,为了便于管理,注册中心还必须提供一些后台管理的API,例如:微信
在进行服务化拆分以后,服务提供者和服务消费者运行在两台不一样物理机上的不一样进程内,它们之间的调用相比于本地方法调用,可称之为远程方法调用,简称RPC。网络
想要完成远程调用,你须要解决四个问题:
客户端和服务端之间基于TCP协议创建网络链接最经常使用的途径有两种
最经常使用的有HTTP协议,它是一种开放的协议,各大网站的服务器和浏览器之间的数据传输大都采用了这种协议。还有一些定制的私有协议,好比阿里巴巴开源的Dubbo协议等。
经常使用的序列化方式分为两类:
一般有两种数据收集方式:
数据传输最经常使用的方式有两种:
数据处理是对收集来的原始数据进行聚合并存储。数据聚合一般有两个维度:
数据展现是把处理后的数据以Dashboard的方式展现给用户。数据展现有多种方式,好比曲线图、饼状图、格子图展现等。
在微服务架构下,因为进行了服务拆分,一次请求涉及到多个服务调用,若是请求失败,就很难定位是在哪一个环节出错,因此咱们须要服务调用链的追踪。
它的核心理念就是调用链:经过一个全局惟一的ID将分布在各个服务节点上的同一次请求串联起来,从而还原原有的调用关系,能够追踪系统问题、分析调用数据并统计各类系统指标。
服务追踪系统能够分为三层
一次服务调用,服务提供者、注册中心、网络这三者均可能会有问题,此时服务消费者应该如何处理才能确保调用成功呢?这就是服务治理要解决的问题。
服务调用失败通常是由两类缘由引发的,一类是服务提供者自身出现问题,如服务器宕机、进程意外退出等;一类是网络问题,如服务提供者、注册中心、服务消费者这三者任意二者之间的网络出现问题。
不管是服务提供者自身出现问题仍是网络发生问题,都有两种节点管理手段。
这种机制要求服务提供者定时的主动向注册中心汇报心跳,注册中心根据服务提供者节点最近一次汇报心跳的时间与上一次汇报心跳时间作比较,若是超出必定时间,就认为服务提供者出现问题,继而把节点从服务列表中摘除,并把最近的可用服务节点列表推送给服务消费者。
虽然注册中心主动摘除机制能够解决服务提供者节点异常的问题,但若是是由于注册中心与服务提供者之间的网络出现异常,最坏的状况是注册中心会把服务节点所有摘除,致使服务消费者没有可用的服务节点调用,但其实这时候服务提供者自己是正常的。因此,将存活探测机制用在服务消费者这一端更合理,若是服务消费者调用服务提供者节点失败,就将这个节点从内存中保存的可用服务提供者节点列表中移除。
经常使用的负载均衡算法主要包括如下几种。
对于服务消费者而言,在内存中的可用服务节点列表中选择哪一个节点不只由负载均衡算法决定,还由路由规则肯定。所谓的路由规则,就是经过必定的规则如条件表达式或者正则表达式来限定服务节点的选择范围。
为何要制定路由规则呢?主要有两个缘由。
服务调用并不老是必定成功的,对于服务调用失败的状况,须要有手段自动恢复,来保证调用成功。
服务容错经常使用的手段主要有如下几种。
通常状况下对于幂等的调用,能够选择FailOver或者FailCache,非幂等的调用能够选择FailBack或者FailFast。
参考资料
极客专栏:从0开始学微服务
本文亦在微信公众号【小道资讯】发布,欢迎扫码关注!