用户您好!请先登录!

高速服务框架 HSF (High-speed Service Framework)

高速服务框架 HSF (High-speed Service Framework)

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

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

当年为何阿里选择了开源Dubbo而不是HSF,很大原因是因为Dubbo是阿里B2B团队开发的,而HSF是淘宝团队开发的,在当年的应用规模和用户基础上HSF明显胜出。以至于后期开源之后停止更新维护到这几年重启维护与后续开发很难说不是一种面子工程了,如今的开发团队也不是当年了。

HSF 架构

HSF 作为一个纯客户端架构的 RPC 框架,本身是没有服务端集群的,所有的 HSF 服务调用都是服务消费方(Consumer)与服务提供方(Provider)点对点进行的。然而,为了实现整套分布式服务体系,HSF 还需要依赖以下外部系统。

HSF 架构

  • 地址注册中心HSF 依赖注册中心进行服务发现,如果没有注册中心,HSF 只能完成简单的点对点调用。因为作为服务提供端,没有办法将自己的服务信息对外发布,让外界知晓;作为服务消费端,可能已经知道需要调用的服务,但是无法获取能够提供这些服务的机器。而注册中心就是服务信息的中介,提供服务发现的能力。地址注册中心的角色是由 ConfigServer 承担的。
  • 持久化配置中心持久化的配置中心用于存储 HSF 服务的各种治理规则,HSF 客户端在启动的过程中会向持久化配置中心订阅各种服务治理规则,如路由规则、归组规则、权重规则等,从而根据规则对调用过程的选址逻辑进行干预。持久化配置中心的角色是由 Diamond 承担的。
  • 元数据存储中心元数据是指 HSF 服务对应的方法列表以及参数结构等信息,元数据不会对 HSF 的调用过程产生影响,因此元数据存储中心也并不是必须的。但考虑到服务运维的便捷性,HSF客户端在启动时会将元数据上报到元数据存储中心,以便提供给服务运维使用。元数据存储中心的角色是由 Redis 承担的。

功能

HSF 作为分布式 RPC 服务框架,支持多种服务的调用方式。

  • 同步调用HSF 客户端默认以同步调用的方式消费服务,客户端代码需要同步等待返回结果。
  • 异步调用对于服务调用的客户端来说,并不是所有的 HSF 服务都需要同步等待返回结果的。对于这些服务,HSF 提供异步调用的形式,让客户端不必同步阻塞在 HSF 调用操作上。HSF 的异步调用,有 2 种:
    • Future 调用:客户端在需要获取调用的返回结果时,通过 HSFResponseFuture.getResponse(int timeout) 主动获取结果。
    • Callback 调用:Callback 调用利用 HSF 内部提供的回调机制,当指定的 HSF 服务消费完毕拿到返回结果时,HSF 框架会回调用户实现的 HSFResponseCallback 接口,客户端通过回调通知的方式获取结果。
  • 泛化调用对于一般的 HSF 调用来说,HSF 客户端需要依赖服务的二方包,通过依赖二方包中的 API 进行编程调用,获取返回结果。而泛化调用是指不需要依赖服务的二方包,从而发起 HSF 调用、获取返回结果的方式。在一些平台型的产品中,泛化调用的方式可以有效减少平台型产品的二方包依赖,实现系统的轻量级运行。
  • 调用链路 Filter 扩展HSF 内部设计了调用过滤器,并且能够主动发现用户的调用过滤器扩展点,将其集成到 HSF 调用链路中,使扩展方能够方便的对 HSF 请求进行扩展处理。

应用开发方式

使用 HSF 框架开发应用包含 Ali-Tomcat 和 Pandora Boot 两种方式。

  • Ali-Tomcat: 依赖 Ali-Tomcat 和 Pandora,可以提供完整的 HSF 功能,包括服务注册与发现、隐式传参、异步调用、泛化调用和调用链路 Filter 扩展。应用程序需要以 WAR 包方式部署。
  • Pandora Boot:依赖 Pandora,可以提供比较完整的 HSF 功能,包括服务注册与发现和异步调用。应用程序可以打包成独立运行的 JAR 包并部署。

接下来具体介绍HSF框架的高效交互、高可用性和扩展能力。

1.HSF框架的采用Netty+Hession数据序列化协议实现服务交互

HSF采用网络通信框架Netty+Hession数据序列化协议实现服务间的调用,主要考虑点在大并发量时,服务的交互性达到最佳。这类RPC协议采用多路复用的TCP长连接方式,即在服务调用者和服务提供者之间有多个服务请求同时调用时会共用一个长连接,一个长连接交替传输不同请求的字节块。它既避免了反复建立连接开销,也避免了连接的等待闲置从而减少了系统的连接总数,同时还避免了TCP顺序传输中的线头阻塞问题。

2.HSF框架的容错机制

为了保证服务的高可用性,在生产环境中相同的服务往往会有很多个应用实例来提供服务,在进行服务调用时,服务调用者端已经保存了它需要调用的服务的服务器列表信。假如有三台服务器提供了相同的服务,当采用随机方式获取其中一台进行服务交互时,不论这台服务器已经发生故障无法回应请求,还是该服务器已经接收了请求,在服务请求处理过程中出现了服务器故障(宕机、网络问题)造成该服务器没有在规定的时间(一般服务调用会设置超时时间)内返回处理结果,则服务调用端会获取服务调用失败的反馈,会立即从剩下的两台机器中选择一台进行服务调用。从而保证了个别服务提供者出现问题,完全不影响该服务提供正常的服务。因为配置服务器是采用长连接的方式与服务器节点进行通信,一旦发现有服务实例出现故障,此时会将这台服务器提供者的信息从服务器的服务列表中删除,然后将更新后的服务列表以推送的方式同步给予该服务相关的所有服务调用者端,这样当下次进行服务调用时,就不会因为随机而对已经停止提供服务的服务器发送请求。

3.HSF框架的线性扩展支持


HSF最为重要的一个特性就是服务能力的可扩展性,真正做到某个服务的业务处理能力随着服务器资源的增加得到线性的增长。基于HSF框架的运行机制,面对超级大的服务调用压力时,新增的服务提供实例(即增加一台服务器)可在几秒内(完成服务的注册发布、更新后的服务列表推送到服务调用端)开始进行服务请求处理,达到分担其他服务器实例压力的作用,实现服务能力整体水位恢复到正常的状态。据说双十一的时候阿里的多个服务中心所部署的服务实例节点数量超过2000个,即同一个服务由超过2000个服务实例同时提供负载均衡的服务。

X-Eyes Admin
X-Eyes Admin

要发表评论,您必须先登录