阿里HSF(服务框架)

HSF(服务框架)

简介

高速服务框架 HSF (High-speed Service Framework),是在阿里巴巴内部普遍使用的分布式 RPC 服务框架。web

HSF 联通不一样的业务系统,解耦系统间的实现依赖。HSF 从分布式应用的层面,统一了服务的发布/调用方式,从而帮助方便、快速的开发分布式应用,以及提供或使用公共功能模块,并屏蔽了分布式领域中的各类复杂技术细节,如:远程通信、序列化实现、性能损耗、同步/异步调用方式的实现等。docker

架构设计

在这里插入图片描述

HSF 纯客户端架构的 RPC 框架,自己是没有服务端集群的,全部的 HSF 服务调用都是服务消费方(Consumer)与服务提供方(Provider)点对点进行的。然而,为了实现整套分布式服务体系,HSF 还包含了其余组件,完整的组件以下:tomcat

Provider——服务提供者

一般是某个业务系统,提供相关的业务服务,通常都是个服务集群。业务系统初期使用HSF,经过引入SDK的方式。后期阿里定制化改造了容器(tomcat/docker),经过配置完成HSF的接入使用,做为架构中的服务提供方。对业务系统自己(war/jar)不形成侵入性。服务器

Consumer——服务消费者

一般也是某个业务系统集群,跟服务提供者很是类型,只是服务、消费角度区别。架构

ConfigServer——配置服务器

HSF 依赖注册中心进行服务发现,若是没有注册中心,HSF 只能完成简单的点对点调用。由于做为服务提供端,没有办法将本身的服务信息对外发布,让外界知晓;做为服务消费端,可能已经知道须要调用的服务,可是没法获取可以提供这些服务的机器。而ConfigServer就是服务信息的中介,提供服务发现的能力。框架

  • 注册与订阅运维

    服务注册——在服务提供方启动时,完成该服务的注册——上报当前服务的ip:port、服务类名方法名、版本号、分组等信息。异步

    服务订阅——在服务消费方启动时,完成某些服务的订阅——经过订阅的服务标识(类名+方法名+版本号等),在内存中查找相关服务,一旦找到则将服务提供者的IP端口等信息推送给当前服务消费方,以便消费。分布式

  • 长链接与内存级
    服务提供方与服务消费方均与配置服务器保持长链接,一旦服务提供方发生变化,会当即被通知,更新内存中的列表数据,并同步给订阅该服务的服务消费方。ide

Diamond——持久化配置中心

持久化的配置中心用于存储 HSF 服务的各类治理规则,HSF 客户端在启动的过程当中会向持久化配置中心订阅各类服务治理规则,如白名单、权限、路由规则、归组规则、权重规则等,从而根据规则对调用过程的选址逻辑进行干预。持久化配置中心的角色是由 Diamond组件承担的。

当须要时,用户经过在界面上设计规则,Diamond会快速的将新的规则推送给相关的服务提供方

addressServer——地址服务

地址服务器的职责是保存上文的ConfigServer与Diamond服务器的地址列表。在consumer、provider启动时,会首先以域名访问的方式访问地址服务器,从地址服务器获取到ConfigServer与Diamond服务器的地址列表信息,以便访问。

元数据存储

并无在图中展现出来。元数据是指 HSF 服务对应的方法列表以及参数结构等信息,元数据不会对 HSF 的调用过程产生影响,所以元数据存储中心也并非必须的。但考虑到服务运维的便捷性,HSF客户端在启动时会将元数据上报到元数据存储中心,以便提供给服务运维使用。元数据存储中心的角色是由 Redis 承担的。

完成初始化后,服务调用者内保存了相关的服务信息,经过内部设置的调用方式(如随机访问一台,权重等)能够进行点对点的调用。 其内部经过NIO多路复用(Netty)+Hessian序列化实现RPC调用,使用Hessian主要是压测表现出稳定性以及高效的综合特性。