分布式服务框架HSF
最近在读阿里巴巴中台战略思想与架构这本书,so和大家分享一些我get到的东东。
HSF是阿里巴巴内部的分布式服务框架,这个大家都很熟悉了,先上一张HSF的工作原理图:

这个图说明了HSF框架中每个组件在整个框架中扮演的角色,下面分别介绍下:
(1).服务节点对配置服务器列表的获取。伴随着web容器的启动,服务提供者和服务调用者向地址服务器获取配置服务器和Diamond服务器的ip列表信息,过程见上图的1、2步骤。
(2).服务的注册发布。服务提供者获取配置服务器列表后,将服务的相关信息(接口类全名、服务版本等)包含当前服务器的ip地址、端口等信息注册到配置服务器,即上图的3步骤。
(3).服务的订阅。当服务调用者的应用启动并获取配置服务器列表后,发送服务消费的相关信息(服务接口全名、服务版本等)到配置服务器订阅,然后配置服务器会通过“服务接口全名+服务版本”作为条件在内存中搜索,一旦获取到服务注册信息,就将对应的服务提供者的ip和端口发送到服务调用者的节点上,即上图的4 、5步骤。
(4).服务规则推送(如果需要)。如果对服务安全管控和流量控制有需求时,可以通过Diamond服务器提供规则设置界面,对指定的服务提供者和服务调用者设置相关规则,规则保存后,会在5秒内推送到与设置相关的服务器节点上。
(5).服务交互。在应用进行业务请求处理过程中,出现服务调用者对服务提供者的调用时,服务调用者会从已经保存在该应用节点上的服务提供者服务器列表里选择(阿里巴巴内部使用随机模式)其中一台服务进行请求的发送,服务交互期间是调用者和提供者两台服务器间的调用,无需通过中间别的服务器,这就是称为“去中心化”的主要原因,即上图中的步骤7
接下来具体介绍HSF框架的高效交互、高可用性和扩展能力。
1.HSF框架的采用Netty+Hession数据序列化协议实现服务交互
HSF采用网络通信框架Netty+Hession数据序列化协议实现服务间的调用,主要考虑点在大并发量时,服务的交互性达到最佳。这类RPC协议采用多路复用的TCP长连接方式,即在服务调用者和服务提供者之间有多个服务请求同时调用时会共用一个长连接,一个长连接交替传输不同请求的字节块。它既避免了反复建立连接开销,也避免了连接的等待闲置从而减少了系统的连接总数,同时还避免了TCP顺序传输中的线头阻塞问题。
2.HSF框架的容错机制
为了保证服务的高可用性,在生产环境中相同的服务往往会有很多个应用实例来提供服务,在进行服务调用时,服务调用者端已经保存了它需要调用的服务的服务器列表信。假如有三台服务器提供了相同的服务,当采用随机方式获取其中一台进行服务交互时,不论这台服务器已经发生故障无法回应请求,还是该服务器已经接收了请求,在服务请求处理过程中出现了服务器故障(宕机、网络问题)造成该服务器没有在规定的时间(一般服务调用会设置超时时间)内返回处理结果,则服务调用端会获取服务调用失败的反馈,会立即从剩下的两台机器中选择一台进行服务调用。从而保证了个别服务提供者出现问题,完全不影响该服务提供正常的服务。因为配置服务器是采用长连接的方式与服务器节点进行通信,一旦发现有服务实例出现故障,此时会将这台服务器提供者的信息从服务器的服务列表中删除,然后将更新后的服务列表以推送的方式同步给予该服务相关的所有服务调用者端,这样当下次进行服务调用时,就不会因为随机而对已经停止提供服务的服务器发送请求。
3.HSF框架的线性扩展支持
HSF最为重要的一个特性就是服务能力的可扩展性,真正做到某个服务的业务处理能力随着服务器资源的增加得到线性的增长。基于HSF框架的运行机制,面对超级大的服务调用压力时,新增的服务提供实例(即增加一台服务器)可在几秒内(完成服务的注册发布、更新后的服务列表推送到服务调用端)开始进行服务请求处理,达到分担其他服务器实例压力的作用,实现服务能力整体水位恢复到正常的状态。据说双十一的时候阿里的多个服务中心所部署的服务实例节点数量超过2000个,即同一个服务由超过2000个服务实例同时提供负载均衡的服务。w(゚Д゚)ww(゚Д゚)w
分布式服务框架HSF的更多相关文章
- 阿里巴巴分布式服务框架HSF
HSF称之为高速服务框架HSF(High-speed Service Framework),是在阿里巴巴广泛使用的分布式RPC服务框架. HSF连通不同的业务系统,解耦系统间的实现依赖.HSF从分布式 ...
- 分布式服务框架HSF学习
HSF提供的是分布式服务开发框架,taobao内部使用较多,总体来说其提供的功能及一些实现基础:1.标准Service方式的RPC 1).Service定义:基于OSGI的Service定义方式 ...
- 分布式服务框架选型:面对Dubbo,阿里巴巴为什么选择了HSF?
转载:http://www.sohu.com/a/141490021_268033 阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称“好舒服”)已经被 ...
- 003-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-分布式服务框架的选择
3.1.淘宝平台“服务化”历程 大约2007年,淘宝500人团队,维护一个war包,200多个功能模块. 1)项目团队协同成本高,业务响应越来越慢 2)应用复杂度超出人的认知负载. 3)错误难于隔离[ ...
- 阿里巴巴分布式服务框架 Dubbo 介绍
Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点.Dubbo自2011年开源后, ...
- 【转】阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访
原文链接:http://www.iteye.com/magazines/103 Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ ...
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- 使用dubbo分布式服务框架发布服务及消费服务
什么是DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案. 准备工作 安装zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服 ...
- 阿里巴巴分布式服务框架dubbo学习笔记
Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...
随机推荐
- linux学习之路--(六)用户及权限详解
计算机资源 用户 用户的容器,用户组 权限 进程时用户访问计算机的代理,操作文件的时候,文件本身有权限,进程本身也有权限 安全上下文(secure context) 权限: r, w, x 文件: r ...
- 11 个简单的 Java 性能调优技巧
大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这 ...
- 15.C++-操作符重载
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- 笔记:Jersey REST 传输格式-XML
XML类型是使用最广泛的数据类型,Jersey 对XML类型的数据处理,支持Java领域的两大标准,即JAXP(Java API for XML Processing,JSR-206)和JAXB(Ja ...
- Jenkins集成Docker镜像实现自动发布
1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...
- mariadb插入中文数据乱码解决过程
基本情况: 系统:centos 7 mariadb安装方式:yum 乱码解决过程: 查看当前数据库编码(登录数据库后) # show variables like 'character%'; (上图为 ...
- STL --> deque双向队列
deque简介 deque是双向开口的连续性存储空间.虽说是连续性存储空间,但这种连续性只是表面上的,实际上它的内存是动态分配的,它在堆上分配了一块一块的动态储存区,每一块动态存储去本身是连续的,de ...
- jquery datatable ajax配置详解
我写的这个东西类似于个人笔记,如果你想要完整的而了解 可以去这里看看 http://dt.thxopen.com/ 包括英文原网站都不错. 通过配置ajax的属性和服务器交互 $("sele ...
- 『转载』从内存资源中加载C++程序集:CMemLoadDll
MemLoadDll.h #if !defined(Q_OS_LINUX) #pragma once typedef BOOL (__stdcall *ProcDllMain)(HINSTANCE, ...