`
javatracker
  • 浏览: 25287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分布式通信框架

 
阅读更多

      经过一个半月的编码,自己开发的分布式通信框架终于有了基本的雏形,采用TCP/IP协议,用Netty框架实现底层通信,序列化方式支持JDK自带的方式、支持Hessian、也支持Protobuf和Thrift,一般Java调Java用Hessian和Jdk序列化比较方便,直接将服务端注册,客户端生成代理即可使用。Protobuf和Thrift是为了应对跨语言调用准备的,可以通过伪代码生成业务依赖(接口、参数、返回值、异常等)。框架初步具备了负载均衡和容错,可以路由到具体的重载方法。目前只支持同步调用,后续将支持回调异步、Future异步和Oneway异步。

 

      之所以要自己开发通信框架主要有两个原因:

      1、开源框架都有自己的不足,比如Hessian架构在Http协议之上,效率低不说,不能脱离web容器,同时虽说可以支持跨语言,但没有一个统一的标准来生成各种语言的业务客户端,要手工编写各种业务依赖,同时对复杂参数的序列化支持并不好,自身并不具备负载均衡和容错的能力。Thrift相对比较简单,没有负载均衡和容错机制,没有集群功能。Protobuf本身只是一个序列化框架,仅有远程调用接口,并没有实现。ICE倒是一个不错的东西,但有点庞大,同时不满足下面的要求。

      2、和后续的分布式解决方案(分布式数据层、消息中间、集群和业务配置服务、监控系统)无缝集合,使这些底层应用解决一个个业务集群的同时,也能处于大集群的有效监控之中,为后期的自动化升降级做准备。

分享到:
评论
44 楼 attend 2012-05-23  
用dubbo吧,挺好用的。
43 楼 zxlsky1314 2010-09-24  
同求开源,我目前所在的地方也是自己实现的基于socket的rpc通信框架
42 楼 kimmking 2010-09-24  
javatracker 写道
kimmking 写道
rain2005 写道
简单的自定义协议比http协议高效是毋庸置疑的,你看看有什么内部通讯协议采用http的,采用http无非就是客户端资源丰富。

内部的通讯协议,这个定义的范围太广。


银行的前置系统,ESB中都有高效的http处理。


前置系统肯定要HTTP的,前置HTTP直接用Web容器处理就可以了,另外银行由于事务的高要求,通信上这点速度损失已经不重要了,用什么协议都要等待那么一会,反正各家银行都那么慢。互联网就不一样了,你慢别人快的话肯定会损失一部分用户的。

ESB只是兼容http,ESB支持非常多的协议,他的目的不是让通信有多快,而是让尽可能多的异构系统相互通信,尽可能在不改变原来系统接口或结构的情况下将多个系统融合进来。

自定义框架一个优先作用就是规范各个系统,使之尽可能符合框架规定的规范来提高系统速度和稳定性,当然也会支持其他异构系统,但规范内的是占主流的。

前置必须得快,而且稳定,所以的系统都挂上面,慢了或不稳定都是要命的。
在ESB遍地开花的今天,性能现在是最重要的参考数据之一。
41 楼 javatracker 2010-09-24  
kimmking 写道
rain2005 写道
简单的自定义协议比http协议高效是毋庸置疑的,你看看有什么内部通讯协议采用http的,采用http无非就是客户端资源丰富。

内部的通讯协议,这个定义的范围太广。


银行的前置系统,ESB中都有高效的http处理。


前置系统肯定要HTTP的,前置HTTP直接用Web容器处理就可以了,另外银行由于事务的高要求,通信上这点速度损失已经不重要了,用什么协议都要等待那么一会,反正各家银行都那么慢。互联网就不一样了,你慢别人快的话肯定会损失一部分用户的。

ESB只是兼容http,ESB支持非常多的协议,他的目的不是让通信有多快,而是让尽可能多的异构系统相互通信,尽可能在不改变原来系统接口或结构的情况下将多个系统融合进来。

自定义框架一个优先作用就是规范各个系统,使之尽可能符合框架规定的规范来提高系统速度和稳定性,当然也会支持其他异构系统,但规范内的是占主流的。
40 楼 javatracker 2010-09-24  
Arden 写道
可以看看基于scala的分布式框架akka,另外我觉得ICE最大的好处是目前有对移动设备的支持,包括iphone,android.


多谢提醒,移动支持倒是一个不错的功能支持,目前的设计主要是不涉及用户客户端,一般是浏览器或手机客户端通过HTTP或其他协议向自身服务端请求,在自身服务端再依赖后端系统时才用这个框架,后面会考虑用户客户端的支持。
39 楼 Arden 2010-09-21  
可以看看基于scala的分布式框架akka,另外我觉得ICE最大的好处是目前有对移动设备的支持,包括iphone,android.
38 楼 kimmking 2010-09-21  
rain2005 写道
简单的自定义协议比http协议高效是毋庸置疑的,你看看有什么内部通讯协议采用http的,采用http无非就是客户端资源丰富。

内部的通讯协议,这个定义的范围太广。


银行的前置系统,ESB中都有高效的http处理。
37 楼 rain2005 2010-09-21  
简单的自定义协议比http协议高效是毋庸置疑的,你看看有什么内部通讯协议采用http的,采用http无非就是客户端资源丰富。
36 楼 myy 2010-09-21  
<div class="quote_title">myreligion 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">
<div class="quote_title">kimmking 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">Hessian架构在Http协议之上,效率低不说,不能脱离web容器 <br><br>--- 这是个伪命题把? http协议最强的地方,就是几乎所有的firewall都打开了80口</div>
<p> </p>
<p>一般来说, http效率不算低。</p>
<p> </p>
<p>长连接,异步servlet,SEDA,线程池。</p>
<p>串起来,是一个很高效的系统。</p>
<p> </p>
</div>
<p><br>恩,我对HTTP效率低着个结论觉得很无语。 http的包头算是很mini的,何来效率低。。。</p>
</div>
<p> </p>
<p>http真的不快。我们做同样的事情,用socket长连接比开源的rcp包基于http实现的,快15倍左右。</p>
<p> </p>
<p>我们测试:在内网环境下,http方式1秒不过几百次查询,socket可以达到上万次,而且对机器连接文件数占用还少很多。<a href="/topic/696261">http://www.iteye.com/topic/696261</a> 的”性能如何“是测试数据。</p>
<p> </p>
<p> </p>
<p> </p>
</div>
<p>笼统说http低效是不合适的,通常http是短连接的,每次都要进行连接,用完后又断开,效率主要损耗在连接建立/拆除上,至于数据传输,都是一样走TCP/IP,没有更低效之说。</p>
35 楼 东吴周郎 2010-09-20  
无码无真相
mar  k 
34 楼 javatracker 2010-09-20  
myreligion 写道
javatracker 写道
myreligion 写道
你是在做一个基于socket的RPC框架吗?我最近也有这方面的打算,普通rpc的http实在太低效了,我们需要一个更快的。如果您已经完成了,是不是开源的哪?能否分享一下?呵呵。


后面会分享一下设计方面的东西,开源要过一段时间征求老大的意见。

太遗憾了,看来只有自己弄了。不过我会公开出来的,呵呵,希望多指点~~


呵呵,一起交流,这个最终会开源的,不过现在还不太稳定,还有功能没加上,也没得到老大的批准呢。
33 楼 myreligion 2010-09-20  
javatracker 写道
myreligion 写道
你是在做一个基于socket的RPC框架吗?我最近也有这方面的打算,普通rpc的http实在太低效了,我们需要一个更快的。如果您已经完成了,是不是开源的哪?能否分享一下?呵呵。


后面会分享一下设计方面的东西,开源要过一段时间征求老大的意见。

太遗憾了,看来只有自己弄了。不过我会公开出来的,呵呵,希望多指点~~
32 楼 myreligion 2010-09-20  
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">
<div class="quote_title">kimmking 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">Hessian架构在Http协议之上,效率低不说,不能脱离web容器 <br><br>--- 这是个伪命题把? http协议最强的地方,就是几乎所有的firewall都打开了80口</div>
<p> </p>
<p>一般来说, http效率不算低。</p>
<p> </p>
<p>长连接,异步servlet,SEDA,线程池。</p>
<p>串起来,是一个很高效的系统。</p>
<p> </p>
</div>
<p><br>恩,我对HTTP效率低着个结论觉得很无语。 http的包头算是很mini的,何来效率低。。。</p>
</div>
<p> </p>
<p>http真的不快。我们做同样的事情,用socket长连接比开源的rcp包基于http实现的,快15倍左右。</p>
<p> </p>
<p>我们测试:在内网环境下,http方式1秒不过几百次查询,socket可以达到上万次,而且对机器连接文件数占用还少很多。<a href="http://www.iteye.com/topic/696261">http://www.iteye.com/topic/696261</a> 的”性能如何“是测试数据。</p>
<p> </p>
<p> </p>
<p> </p>
31 楼 javatracker 2010-09-20  
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">
<div class="quote_title">kimmking 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">Hessian架构在Http协议之上,效率低不说,不能脱离web容器 <br><br>--- 这是个伪命题把? http协议最强的地方,就是几乎所有的firewall都打开了80口</div>
<p> </p>
<p>一般来说, http效率不算低。</p>
<p> </p>
<p>长连接,异步servlet,SEDA,线程池。</p>
<p>串起来,是一个很高效的系统。</p>
<p> </p>
</div>
<p><br>恩,我对HTTP效率低着个结论觉得很无语。 http的包头算是很mini的,何来效率低。。。</p>
</div>
<p> </p>
<p>效率的高低是相对,说HTTP低是相对于TCP/IP的,分布式系统可能是多层依赖,每层依赖都需要消耗传输时间,HTTP协议是TCP/IP之上的协议,架构在HTTP协议之上就多了一次再编码和解码的过程,而且传输的数据也比直接用TCP/IP大。假设A依赖B,B依赖C,C又依赖D,这样在每一次的传输过程中多消耗一点的时间,对用户来说就多几倍的等待,对提高页面响应来说是个问题,作为底层框架应尽可能的减少这种消耗。</p>
30 楼 javatracker 2010-09-20  
javatracker 写道
mercyblitz 写道
javatracker 写道
kimmking 写道
javatracker 写道
kimmking 写道
javatracker 写道

仿照Activemq的模式?

感觉还是服务器端做一个loadbalance合适,统一控制dispatch策略,heartbeat检测,和failover。



没,参照了JBossRemoting和淘宝的,在客户端做的loadbalance。
在服务端做loadbalance的话,做loadbalance的这个服务端本身就是个单点。



LVS,TCP的四层交换技术?




这是一个实现方式,但不想在太底层实现,用LVS的话没办法和上层集群做统一协调,另外做LVS分发那台机器还是个单点,又要引入解决LVS单点的问题,所以还是客户端实现方便。


哦,明白了,不过这样客户又很多选择的服务器,难道采用轮询?

估计是failover~


恩,但是又感觉像DNS轮询,一般DNS服务器把一串IP发给浏览器,浏览器会获取其中一个(实现不同,行为不同),不过楼主可以说一下怎么来实现的。


目前和轮询也差不多,采用随机的方式,在一个IP列表中随机选在一个发送请求。
29 楼 ray_linn 2010-09-20  
<div class="quote_title">kimmking 写道</div>
<div class="quote_div">
<div class="quote_title">ray_linn 写道</div>
<div class="quote_div">Hessian架构在Http协议之上,效率低不说,不能脱离web容器 <br><br>--- 这是个伪命题把? http协议最强的地方,就是几乎所有的firewall都打开了80口</div>
<p> </p>
<p>一般来说, http效率不算低。</p>
<p> </p>
<p>长连接,异步servlet,SEDA,线程池。</p>
<p>串起来,是一个很高效的系统。</p>
<p> </p>
</div>
<p><br>恩,我对HTTP效率低着个结论觉得很无语。 http的包头算是很mini的,何来效率低。。。</p>
28 楼 mercyblitz 2010-09-20  
mercyblitz 写道
javatracker 写道
kimmking 写道
javatracker 写道
kimmking 写道
javatracker 写道

仿照Activemq的模式?

感觉还是服务器端做一个loadbalance合适,统一控制dispatch策略,heartbeat检测,和failover。



没,参照了JBossRemoting和淘宝的,在客户端做的loadbalance。
在服务端做loadbalance的话,做loadbalance的这个服务端本身就是个单点。



LVS,TCP的四层交换技术?




这是一个实现方式,但不想在太底层实现,用LVS的话没办法和上层集群做统一协调,另外做LVS分发那台机器还是个单点,又要引入解决LVS单点的问题,所以还是客户端实现方便。


哦,明白了,不过这样客户又很多选择的服务器,难道采用轮询?

估计是failover~


恩,但是又感觉像DNS轮询,一般DNS服务器把一串IP发给浏览器,浏览器会获取其中一个(实现不同,行为不同),不过楼主可以说一下怎么来实现的。
27 楼 tedeyang 2010-09-20  
分布式体现在哪里?
26 楼 kimmking 2010-09-20  
javatracker 写道
kimmking 写道
javatracker 写道
kimmking 写道
javatracker 写道

仿照Activemq的模式?

感觉还是服务器端做一个loadbalance合适,统一控制dispatch策略,heartbeat检测,和failover。



没,参照了JBossRemoting和淘宝的,在客户端做的loadbalance。
在服务端做loadbalance的话,做loadbalance的这个服务端本身就是个单点。



LVS,TCP的四层交换技术?




这是一个实现方式,但不想在太底层实现,用LVS的话没办法和上层集群做统一协调,另外做LVS分发那台机器还是个单点,又要引入解决LVS单点的问题,所以还是客户端实现方便。


哦,明白了,不过这样客户又很多选择的服务器,难道采用轮询?

估计是failover~
25 楼 mercyblitz 2010-09-20  
kimmking 写道
javatracker 写道
kimmking 写道
javatracker 写道

仿照Activemq的模式?

感觉还是服务器端做一个loadbalance合适,统一控制dispatch策略,heartbeat检测,和failover。



没,参照了JBossRemoting和淘宝的,在客户端做的loadbalance。
在服务端做loadbalance的话,做loadbalance的这个服务端本身就是个单点。



LVS,TCP的四层交换技术?




这是一个实现方式,但不想在太底层实现,用LVS的话没办法和上层集群做统一协调,另外做LVS分发那台机器还是个单点,又要引入解决LVS单点的问题,所以还是客户端实现方便。


哦,明白了,不过这样客户又很多选择的服务器,难道采用轮询?

相关推荐

    0729分布式通信框架-RMI1

    在分布式系统中,分布式通信框架起着至关重要的作用,它们使得不同的计算机节点能够相互通信并协同工作。"0729分布式通信框架-RMI1"的主题主要围绕分布式架构、TCP/IP协议、序列化、HTTP与HTTPS协议以及RMI(Remote ...

    分布式通信框架-webservice分析笔记1

    分布式通信框架-webservice 分析笔记 本文对分布式通信框架-webservice 进行了深入的分析和讨论,涵盖了 webservice 的定义、特点、协议层、SOAP 协议、WSDL 文件、SEI 接口等方面。 一、webservice 的定义和特点 ...

    架构探险:从零开始写分布式服务框架 程序开发书籍 RPC框架 李业兵

    包括常见的RPC框架、常见的序列化/反序列化方案及选型、分布式服务框架服务的发布引入实现细节、软负载实现、底层通信方案实现、服务注册与发现实现、服务治理常见的功能等。通过对这些知识点的逐步讲解,层层深入,...

    分布式服务框架原理与实践-李林锋著.pdf

    接着分析了服务底层如何有效地进行通信,包括通信框架、序列化/反序列化及协议栈等;然后分析了服务如何做到高可靠性及高安全性等重要特性;最后也阐述了从服务化如何向微服务演进。干货满满!

    基于分布式计算框架的通信对抗系统研究.pdf

    分布式计算框架是当今高性能计算领域的重要技术,它...未来,随着通信设备的进一步发展和更新,通信对抗系统将面临更多的挑战和机遇,其分布式通信框架将继续扮演关键角色,为实现高效、智能的通信对抗提供技术支撑。

    《分布式服务框架原理与实践》高清完整版

    Dubbo、gRPC、Thrift等是常见的RPC框架,它们处理服务间的通信协议、序列化和异常处理等问题。 4. **熔断与降级**:在高并发情况下,为了保护系统稳定,需要设置熔断机制。当服务调用频繁失败时,熔断器会暂时切断...

    基于ZeroMQ的SOA分布式通信系统设计.pdf

    该设计方案提出了一种基于ZeroMQ的SOA分布式通信框架,并设计了一套与之对应的通讯协议,以支持多种编程语言,并在性能测试中表现出了优于其他主流SOA通信系统的效率。 在分布式系统设计中,首先需要考虑的是如何...

    Android代码-大众点评开源的分布式服务通信框架(RPC)

    Pigeon Documentation User Guide Release Notes Release Notes Comitters 苗向彬,saber.miao ...Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance...

    分布式服务框架原理与实践 PDF

    分布式服务框架的核心目标之一是实现服务间的通信和协调。这涉及到服务注册与发现,使得服务提供者能够向注册中心注册自己的服务,而服务消费者可以通过查找注册中心获取到服务提供者的地址。此外,负载均衡策略也是...

    davinci:java基于PRC的分布式通信框架

    《毕设20180331冰海作品:基于Java的RPC分布式通信框架——davinci》 在IT行业中,分布式系统已经成为大型互联网应用的基石,而RPC(Remote Procedure Call)框架作为构建分布式系统的重要工具,其作用不可忽视。...

    rd:适用于.net,kotlin,js的React式分布式通信框架。 受到Rider IDE的启发

    研发部 .NET,Kotlin和C ++的React性分布式通信框架(实验性)。 受JetBrains Rider IDE的启发。结构该框架包含多个库,用于单进程使用和跨进程通信。一生JetBrains Core库提供了优雅的处置,并发性和响应式编程。 ...

    分布式服务框架原理与实践_李林锋著

    分布式服务框架是现代软件开发中的核心组成部分,尤其在大型企业及互联网公司中广泛采用。它是一种将复杂系统拆分成多个独立服务的技术方案,每个服务都能独立部署、扩展和升级,以此来提高系统的可维护性和可扩展性...

    分布式服务框架原理与实践_李林锋pdf(带目录)

    6. **RPC框架**:远程过程调用(RPC)是分布式服务间通信的关键,可能涉及RMI、gRPC、Dubbo、Thrift等RPC框架的工作原理和使用。 7. **消息队列**:在分布式系统中,消息队列如RabbitMQ、Kafka、ActiveMQ等用于异步...

    从零开始写分布式服务框架-书中案例全部代码

    包括常见的RPC框架、常见的序列化/反序列化方案及选型、分布式服务框架服务的发布引入实现细节、软负载实现、底层通信方案实现、服务注册与发现实现、服务治理常见的功能等。通过对这些知识点的逐步讲解,层层深入,...

    .net分布式开发框架

    .NET分布式开发框架是一种用于构建可扩展、高可用性和高性能应用程序的技术。它允许开发者将应用程序分解为多个组件,这些组件可以在不同的计算机上独立运行并互相协作,以实现分布式处理。在这个项目实战中,我们...

    大规模分布式存储系统:原理解析与架构实战,分布式服务框架原理与实践_李林锋著

    另一方面,《分布式服务框架原理与实践》聚焦于服务间的通信与协调,这在微服务架构中尤为重要。书中的内容可能涵盖: 1. 服务发现:Eureka、Consul、Zookeeper等服务注册与发现机制。 2. 负载均衡:如 Ribbon、...

    分布式服务框架原理与实践.李林锋(详细书签)

    1. **分布式系统基础**:首先,理解分布式系统的基本概念至关重要,包括节点、通信协议、一致性模型(如CAP理论)、分区容错性等。分布式服务框架就是构建在这些基础之上。 2. **服务发现与注册**:在分布式环境中...

    从零开始写分布式服务框架 最新版 源码

    分布式服务框架是现代互联网应用架构中的重要组成部分,它旨在解决单体应用在高并发、高可用、可扩展性等方面的挑战。本资源提供了“从零开始写分布式服务框架”的最新版源码,对于想要深入理解分布式系统设计和服务...

    分布式服务框架原理与实践(Dubbo,HSF)_李林锋著

    《分布式服务框架原理与实践(Dubbo,HSF)_李林锋著》这本书深入探讨了分布式服务框架的关键技术和实际应用,主要聚焦于两个知名的开源框架——Dubbo和HSF。这两者都是实现高效率、可扩展的分布式服务的核心工具,尤其...

Global site tag (gtag.js) - Google Analytics