高速服务框架HSF

一、简述

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

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

二、架构设计

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

1️⃣Provider——服务提供者

通常是某个业务系统,提供相关的业务服务,一般都是个服务集群。业务系统初期使用 HSF,通过引入 SDK 的方式。后期阿里定制化改造了容器(tomcat/docker),通过配置完成 HSF 的接入使用,作为架构中的服务提供方。对业务系统本身(war/jar)不造成侵入性。绑定了12200端口,用于接受请求并提供服务,同时将地址信息发布到地址注册中心。

2️⃣Consumer——服务消费者

通常也是某个业务系统集群,跟服务提供者非常类似,只是服务、消费角度区别。通过地址注册中心订阅服务,根据订阅到的地址信息发起调用,地址注册中心不参与调用。

3️⃣ConfigServer——配置服务器

HSF 依赖注册中心进行服务发现,如果没有注册中心,HSF 只能完成简单的点对点调用。因为作为服务提供端,没有办法将自己的服务信息对外发布,让外界知晓;作为服务消费端,可能已经知道需要调用的服务,但是无法获取能够提供这些服务的机器。而 ConfigServer 就是服务信息的中介,提供服务发现的能力。

  • 注册与订阅

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

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

  • 长连接与内存级

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

4️⃣Diamond——EDAS 持久化配置中心

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

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

5️⃣addressServer——地址服务器

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

6️⃣EDAS 元数据存储中心

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

7️⃣EDAS 控制台

EDAS 控制台打通了服务地址注册中心、持久化配置中心、元数据存储中心等,为用户提供了服务运维功能,包括服务查询、服务治理规则管理等,提高 HSF 服务研发的效率、运维的便捷性。

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

三、功能

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

1️⃣同步调用
HSF 客户端默认以同步调用的方式消费服务,客户端代码需要同步等待返回结果。

2️⃣异步调用
对于服务调用的客户端,并非所有 HSF 服务都需要同步等待返回结果。HSF 提供异步调用,帮助客户端无需同步阻塞在 HSF 调用上。HSF 的异步调用,有 Future 调用和 Callback 调用两种:
①Future 调用
客户端在需要获取调用的返回结果时,通过 HSFResponseFuture.getResponse(int timeout)主动获取结果。

②Callback 调用
Callback 调用利用 HSF 内部提供的回调机制,在指定 HSF 服务消费完毕拿到返回结果时,HSF 会回调用户实现的 HSFResponseCallback 接口,客户端通过回调通知的方式获取结果。

3️⃣泛化调用
对于一般的 HSF 调用来说,HSF 客户端需要依赖服务的二方包,通过依赖二方包中的 API 进行编程调用,获取返回结果。但是泛化调用不需要依赖服务的二方包,可以发起 HSF 调用、获取返回结果。在平台型的产品中,泛化调用的方式可以有效减少平台型产品的二方包依赖,实现系统的轻量级运行。

4️⃣调用链路 Filter 扩展
HSF 内部设计了调用过滤器,能够主动发现用户的调用过滤器扩展点,将其集成到 HSF 调用链路中,便于扩展方对 HSF 的请求进行扩展处理。

四、应用开发方式

使用 HSF 开发应用有 Ali-Tomcat 和 Pandora Boot 两种方式。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356