HSF和Dubbo有什么区别

一、

以下摘录自企业级分布式应用服务EDAS官网段落

RPC服务

提供对Dubbo和HSF两个RPC框架的支持。阿里巴巴第一代RPC框架Dubbo是国内第一款成熟的商用级RPC框架,已于2011年正式对外开源,目前已发展成为国内开源价值最高、用户使用规模最大的开源软件之一。最新一代RPC框架HSF,全称High Speed Framework,也叫"好舒服","很舒服"框架,是阿里内部对这一款高性能服务框架的昵称,是一款面向企业级互联网架构量身定制的分布式服务框架。HSF以高性能网络通信框架为基础,提供了诸如服务发布与注册,服务调用,服务路由,服务鉴权,服务限流,服务降级和服务调用链路跟踪等一系列久经考验的功能特性。

来源:企业级分布式应用服务EDAS_企业云计算解决方案

二、

dubbo和S-HSF测试对比

转载 :http://www.cnblogs.com/langtianya/p/5720275.html#undefined

今天没什么事,简单测试下RPC框架性能: HSF完胜dubbo

1.dubbo测试结果:

note: 
dubbo测试时有使用ZooKeeper,所以存在不公平性,不一定准确。

同步模型

耗时:16.808 s 
平均:0.16808 ms 
TPS:5949.547834364588

测试数据:

  1. public class TPS_TEST {
  2. public static void main(String[] args) throws InterruptedException {
  3. final ClassPathXmlApplicationContext context =
  4. new ClassPathXmlApplicationContext(
  5. new String[] {"file:E:/1-project_test/dubbox-master/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml"});
  6. final HelloService helloService = (HelloService)context.getBean("helloService"); // get service invocation proxy
  7. ExecutorService executorServicePool = Executors.newFixedThreadPool(200);
  8. final int size = 100000;
  9. final CountDownLatch cdl = new CountDownLatch(size);
  10. long begin = System.currentTimeMillis();
  11. for (int i = 0; i < size; i++) {
  12. executorServicePool.execute(new Runnable() {
  13. @Override
  14. public void run() {
  15. try {
  16. String hello = helloService.hello("aa"); // do invoke!
  17. //System.out.println( hello ); // cool, how are you~
  18. cdl.countDown();
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. });
  24. }
  25. //executorServicePool.shutdown();
  26. //executorService.awaitTermination(10, TimeUnit.MINUTES);
  27. cdl.await();//等待所有任务处理完
  28. long time = System.currentTimeMillis() - begin;
  29. System.out.println("耗时:" + (double) time / 1000 + " s");
  30. System.out.println("平均:" + ((double) time) / size +" ms");
  31. System.out.println("TPS:" + (double) size / ((double) time / 1000));
  32. }
  33. }

2.hsf 测试结果:

异步模型:

耗时:6.305 s 
平均:0.06305 ms 
TPS:15860.428231562253

测试数据:

  1. public class Client {
  2. public static void main(String[] args) throws InterruptedException, ExecutionException {
  3. final int size = 100000;
  4. final CountDownLatch cdl = new CountDownLatch(size);
  5. // final TestService testService = ServiceProxyFactory.getRoundFactoryInstance(connector).wrapAsyncProxy(
  6. // TestService.class);
  7. HsfConnector connector = new HsfConnectorImpl();
  8. connector.connect(new InetSocketAddress("localhost", 8082));
  9. final TestService testService = ServiceProxyFactory.getRoundFactoryInstance(connector).wrapAsyncCallbackProxy(
  10. TestService.class, new AsyncCallback<Object>() {
  11. public void doCallback(Object data) {
  12. //System.out.println("received:" + data);
  13. cdl.countDown();
  14. };
  15. @Override
  16. public void doExceptionCaught(Throwable ex, HsfChannel channel, Object param) {
  17. System.out.println(ex);
  18. super.doExceptionCaught(ex, channel, param);
  19. }
  20. });
  21. ExecutorService executorServicePool = Executors.newFixedThreadPool(200);
  22. long begin = System.currentTimeMillis();
  23. for (int i = 0; i < size; i++) {
  24. executorServicePool.execute(new Runnable() {
  25. @Override
  26. public void run() {
  27. try {
  28. testService.test("aa");
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. });
  34. }
  35. //executorServicePool.shutdown();
  36. //executorService.awaitTermination(10, TimeUnit.MINUTES);
  37. cdl.await();//等待所有任务处理完
  38. long time = System.currentTimeMillis() - begin;
  39. System.out.println("耗时:" + (double) time / 1000 + " s");
  40. System.out.println("平均:" + ((double) time) / size +" ms");
  41. System.out.println("TPS:" + (double) size / ((double) time / 1000));
  42. }
  43. }

同步模型:

耗时:9.446 s 
平均:0.09446 ms 
TPS:10586.491636671608

  1. //tips:
  2. //模拟HSF的同步模型:在10万个并发线程发送数据时有时候比异步模型还要快,这点有点想不通,估计是我测试的服务是直接return的场景吧。
  3. /**
  4. * @Title: Client.java
  5. * @Description: TODO(添加描述)
  6. * @date 2012-2-23 上午01:01:33
  7. * @version V1.0
  8. */
  9. public class Client2 {
  10. public static void main(String[] args) throws InterruptedException, ExecutionException {
  11. final int size = 100000;
  12. final CountDownLatch cdl = new CountDownLatch(size);
  13. HsfConnector connector = new HsfConnectorImpl();
  14. connector.connect(new InetSocketAddress("10.118.63.12", 10223));
  15. /*
  16. final TestService testService = ServiceProxyFactory.getRoundFactoryInstance(connector).wrapAsyncCallbackProxy(
  17. TestService.class, new AsyncCallback<Object>() {
  18. public void doCallback(Object data) {
  19. //System.out.println("received:" + data);
  20. cdl.countDown();
  21. };
  22. @Override
  23. public void doExceptionCaught(Throwable ex, HsfChannel channel, Object param) {
  24. System.out.println(ex);
  25. super.doExceptionCaught(ex, channel, param);
  26. }
  27. });
  28. ExecutorService executorServicePool = Executors.newFixedThreadPool(200);
  29. long begin = System.currentTimeMillis();
  30. for (int i = 0; i < size; i++) {
  31. executorServicePool.execute(new Runnable() {
  32. @Override
  33. public void run() {
  34. try {
  35. testService.test("aa");
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. });
  41. }
  42. */
  43. final TestService testService = ServiceProxyFactory.getRoundFactoryInstance(connector).wrapSyncProxy(
  44. TestService.class);
  45. ExecutorService executorServicePool = Executors.newFixedThreadPool(200);
  46. long begin = System.currentTimeMillis();
  47. for (int i = 0; i < size; i++) {
  48. executorServicePool.execute(new Runnable() {
  49. @Override
  50. public void run() {
  51. try {
  52. String hello = testService.test("aa");
  53. cdl.countDown();
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. });
  59. }
  60. //executorServicePool.shutdown();
  61. //executorService.awaitTermination(10, TimeUnit.MINUTES);
  62. cdl.await();//等待所有任务处理完
  63. long time = System.currentTimeMillis() - begin;
  64. System.out.println("耗时:" + (double) time / 1000 + " s");
  65. System.out.println("平均:" + ((double) time) / size +" ms");
  66. System.out.println("TPS:" + (double) size / ((double) time / 1000));
  67. }
时间: 2024-12-29 23:38:58

HSF和Dubbo有什么区别的相关文章

阿里巴巴为什么主推HSF?比Dubbo有哪些优势?

作者:匿名用户链接:https://www.zhihu.com/question/39560697/answer/187538165来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先现在Netty/Grizzly/xio/Mina那么成熟,基于NIO框架写个RPC通讯框架也不是那么复杂么. 其次Dubbo应该是定位为RPC框架, 在Remoting层支持netty,mina,http这些(见下图),个人觉的这样得扩展性灵活性是中看不中用. 下面表述下个人的看法.

dubbo&amp;hsf&amp;spring-cloud简单介绍

Dubbo: 简介:Dubbo是一个分布式服务框架,以及SOA治理方案.其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等. 底部NIO基于netty框架: HSF: 简介:HSF提供的是分布式服务开发框架,taobao内部使用较多,总体来说其提供的功能及一些实现基础:1.标准Service方式的RPC  1).Service定义:基于OSGI的Service定义方式  2).TCP/IP通信:   IO方式:nio,采用mina框架   连接方

基于RPC原理的dubbo

在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责.这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用我们的服务,我们的服务该怎么发布以便他人调用?下文我们将对这两个问题展开探讨. Java 1 2

Spring Boot/Spring Cloud、ESB、Dubbo

如何使用Spring Boot/Spring Cloud 实现微服务应用spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud与Dubbo对比提到Dubbo,我想顺便提下ESB,目前央视新华社也在用ESB来做任务编排,这里先比较下Dubbo和ESB: ESB(企业数据总线),一般采用集中式

Spring Cloud介绍: Spring Cloud与Dubbo对比

spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud与Dubbo对比提到Dubbo,我想顺便提下ESB,目前央视新华社也在用ESB来做任务编排,这里先比较下Dubbo和ESB: ESB(企业数据总线),一般采用集中式转发请求,适合大量异构系统集成,侧重任务的编排,性能问题可通过异构的方式

阿里面试必问的Dubbo相关问题

在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:"如何从0到1设计一个Dubbo的RPC框架",这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设计能力. 具体,我来为大家详解. RPC和RPC框架 1.RPC(Remote Procedure Call) 即远程过程调用, 主要解决远程通信间的问题,不需要了解底层网络的通信机制. 2.RPC框架 RPC框架负责屏蔽底层的传输方式(TCP或者UDP)

RPC原理及实现

1 简介 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性.为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. 2 调用分类 RPC 调用分以下两种: 同步调用 客户方等待调用执行完成并返回结果. 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果. 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果. 异步和同步的区分在于是否等待服务端执行完成

SpringCloud学习之一前置知识理解

前提知识+相关的说明 1. 目前我们学习到最后的微服务架构SpringCloud,到我这里基本人需要大家熟悉以前的学习内容和知识,也即我默认大家已经熟悉了 SpringMVC+Spring/SpringBoot+Mybatis+Maven+git-- 不再重复讲解, 2. 本次Cloud的讲解的方式,由于我们只有2.5天,大概21种技术之多,只能挑选最重要最常用的技能给大家分享,俗称Cloud技术的五大神兽 public classDept{ private Integer id; privat

一文读懂分布式架构知识体系(内含超全核心知识大图)

作者 | 晓土  阿里巴巴高级工程师 姊妹篇阅读推荐:<云原生时代,分布式系统设计必备知识图谱(内含22个知识点)> 导读:本文力求从分布式基础理论.架构设计模式.工程应用.部署运维.业界方案这几大方面,介绍基于 MSA(微服务架构)的分布式知识体系大纲,从而对 SOA 到 MSA 进化有着立体的认识:从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程. 关注“阿里巴巴云原生”公众号,回复“分布”,即可下载分布式系统及其知识体系清晰大图! 随着移动互