www.ydisp.cn/oss/202207/13/b9ae699012f71dd98df336050a72a64eb7efa5.jpg"style="width:1006px;能见度:可见;height:651px;"data-type="inline">客户端(Client):调用远程服务的服务消费者。客户端调用远程服务就像调用本地函数一样。客户端负责序列化、反序列化、连接池管理、负载均衡、故障转移、超时管理、异步管理等服务端(Server):暴露服务的服务提供者,服务端像实现本地功能一样实现远程服务提供,服务端需要做发送以及接收包队列、I/O线程、工作线程、序列化和反序列化等注册中心:服务注册和发现的注册中心2.RPC调用描述一个RPC调用过程主要由5部分组成,即client,clientstub,serverstub,服务提供者和网络传输的调用过程如图3-2Client:服务调用者.Clientstub:用于存放地址形成服务端,将客户端的请求参数等信息打包成网络报文,然后通过网络传输发送给服务端。服务器端存根:接收客户端发送的请求报文并解包,然后调用本地服务进行处理。服务提供者:服务的真正提供者。网络传输:底层数据传输,可以是TCP或HTTP。服务管理业务一开始是一个单一的应用。随着用户和访问量的增加,架构层面会发生变化,逐渐从单体应用开发向分布式应用开发转变。应用中的每个模块按照特定的方法拆分成一组独立的服务,通过HTTP或RPC调用服务。随着业务量的逐渐增加,服务的数量也逐渐增加。这时候维护服务的URL地址就变得很麻烦,所以需要设计一个系统来统一管理各个服务对应的URL地址。这个系统叫做注册中心。当存在多个服务时,消费者需要按照规则调用它们的相关服务,实现软负载均衡,以达到资源利用率最大化的目的。因此,服务注册、服务发现、负载均衡、流量削峰、版本兼容、服务熔断、服务降级、服务限流等问题,都是服务拆分带来的一系列问题。如何解决这些问题,让服务运行的更稳定,就叫服务治理。一般来说,服务治理是指企业为确保事情顺利完成而实施的措施,包括最佳实践、架构原则、治理程序、法律和其他决定性因素。下面分别介绍服务治理流程中的各个环节。(1)服务:是分布式架构下的基本单元,包括一个或一组软件功能,其目的是让不同的客户端通过网络获取相应的数据,而无需关注底层实现的具体细节。以用户服务为例,当客户端调用用户服务的注册函数时,会将注册信息写入数据库,缓存起来,并发送消息通知其他与注册事件相关的系统,但调用者并不知道服务的具体处理逻辑。(2)注册中心:是微服务架构中的“通讯录”,记录了服务与服务地址的映射关系,主要涉及服务提供者、服务注册中心和服务消费者。数据流中,服务提供者启动服务后向注册中心注册服务;服务消费者(或称服务消费者)在启动服务时会从注册中心拉取相关配置放入缓存中。注册中心的好处是解耦了服务提供者和服务消费者的关系,支持弹性伸缩。当一个服务需要扩展时,只需要再部署一个服务即可。当服务启动成功后,会自动注册到注册中心并推送给消费者。(3)服务注册和发布:服务实例在启动时加载到容器中,在注册中心注册服务本身的相关信息,如接口名称、接口版本、IP地址、端口等,并通过心跳机制定期刷新注册表中当前服务的状态,以确认服务状态正常,并在服务终止时将其从注册表中删除。服务注册包括两种模式:自助注册模式和第三方注册模式。◎自注册模式:服务实例负责在服务注册中心注册和注销服务实例,服务实例必须发送心跳以保证注册信息不过期。优点是比较简单,不需要其他系统功能的支持;缺点是服务实例需要链接服务注册中心,注册代码必须在各个编程语言和框架内实现。◎第三方注册方式:服务实例由另一个类似的服务管理器注册,服务管理器通过查询部署环境或订阅事件来跟踪运行服务的变化。当管理器发现可用的新服务时,它会向注册表注册该服务,服务管理器负责注销已终止的服务实例。第三方注册模型的主要优点是服务与服务注册中心分离,不需要为每一种编程语言和架构完成服务注册逻辑。相应地,服务实例通过一个集中管理的服务进行管理;缺点是需要高可用的系统来支持。(4)服务发现:使用一个注册中心记录分布式系统中所有服务的信息,以便其他服务可以快速找到这些已注册的服务。目前有两种模式:客户端发现模式和服务端发现模式。客户端发现模式:客户端从服务注册服务中查询所有可用服务实例的地址,使用负载均衡算法从多个服务实例中选择一个,然后发送请求。它的优点是客户端知道可用服务注册中心的信息,因此可以定义多种负载均衡算法,将负载均衡的压力集中在客户端。服务器端发现模式:客户端通过负载均衡器向服务发出请求,负载均衡器从服务注册服务中查询所有可用服务实例的地址,并将每个请求转发给一个可用的服务实例。与客户端发现一样,服务实例在服务注册表中注册或注销。我们可以将HTTP服务和Nginx负载均衡器理解为服务端发现模式。优点是客户端不需要关注发现的细节,可以减少客户端框架需要完成的服务发现逻辑;客户端只需要简单地向负载均衡器发送请求。缺点是需要在服务器端配置一个高可用的负载均衡器。(5)流量削峰:利用一些技术手段削弱瞬时峰值请求,使系统吞吐量控制在峰值请求之下,也可以用来消除毛刺,使服务器资源的利用更加均衡并且足够了。常见的调峰策略包括排队、限频、分级过滤和多级缓存。(6)版本兼容性:在版本升级的过程中,需要考虑版本升级后新的数据结构是否能够理解和解析旧数据,新的协议是否能够理解旧的协议并进行适当的处??理正如预期的那样。这就需要在服务设计过程中做好版本兼容工作。(7)业务保险丝:其作用类似于家用保险丝。当服务不可用或响应超时时,已经达到系统设定的阈值。为了防止整个系统雪崩,会暂时停止对服务的调用。(8)服务降级:当服务器压力急剧增加时,根据当前业务情况和流量,对部分服务和页面进行策略性降级,以释放服务器资源,保证核心任务的正常运行。降级时,往往会指定不同的级别,面对不同的异常级别进行不同的处理。(9)服务节流:服务节流可以被认为是一种服务降级。它通过限制系统的输入输出流量来达到保护系统的目的。一般来说,系统的吞吐量是可以衡量的。为了保证系统的稳定运行,一旦达到阈值,就需要进行流量限制。限制措施包括延迟处理、拒绝处理或部分拒绝处理。(10)负载均衡策略:是用来解决一台机器不能处理所有请求的算法。当集群中的一台或多台服务器无法响应请求时,负载均衡策略会合理分配流量,让更多的服务器均衡处理流量请求,不会造成单台服务器的CPU或内存去急剧上升。
