其对应早期的开源项目 Dubbo(由于某些缘故原由,Dubbo 项目在 2012 年年底,阿里巴巴就停滞了对此开源项目的更新),则更是在互联网领域有着非常高的有名度和广泛的利用。

本文通过对阿里巴巴 HSF 做事框架的先容,让大家能对这类分布式做事框架架构设计、运行事理,以及如何实现作为一个 SOA 架构须要知足的各个特性有一个清晰的认识。

HSF 做事框架紧张组件

phpdubbo散布式办事框架选型面临Dubbo阿里巴巴为什么选择了HSF Ruby

1、做事供应者

在做事框架中真正供应做事功能实现的运用实例,为了保障做事供应的高可用性,一样平常均是集群支配。

每一个 HSF 的运用均因此 War 包的形式存在,运行在阿里巴巴优化定制后的 Tomcat 容器中,在 Tomcat 容器层已经集成了 HSF 做事框架对做事供应者或做事调用者进行配置做事器创造、做事注册、订阅、失落效转移等干系功能,以是不管是在做事供应者还是调用者开拓时,只须要进行做事干系的配置操作,运用中无需引入任何 HSF 干系的 Jar 依赖包。

考虑到运用故障的隔离、更方便的做事管控,目前淘宝内部大部分运用的支配办法还是一个虚拟机(对应一个操作系统)运行一个 Tomcat 容器,每个 Tomcat 运行一个做事运用,随着近几年以 Docker 容器技能的发展和盛行,现在阿里巴巴内部也正在进行运用容器化支配的事情,让做事器的资源利用更加科学和高效。

2、做事调用者

作为做事的消费者,大多数也因此 WAR 运用包的办法运行在 Tomcat 容器中,在阿里巴巴集团内部也有一部分是基于 C/C++、PHP、Node.js 等措辞开拓的做事调用者。

3、地址做事器

在 HSF 做事框架中,地址做事器肩负着给做事供应者和做事调用者供应支配环境中所有配置做事器和 Diamond 做事器的做事器列表信息,是由 Nginx( 是一个高性能的 HTTP 和反向代理做事器)供应该做事能力。

在支配 HSF 做事环境时,会将全体环境中的配置做事器集群(做事器 IP 列表)和 Diamond 做事器集群信息设置在地址做事器上,在实际生产支配中,也会支配多台地址做事器供应负载均衡和高可用性的做事,做事供应者和调用者通过统一域名的办法访问这些地址做事器(比如“xxx.tbsite.net”),通过 DNS 轮询实现地址做事器访问的高可用性。

4、配置做事器

配置做事器在 HSF 框架中紧张卖力记录环境内所有做事发布(做事供应者的 IP 地址和做事端口信息)和做事订阅(做事调用者的 IP 地址和做事端口信息)信息,并将做事干系信息推送到做事节点上。
为了追求做事发布和订阅的推送效率,所有的做事发布和订阅信息均是保存在内存中。

配置做事器与所有做事者供应者和调用者均是长连接,采取心跳的办法可监控到各做事运行节点的状况,一旦涌现做事供应者做事节点涌现故障时,会自动推送更新后(将出问题的做事供应者做事节点信息从列表中删除)的做事供应者列表给干系的做事调用者端。

在生产环境中,会支配多台配置做事器,用于做事发布、订阅、推送的负载均衡,在多台配置做事器间会进行实时的数据同步,担保做事发布和订阅信息尽快能同步到各做事节点上。

某种程度上,配置做事器在 HSF 框架中扮演了做事调用调度的指挥官,通过给做事调用者端推送不同的做事供应者列表就可以轻易的调度做事调用的路由,这一特性在淘宝平台实现单元化(即某一客户在访问淘宝时,访问要求一旦路由到某一个淘宝机房后,在淘宝上进行的所有业务的操作均可以在该机房完成,而无需访问其他机房的做事,也是实现异地多活的根本)、异地多活起到了至关主要的浸染。

5、Diamond 做事器

实质上,Diamond 做事器是一个通用的统一配置管理做事,类似 ZooKeeper,给运用供应统一的配置设置和推送做事,利用场景非常广泛,在阿里巴巴内部有很多的产品在须要进行配置的保存和获取时都会利用 Diamond 做事器。

在 HSF 做事框架中,则紧张承担了做事调用过程中对付做事调用安全管控的规则、做事路由权重、做事 QPS 阀值等配置规则的保存,所有的信息均是持久化保存到了后真个 MySQL 做事器中,在生产环境中,会有多台 Diamond 做事器供应负载均衡的做事。

利用 Diamond 做事器进行做事干系设置的范例场景如下:

通过设置白名单(做事调用者所在做事节点 IP 地址)的办法设置某些做事或做事中的方法只能让特定 IP 地址的做事器调用;

通过用户认证的办法掌握做事是否能够调用;

按照不同的做事器权重设置做事调用者对多个做事供应者做事节点的访问;

设置某些做事的 QPS 能力上限值,一旦该做事的 QPS 达到该阀值,则谢绝做事的连续调用,这也是实现做事限流的技能实现,在平台进行大匆匆或秒杀场景时,保障平台的稳定的主要樊篱。

通过这样规则的设置,Diamond 除了将这些规则保存在自身的数据库中外,会自动将这些规则推送到干系的做事节点上(实际实现上是做事节点会定时从 Diamond 做事器上同步干系配置信息),使这些规则能立即在做事运行环境中生效。

如图 3-5 所示是阿里巴巴 HSF 做事框架的事情事理,按照做事注册发布、做事订阅、做事规则推送、终极做事供应者和做事调用者间的做事交互的顺序解释了 HSF 做事框架中每个组件在全体框架中所扮演的角色。

图 3-5 HSF 做事框架事情事理示意图

1)做事节点对配置做事器列表的获取。

做事调用者和做事供应者在随着 Tomcat 容器启动后,会以域名(比如“xxx.tbsite.net”)的办法获取到可用的地址做事器,通过向地址做事器分别发送获取配置做事器和 Diamond 做事器做事 IP 列表要求的办法,在容器启动完成后,就已经在该做事节点上获取到了配置做事器和 Diamond 做事器的 IP 列表信息。
全体过程如图 3-5 中的步骤①②。

2)做事的注册发布。

作为做事供应者,当获取到配置做事器的做事器列表后,则向配置做事器发送当前运用中包含的做事供应者干系信息(这些信息均是从运用的配置文件中获取到,比如做事的接口类全名、做事版本、所属做事组等信息),联同当前做事器的 IP 地址、做事端口等信息进行做事注册发布,如图 3-5 中的步骤③。
这个步骤在每一个有做事供应的运用启动时都会自动实行,比如现在有 5 个供应同一做事的运用启动后,此时在配置做事器上就已经保存了供应这一做事的 5 个做事器干系信息。

3)做事的订阅。

当作为做事调用者的运用启动时,同样在完成配置做事器列表的获取后,就进行与配置做事器的交互,发送做事消费者干系信息(同样包含了做事的接口全名,做事版本、所属做事组)到配置做事器进行做事的订阅,此时在配置做事器上会通过做事接口全名+做事版本作为匹配条件在当前配置做事器的内存中进行搜索,一旦获取到对应的做事注册信息,则将对应的做事供应者的做事器组 IP 地址及端口返回给做事调用者所在的运用节点上,此时也就完成了做事调用者端对付它所须要调用的做事供应者做事器列表信息,用于在做事真正交互时利用。
做事订阅过程如图 3-5 中的步骤④⑤。

4)做事规则的推送(如果须要)。

如果没有上文提到对付做事安全管控、流量掌握等需求的时候,对付 Diamond 做事器的利用并不是必需的,在有这样的需求场景时,可通过 Diamond 供应的规则设置界面,可以对指定做事的做事供应者和调用者设置干系的规则,一旦保存规则后,则此规则配置将会在 5 秒内推送到与所设置做事干系的做事节点上。
如图 3-5 中的步骤⑥。

5)做事交互。

在运用进行业务要求处理过程中,涌现了做事调用者对做事供应者的调用时,做事调用者会从已经保存在该运用节点上的做事供应者做事器列表中选择(阿里巴巴内部利用随机模式)个中一台进行做事要求的发送,做事交互期间完备是做事调用者和做事供应者间两台做事器间的,无需通过中间做事器的中转,这便是比较于“中央化” ESB 模式,所有做事交互都须要“中央” ESB 进行做事路由,而当前这种架构称为“去中央化”的紧张缘故原由。
如图 3-5 中的步骤⑦。

阿里巴巴的分布式做事框架核心因此做事化的办法构建全体运用体系的同时,要担保在高并发的情形下,做事具备高效交互、高可用性和扩展能力。
接下来对付 HSF 框架如何给做事供应以上能力详细加以解释。

1、HSF 框架采取 Netty + Hession 数据序列化协议实现做事交互

HSF 框架中采取如今盛行的网络通信框架 Netty 加上 Hession 数据序列化协议实现 HSF 做事间的交互,紧张考虑点是在大并发量时,做事交互性能达到最佳。
这类 RPC 协议采取多路复用的 TCP 长连接办法,在做事供应者和调用者间有多个做事要求同时调用时会共用同一个长连接,即一个连接交替传输不同要求的字节块。
它既避免了反复建立连接开销,也避免了连接的等待闲置从而减少了系统连接总数,同时还避免了 TCP 顺序传输中的线头壅塞(head-of-line blocking)问题。

Hessian 是 HSF 框架中默认利用的数据序列化协议,在数据量较小时性能表现出众,Hessian 的优点是精简高效,同时可以跨措辞利用,目前支持 Java, C++, .net, Python, ruby 等措辞。
其余 Hessian 可以充分利用 Web 容器的成熟功能,在处理大量用户访问时很有上风,在资源分配、线程排队、非常处理等方面都可以由 Web 容器担保。

HSF 框架同时也支持切换利用 Java 序列化,Hession 比较 JDK 标准的序列化办法(即基于 Serializable 接口的标准序列化),在范例场景中,其序列化韶光开销可能缩短 20 倍。
虽然 Hessian 不是最快的序列化协议,但它对付繁芜业务工具的序列化精确率、准确性相较于最稳定的 Java 序列化并不逊色太多。

业界还有一些比 Hessian 更快的序列化协议,但它们相对付 Hessian 在繁芜场景下的处理能力还是会差一些,以是 Hessian 是在性能和稳定性同时考虑下最优的序列化协议。

阿里巴巴当时在对多种通信协议和数据序列化组件等测试中,Netty + Hession 的组合在互联网高并发量的场景下,特殊是在 TPS 上达到 10w 以上时,性能和效率远比 REST 或者 Web Service 高。

2、HSF 框架的容错机制

由于要担保做事的高可用性,以是在生产环境支配中一定会有多个运用实例作为做事供应者供应某一相同做事。

基于之前所提到的做事框架的运行事理的解释,在进行做事调用时,做事调用者端已经保存了它所须要调用的做事供应者的做事器列表信息(如图 3-6 中为例,则保存了三台做事供应者所在做事器的列表)。

当采取随机办法获取个中一台进行做事交互时(如图 3-6 步骤①),不管是第一台做事器已经某种故障造成了做事要求无法相应,还是该做事器已经吸收了做事要求,在进行做事要求处理过程中涌现了做事器故障(比如宕机、网络问题),造成该做事器没有在规定的韶光(一样平常做事调用会设置到期韶光)返回做事处理的结果,做事调用者端则会获取到做事调用失落败的反馈(如图 3-6 步骤②)。

在 HSF 做事调用的代码中会立即从剩下的做事供应者做事器列表中选择其余一个做事器再次进行做事要求(如图 3-6 步骤③),这一次这个做事供应者实例正常供应了这次做事的要求(如图 3-6 步骤④),从而担保了在个别做事供应者涌现故障时,完备不会影响该做事正常供应做事。

图 3-6 HSF 做事框架实现做事高可用性事理示意图

同时,由于配置做事器是采取长连接的办法与做事节点进行网络通讯,一旦创造有做事供应者实例涌现故障,配置做事器在秒级就会感知到(如图 3-6 步骤⑤),此时会将出问题这台做事供应者的信息从该做事的做事器列表中删除,并将更新后的做事器列表采取推送的办法同步给与该做事干系的所有做事调用者端(如图 3-6 步骤⑥),这样当下次做事调用者再进行此做事的调用时,就不会由于随机的办法再次对已经停滞做事供应的做事器发起做事的调用。

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

作为 HSF 框架设计之初,最为主要的一个特性便是做事能力的可扩展性。
也便是真正的做到某个做事的业务处理能力能随着做事器资源的增加得到线性的增长。

其实在传统架构中一贯也会强调平台的扩展能力,但均会程度不一的涌现做事节点数量到达一定量后,涌现阻碍平台做事能力扩展的问题,有的是涌现网络传输的瓶颈、也有做事节点接入数量上的限定,前文所描述的 ESB 架构带来的“雪崩”效应也均是这类架构给做事能力的扩展带来影响的缘故原由所在。

如图 3-7 中所描述的场景,当做事面对较大的做事调用压力或将要面临如天猫双11大匆匆、秒杀等活动前,已有的做事供应者各做事器水位(CPU、内存、IO等)处于比较高的情形或现有做事能力知足不了业务访问量的哀求时,则须要通过增加做事节点数量的办法提升该做事的做事处理能力。

图 3-7 HSF 做事框架对做事能力线性扩展支持1

此时,只须要通过增加该做事的做事供应者实例(如图 3-8 所示,增加了一个做事),基于 HSF 框架的运行机制,新增加的做事供应者实例一旦运用启动完成后,可在几秒内开始进行做事要求的处理(紧张完成做事注册发布、更新后做事列表推送到做事调用者端),从而达到分担其他做事器实例压力的浸染,实现做事能力整体水位规复到正常的状态(如图 3-9)。

图 3-8 HSF做事框架对做事能力线性扩展支持2

图 3-9 HSF 做事框架对做事能力线性扩展支持3

正是基于 HSF 框架这一特性,从而真正实现了只要增加做事实例就能实现该做事能力扩展的目标,目前在阿里巴巴共享做事奇迹部中多个做事中央在天猫双 11 那天各自所支配的做事实例节点数量均超过 2000,即同一个做事由超过 2000 个做事实例同时供应负载均衡的做事。

本文节选自机器工业出版社《企业IT架构转型之道——阿里巴巴中台计策思想与架构实战》第 3 章。
由机器工业出版社华章 IT 授权。
基于移动阅读的考虑,部分内容进行了排版调度,想理解本书全部详细内容,可以在各大书店购买。

作者:钟华(花名:古谦) 阿里巴巴中间件首席架构师,15 年中间件领域行业履历。