淘宝HSF 框架使用 总结
@(JAVA开发)
淘宝HSF 框架使用 总结
随着网站访问量增加,仅仅靠增加机器已不能满足系统的要求,于是需要对应用系统进行垂直拆分和水平拆分。在拆分之后,各个被拆分的模块如何通信?如何保证性能?如何保证各个应用都以同样的方式交互?这就需要一种负责各个拆分的模块间通信的高性能服务框架(HSF)
这三个单词分别是 high-speed-framework 翻译过来的话因该是高速框架之类的,但据说淘宝内部也不这么叫,更多的都是叫 “好舒服”,汉语的三个开头拼音,其实我感觉更加形象和亲民。
介绍完毕,那么talk is cheap show you my code .
正常情况下,我们用tomcat 运行我们的应用的时候,是直接放在部署在tomcat下的。淘宝对tomcat 做了一个封装,因此我们需要下载淘宝的tomcat。
HSF做的事情
- 标准Service方式的RPC
1)service定义:基于OSGI的service定义方式
2)TCP/IP通信:
IO方式:nio,采用mina框架
连接方式:长连接
服务器端有限定大小的连接池
WebService方式
3)序列化:hessian序列化机制 - 软件负载体系
采用软件实现负载均衡,支持随机、轮询、权重、按应用路由等方式。软件负载均衡没有中间点,通过配置中心统一管理。配置中心收集服务提供者和消费者的注册信息,以推送的方式发送到服务消费者直接使用,不经过中间点;注册中心可以感应服务器的状态,出现failover时,实现注册信息重新推送。 - 模块化、动态化
- 服务治理
服务治理利用注册中心实现服务信息管理(服务提供者、调用者信息查询)、服务依赖关系分析、服务运行状况感知、服务可用性保障,如:路由调整、流量分配、服务端降级、调用端降级等
Pandora 是 HSF 生存的容器,对于 HSF2.X 来说,HSF 只是作为 hsf.jar.plugin 这个插件, 存活在 pandora 中,由 pandora 来管理整个 HSF 的生命周期和二方包的隔离,以后就没有 HSF 版本这一说,只有 pandora 的版本,其中 HSF 的版本由 pandora 来指定。
服务提供者
<!-- 服务提供者 -->
<bean id="customerManageServer" class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean"
init-method="init">
<property name="serviceInterface">
<value>com.tydic.custdemo.service.CustomerServerService</value>
</property>
<property name="target">
<ref bean="customerServerService" />
</property>
<property name="serviceVersion">
<value>G6_liuce_0.1</value>
</property>
<property name="serviceGroup">
<value>TYDIC_CUSTDEMO_GROUP</value>
</property>
<property name="serviceName">
<value>customerManageServer</value>
</property>
</bean>
1. JBoss 服务器启动后,启动HSF SAR 应用(即taobao.hsf.sar,本地开发机放在%DEPLOY_DIR%中,线上机器放置在 /home/admin/${appName}/target下)2. 应用自身启动,Spring 容器初始化。这时:HSFSpringProviderBean: 会进行初始化,将向config server 注册当前这个bean 服务。这一注册过程,简单理解其实就是告诉config server:IP 为xxx.xxx.xxx.xxx 的机器提供了xxx 服务。这??,config server 就可以??据服务调用者的请求中的服务名来转发推送服务地址了。 HSFSpringConsumerBean: 会进行初始化,将向config server 订阅当前这个bean 服务,过程可以简单理解为:告诉config server:IP 为 xxx.xxx.xxx.xxx 的需要提供xxx 服务,Config server 就会??据这一服务名返回给应用相应的服务地址。
3. 在HSF 服务调用者订阅到服务地址后,就可以使用该服务地址执行服务调用了。一个HSF 服务通常并不是由一台机器提供的,所以,订阅到的 服务地址通常是一个地址列表,里面包含了所有提供了该服务的地址。HSF 会随机选择一个服务地址进行服务调用。如下图所示。
服务提供者和服务调用者的组名字需要相同 不是相同一个组的,负责五无法调用
*
target:为对应服务的具体实现,也是一个 Spring Bean,必须配置。
* serviceInterface:定义了对外提供服务的接口,必须配置(与版本号一起作为服务名)。
* serviceVersion:为服务的版本号,可以利用版本号来区分服务(与接口名一起作为服务名),必须配置。
* <property name="serviceGroup"><value>HSF</value></property>
* serviceName:用于方便管理的服务名称,并非服务的 dataId,可选配置,推荐使用, 默认为 null。
* serviceInterface:定义了对外提供服务的接口,必须配置 (与版本号一起作为服务名)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
<!-- 普通消息生产者配置 -->
<bean id="PID_common" class="com.aliyun.openservices.ons.api.impl.rocketmq.ProducerImpl" init-method="start" destroy-method="shutdown" >
<constructor-arg> //构造器注入
<props>
<prop key="ProducerId" >PID_common </prop>
<prop key="AccessKey" >${AccessKey} </prop>
<prop key="SecretKey" >${SecretKey} </prop>
</props>
</constructor-arg>
</bean >
<!-- 普通消息生产者使用类属性配置 -->
<bean id="baseProducer" class="com.tydic.base.ons.BaseProducer" >
<property name= "topic" value ="TOPIC_G6_KXW"/>
<property name= "tag" value="MSG_DEDUCT_BALANCE" />
<property name= "producer" ref="PID_common" ></property>
</bean >
淘宝HSF 框架使用 总结的更多相关文章
- 淘宝HSF服务的原理以及简单的实现
淘宝HSF服务具体来说分三个应用:api接口,service服务,本地应用. 最基本的Api服务应该是十分干净的,不含方法,只有接口.它是要被打包(jar包的形式)到中央仓库去的. service服务 ...
- 淘宝前端框架kissyui
http://docs.kissyui.com/1.4/docs/html/guideline/why-kissy.html
- 淘宝可伸缩高性能互联网架构HSF(转)
文章转自http://blog.csdn.net/hpf911/article/details/14165865 时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深.下面就结合淘宝目 ...
- Java中间件:淘宝网系统高性能利器(转)
淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性.可靠性也显得尤为重要.那 ...
- Java中间件:淘宝网系统高性能利器
[TechTarget中国原创]淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的 ...
- 淘宝PHPSDK2.0 剔除 lotusphp框架---兄弟连教程
淘宝PHPSDK2.0 剔除 lotusphp框架---兄弟连教程. lotusphp是一个国产开源的php框架 由于有个朋友公司是做淘宝客的,还由于不少朋友在开淘宝,于是有必要研究下.尽管个人认为微 ...
- 淘宝自己的前端框架KISSY(类似jquery) - 简易指南
KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架. 具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性. 在以下方面具有一定优势: A.拥有大量的中文文档: ...
- 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...
- [KISSY5系列]淘宝全终端框架 KISSY 5--从零开始使用
KISSY 是淘宝一个开源的 JavaScript 库,包含的组件有:日历.图片放大镜.卡片切换.弹出窗口.输入建议等 一.简介 KISSY 是一款跨终端.模块化.高性能.使用简单的 JavaScri ...
随机推荐
- ogre3D学习基础8 --- 资源管理器
资源管理 可管理的资源有: 材质资源:在.material文件中包含的材质脚本定义(技术.通路.纹理单元等数据的定义). 模型资源:经过优化的二进制网格模型文件,扩展名为.mesh.包含几何信息和一些 ...
- 聊聊、Highcharts 动态数据优化版
好久没来博客园了,最近项目太紧.上一篇写了 <Highcharts 之[动态数据]>,不够完善,虽然横纵轴可以动态取数据,但是行业信息是固定的,不能随着大数据热点改变.废话不说,直接上代码 ...
- 正则表达式与python中re模块
一个网站,正则表达式入门的,很好 http://www.jb51.net/tools/zhengze.html 下面这个包含对python中re的介绍,也是很不错的http://www.w3cscho ...
- 【hihocoder】欧拉路径 并查集判连通
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- Hadoop HDFS 中的一些常用命令
转载自:hadoop HDFS常用文件操作命令 命令基本格式: hadoop fs -cmd < args > 1.ls hadoop fs -ls / 列出hdfs文件系统根目录下的目录 ...
- Xode 8 的那些坑
刚发布完Xcode的8.0果断更新了,发现用起来非常容易闪退,关键是我编辑项目时默认使用Xcode8打开,导致我用Xcode7打开Xib是报错: This version does not suppo ...
- Linux中将一个GBK编码的文件转换成UTF-8编码文件
Linux中将一个GBK编码的文件转换成UTF-8编码文件 使用iconv 命令iconv -f GBK -t UTF-8 file1 -o file2 输出另一个文件,然后再覆盖源文件内容
- POJ3625 Building Roads
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10803 Accepted: 3062 Description Fa ...
- 【Tyvj2133&BZOJ1146】网络管理Network(树套树,DFS序,树状数组,主席树,树上差分)
题意:有一棵N个点的树,每个点有一个点权a[i],要求在线实现以下操作: 1:将X号点的点权修改为Y 2:查询X到Y的路径上第K大的点权 n,q<=80000 a[i]<=10^8 思路: ...
- sharpwebmail邮件管理系统开源 下载及使用方法
原文发布时间为:2008-11-16 -- 来源于本人的百度文章 [由搬家工具导入] 网址:http://sourceforge.net/projects/sharpwebmail/ 点击后:点击do ...