论坛首页 Java企业应用论坛

内部系统间调用效率的讨论

浏览 14251 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-22  
我觉得想复杂了。能不能就简单通过http呢。不需要考虑队列,每个请求无状态。如果是内网,我并不认为http调用会很慢。
0 请登录后投票
   发表时间:2012-08-22  
allwefantasy 写道
我觉得想复杂了。能不能就简单通过http呢。不需要考虑队列,每个请求无状态。如果是内网,我并不认为http调用会很慢。

你想得太简单了,再说,同一台服务器之间,你还通过http去互相访问,通过httpClient这类东西去请求,这么个折腾法效率不是一般的浪费。

同一台机器,你有必要按照互联网之间的通信方式来进行么?
0 请登录后投票
   发表时间:2012-08-22  
瞬间是:某人一按按钮,另外一个地方的警报器就马上响起来,绝对不能漏接,绝对不能等待。
纳秒?毫秒?有指标吗。
0 请登录后投票
   发表时间:2012-08-22  
vlinux 写道

偶不是大牛,不过跳出来吐槽下

 

统一调用平台,实际上你要做的是业务总线咯。用JMS的方式不是说不ok,但从执行效率来说绝对不是高效的。因为你的业务总线(也就是你的统一调用平台啦)是一个绝对的单点,这就意味着你的这个平台必须保证至少一组热备。另外由于是所有业务都接入,每个业务自身都有优先级,所以你的前置接口机必须根据业务优先级进行物理隔离,防止低级业务挤占高级业务的线程池。物理隔离还必须延伸到JMS,防止不同优先级的业务事件相互挤占。此外基于JMS的QoS你还很不好做。

 

还有JMS消息的重复投递、无序投递,服务的幂等被迫做得很细,如果业务上无法做幂等,你还得在技术上判重。

当JMS的Producer全部下线(server端故障)时,做为Consumer无法及时感知,无法立即返回业务方失败,只能活生生的等待超时。

 

 

 


做为业务总线的反面:去中心化的方案,偶很不厚道的推荐自己之前写的一款RMI的小软件“挖掘机”,http://code.google.com/p/excavator/

 

 

 

看了下相关的源码,Profiler.java里面似乎是 Michael Zhou的神作啊。。。不过借鉴下倒无妨

0 请登录后投票
   发表时间:2012-08-22  
liyebing 写道
vlinux 写道

偶不是大牛,不过跳出来吐槽下

 

统一调用平台,实际上你要做的是业务总线咯。用JMS的方式不是说不ok,但从执行效率来说绝对不是高效的。因为你的业务总线(也就是你的统一调用平台啦)是一个绝对的单点,这就意味着你的这个平台必须保证至少一组热备。另外由于是所有业务都接入,每个业务自身都有优先级,所以你的前置接口机必须根据业务优先级进行物理隔离,防止低级业务挤占高级业务的线程池。物理隔离还必须延伸到JMS,防止不同优先级的业务事件相互挤占。此外基于JMS的QoS你还很不好做。

 

还有JMS消息的重复投递、无序投递,服务的幂等被迫做得很细,如果业务上无法做幂等,你还得在技术上判重。

当JMS的Producer全部下线(server端故障)时,做为Consumer无法及时感知,无法立即返回业务方失败,只能活生生的等待超时。

 

 

 


做为业务总线的反面:去中心化的方案,偶很不厚道的推荐自己之前写的一款RMI的小软件“挖掘机”,http://code.google.com/p/excavator/

 

 

 

看了下相关的源码,Profiler.java里面似乎是 Michael Zhou的神作啊。。。不过借鉴下倒无妨

 

    慢慢深入的看代码。确实不错呢!!!加油!!很不错的实现

0 请登录后投票
   发表时间:2012-08-22   最后修改:2012-08-22
liyebing 写道
liyebing 写道
vlinux 写道

偶不是大牛,不过跳出来吐槽下

 

统一调用平台,实际上你要做的是业务总线咯。用JMS的方式不是说不ok,但从执行效率来说绝对不是高效的。因为你的业务总线(也就是你的统一调用平台啦)是一个绝对的单点,这就意味着你的这个平台必须保证至少一组热备。另外由于是所有业务都接入,每个业务自身都有优先级,所以你的前置接口机必须根据业务优先级进行物理隔离,防止低级业务挤占高级业务的线程池。物理隔离还必须延伸到JMS,防止不同优先级的业务事件相互挤占。此外基于JMS的QoS你还很不好做。

 

还有JMS消息的重复投递、无序投递,服务的幂等被迫做得很细,如果业务上无法做幂等,你还得在技术上判重。

当JMS的Producer全部下线(server端故障)时,做为Consumer无法及时感知,无法立即返回业务方失败,只能活生生的等待超时。

 

 

 


做为业务总线的反面:去中心化的方案,偶很不厚道的推荐自己之前写的一款RMI的小软件“挖掘机”,http://code.google.com/p/excavator/

 

 

 

看了下相关的源码,Profiler.java里面似乎是 Michael Zhou的神作啊。。。不过借鉴下倒无妨

 

    慢慢深入的看代码。确实不错呢!!!加油!!很不错的实现

 

那代码,是该好好调整下了,省得又被阿里的童鞋认出来

0 请登录后投票
   发表时间:2012-08-22  
方世玉 写道
瞬间是:某人一按按钮,另外一个地方的警报器就马上响起来,绝对不能漏接,绝对不能等待。
纳秒?毫秒?有指标吗。

要求没那么精确,反应在五秒以内就是正常。

反应不是最关键的,我怕java端宕掉,但是C++端得不到结果不知道该怎么处理后续步骤;
更担心Java端的Socket Server出现大规模线程等待,导致C++新请求进不来。
0 请登录后投票
   发表时间:2012-08-22  
你这个场景典型的用ICE啊,绝对的合适啊
0 请登录后投票
   发表时间:2012-08-23  
youarestupid 写道
方世玉 写道
瞬间是:某人一按按钮,另外一个地方的警报器就马上响起来,绝对不能漏接,绝对不能等待。
纳秒?毫秒?有指标吗。

要求没那么精确,反应在五秒以内就是正常。

反应不是最关键的,我怕java端宕掉,但是C++端得不到结果不知道该怎么处理后续步骤;
更担心Java端的Socket Server出现大规模线程等待,导致C++新请求进不来。

 

5ms,折腾那么多做啥,socket,妥妥的。

0 请登录后投票
   发表时间:2012-08-23  
allwefantasy 写道
我觉得想复杂了。能不能就简单通过http呢。不需要考虑队列,每个请求无状态。如果是内网,我并不认为http调用会很慢。

系统相互之间直接调用,连接就太多了
比如10个应用都要调用对方,结果需要100种连接,网络也不好保证啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics