`
wendong007
  • 浏览: 3042 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

关于分布式容器的一点想法

阅读更多

      这几天一直在考虑分布式计算的问题,因为之前写过一个IoC框架,所以打算对原来的框架进行扩展,做成一个分布式的容器,该容器的设计目标是:由多个子容器构成一个大的分布式容器,用户不需要知道Bean存在于哪一个容器中,只需知道Bean的ID即可进行调用,对用户来讲,远程容器中的Bean和本地的Bean是没有区别的,容器是非侵入式的,不需要继承任何类或者实现接口。
      最初考虑到比较简单,觉得容器解决的只是容器间的通信问题,我设想的是用户请求远程容器中的Bean时,在本地生成目标接口的一个动态代理,该动态代理通过把参数对象序列化(或者其他方式)后保存在一个调用请求中,然后把调用请求传递给远程容器,远程容器接收到请求后调用容器中的Bean,把返回结果对象序列化后保存在一个调用响应中,然后把调用响应返回给本地容器,由动态代理对象处理后返回。
      真正开始设计之后才发现很多细节问题没有考虑到,比如远程容器中Bean的生存周期(非单例状态的情况下),本地容器中的动态代理对象成为垃圾之后如果保证远程容器中的Bean被回收。我设想的分布式是通过容器间的引用来配置的,比如,容器A引用容器B,那么A可以透明的调用B中的Bean,从简化配置和设计的角度来考虑,如果A引用了B,B又引用了C,应该让A也能够调用C才对,也就是说应该具有传递性,但是很可能存在的情况是容器间存在循环引用,这时如果用户请求了一个不存在的Bean,就会出现死循环的情况。还有容器必须把结果返回给正确的调用者,还有多线程等问题……
      突然想到《非诚勿扰》里的一句台词:老说改进服务质量,怎么改进啊?其实就是细节。

 

分享到:
评论
32 楼 xiaoyu 2009-02-01  
aaa_star 写道
你要做的这些,过去的corba/rmi,现在的sca已经都做了,呵呵,别再重复发明轮子了,如果从学习角度,我觉得更高效的是分析tuscany源码,load, debug, step-step,,



我也觉得奇怪, 为什么有那么的回帖, 但是都没有提到SCA

先看看SCA的规范, 再去看看tuscany

EJB容器本身也是这样的。
31 楼 wendong007 2009-02-01  
<div class="quote_title">regular 写道</div>
<div class="quote_div">顺便说一句,远程的代理,或者也叫做票根(stub)?仅仅是对RMI或者类似技术的使用,能够代表的仅仅是方法。到目前至少我没看到过能够代理成员对象的。比方说<br />
<pre name="code" class="java">class A {
int i;
int getI(){return i;}
void setI(int i) {this.i = i;}
}</pre>
<br /><br />stub仅能访问getI和setI,没有直接能访问i的。所以再模拟,也只是模拟。没有在同一个JVM那样亲近。<br /><br />如果能把成员对象都能通过远程的方法达到同一个JVM里面的效果,我觉得这才是真正的模拟。不过受限制于Java语言,这可能吗?</div>
<p> </p>
<p><span style="font-family: -webkit-monospace; white-space: pre-wrap;">之所以叫代理,就是因为它的返回结果和调用原对象的方法返回结果是一致的,我的想法就是所有跨容器的调用都由容器返回代理对象,当然,这样存在很严重的性能问题,不过反正我也没打算把这东西放到生产环境中,自己写来玩的,没必要太较真</span></p>
30 楼 regular 2009-02-01  
顺便说一句,远程的代理,或者也叫做票根(stub)?仅仅是对RMI或者类似技术的使用,能够代表的仅仅是方法。到目前至少我没看到过能够代理成员对象的。比方说
class A {
int i;
int getI(){return i;}
void setI(int i) {this.i = i;}
}


stub仅能访问getI和setI,没有直接能访问i的。所以再模拟,也只是模拟。没有在同一个JVM那样亲近。

如果能把成员对象都能通过远程的方法达到同一个JVM里面的效果,我觉得这才是真正的模拟。不过受限制于Java语言,这可能吗?
29 楼 pipilu 2009-01-16  
aaa_star 写道
你要做的这些,过去的corba/rmi,现在的sca已经都做了,呵呵,别再重复发明轮子了,如果从学习角度,我觉得更高效的是分析tuscany源码,load, debug, step-step,,


呵呵,同感。我也觉得分析它们的架构和源码学习效果更好,自己做太费时间了,而且很容易在比较低的水平上耗时(实现的过程更多的是重复已有的理解)。
28 楼 sdh5724 2009-01-16  
关于RMI问题, 你可以看看jbossremoting的实现。 他远程CALL实现基本是协议无关的, 也就是, 可以使用你想使用的协议, 关键是你如何设计一个通信工厂来达成你的意愿。 RMI的使用不能称之为入侵, 如果你自己设计一个, 才是最大的入侵方案。 看你如何实现了。
设计一个分布容器并不困难, 困难是高效的协议, 高效的通信机制, 以及容器服务对象的注册查询。

通信上, 如果不想自己设计协议, 我觉得mina+hessina协议是非常好的选择。

类似东西我已经见过实作作品了, 已经在极度高压力下运行。 我甚至看他们能从远程注入bean对象。 非常的方便。
27 楼 aaa_star 2009-01-16  
你要做的这些,过去的corba/rmi,现在的sca已经都做了,呵呵,别再重复发明轮子了,如果从学习角度,我觉得更高效的是分析tuscany源码,load, debug, step-step,,
26 楼 wendong007 2009-01-15  
<div class="quote_title">eyeieye 写道</div>
<div class="quote_div">楼主想法很可爱,但是,网络调用的开销你算到了吗?大规模的细粒度调用在系统间存在的时候,我想你应该准备去买豆腐了。</div>
<p> </p>
<p> </p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;">      我前面也说了,我根本就没考虑真的拿去应用,所以我考虑的只是实现这些功能,至于效率问题我不是很在意,我只是以学习和研究的态度去写这个东西,我现在读大三,想出去实习,学校却不放人,我在学校里根本接触不到真正的应用,之前我也到过一些小作坊式的公司,但是那里的项目基本上都是SSH,除了熟悉业务,基本学不到什么东西,我很喜欢考虑架构方面的问题,但是因为没有实际的工作经验,我根本不知道我应该研究什么,之前我一直在模仿的阶段,我写过IoC、AOP的容器,也写过类似Hibernate的框架,还有一个通用分表框架,这些东西我写出来自己用的都很少,因为我很清楚它们和Spring、Hibernate比起来肯定有差距,我真正给别人开发的时候还是会选择更成熟的技术</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"> </p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;">      现在这个东西是我第一次自己考虑一个东西出来,不足的地方很多,有些是我欠考虑的,有些我也考虑到了,但是现有的能力解决不了这些问题,大家愿意指教的话我很高兴,至于豆腐的问题,如果哪位好心能给我留点,我拿来做个汤也不错</p>
<p> </p>
25 楼 kaneg 2009-01-13  
eyeieye 写道
楼主想法很可爱,但是,网络调用的开销你算到了吗?大规模的细粒度调用在系统间存在的时候,我想你应该准备去买豆腐了。



不要打击楼主了,不管结果如何,楼主有这样的想法已经很好了。自己做的就算比不上ejb什么的,只要够用就行,何必非要很好很强大呢
24 楼 eyeieye 2009-01-13  
楼主想法很可爱,但是,网络调用的开销你算到了吗?大规模的细粒度调用在系统间存在的时候,我想你应该准备去买豆腐了。
23 楼 pipilu 2009-01-12  
<div class="quote_title">wendong007 写道</div>
<div class="quote_div">
<p><span style="white-space: pre-wrap; font-family: -webkit-monospace;"><span style="font-size: medium;">    其实我写这个东西很大程度上是写着玩的,反正马上放寒假了,在家闲着没什么事,借着这个东西学习下相关的知识<br />    现在重量级的东西我也写不出来,轻量级的东西也根本用不到分布式,就像楼上说的,如果真的考虑到业务逻辑的分布,EJB应该算是最好的选择了,而且真正需要分布式容器的地方也没多少,对于那些高负载的系统选择的应该是负载均衡集群,也不是这种分布式,所以说这个东西真正的应用领域,我自己也不知道,我纯粹是出于研究的目的,发到这里就是相和大家一块讨论一下</span></span></p>
</div>
<p> </p>
<p>是啊,我有疑问的地方也就是这些,所以我想知道应用的场景。</p>
<p>是要解决负载均衡和故障转移?</p>
<p>还是要分布式计算,并行处理?</p>
<p>还是为了系统的整合?</p>
<p>自己出于兴趣实现一个粗略的东东也挺好的,但即使是这种情况,也应该先定义好问题的边界,是吧?</p>
<p>最上面你提出的疑问,我感觉挺好奇,但没想清楚那种机制(多个子容器,容器之间的引用)是为了解决什么应用。</p>
22 楼 eyes2near 2009-01-12  
你这东西本质上就是需要集群而已,去看看 terracotta , 已经是很好的解决方案了。
21 楼 mycmq 2009-01-12  
建议参考下JBOSS的集群实现
20 楼 wendong007 2009-01-12  
<p><span style='font-family: -webkit-monospace; white-space: pre-wrap;'><span style='font-size: medium;'>    其实我写这个东西很大程度上是写着玩的,反正马上放寒假了,在家闲着没什么事,借着这个东西学习下相关的知识
    现在重量级的东西我也写不出来,轻量级的东西也根本用不到分布式,就像楼上说的,如果真的考虑到业务逻辑的分布,EJB应该算是最好的选择了,而且真正需要分布式容器的地方也没多少,对于那些高负载的系统选择的应该是负载均衡集群,也不是这种分布式,所以说这个东西真正的应用领域,我自己也不知道,我纯粹是出于研究的目的,发到这里就是相和大家一块讨论一下</span></span></p>
19 楼 hpq852 2009-01-12  
czx566 写道
hpq852 写道
czx566 写道
hpq852 写道
好吧, 一个难题, 分布式事务如何实现?

Spring中没有相关的实现, 原因是因为99%的业务没有这个需求, 那么即使需要用到了就交给EJB吧, 搞那么复杂干吗?



这个可以用悲观或乐观锁实现~

我觉得如果一定要采用分布式容器


最好用EJB3



我这里指的是业务逻辑的分布, 而不是数据库的分布. 不要搞混了. 而在管理业务逻辑分布方面恐怕是EJB唯一可以拿的出手的东西了.



就一般而言,如果你的业务逻辑都分布了,数据库应该也就分布了吧。
  而悲观锁 和 乐观锁  好像和你在那层实现分布是没有关系的吧,就算你在view层控制,也可以。


谁说业务逻辑分布, 数据库就一定要分布? 另外 乐观锁 悲观锁 和数据库的分布式事务半点关系都占不上.
建议先搞清楚业务逻辑分布, 和数据库分布是怎么回事

看看这个帖吧 http://www.iteye.com/topic/72400
18 楼 pipilu 2009-01-12  
貌似有人要填补Java领域的一项空白?

怎么把分布式事务说的那么轻松??WS-Transaction是对WebService实现的分布式事务的定义,这个有人研究明白了么?我正打算了解一下WS-*相关的知识,苦于能查到的资料太少(cxf和glassfish都有WS-*的实现,但只实现了一部分,而且去读那些源码?目前还没鼓足勇气)

还有,有人能告知一下本软件应用的场景么??比如用于解决什么问题,现有的技术在解决时有什么不足。
17 楼 czx566 2009-01-12  
hpq852 写道
czx566 写道
hpq852 写道
好吧, 一个难题, 分布式事务如何实现?

Spring中没有相关的实现, 原因是因为99%的业务没有这个需求, 那么即使需要用到了就交给EJB吧, 搞那么复杂干吗?



这个可以用悲观或乐观锁实现~

我觉得如果一定要采用分布式容器


最好用EJB3



我这里指的是业务逻辑的分布, 而不是数据库的分布. 不要搞混了. 而在管理业务逻辑分布方面恐怕是EJB唯一可以拿的出手的东西了.



就一般而言,如果你的业务逻辑都分布了,数据库应该也就分布了吧。
  而悲观锁 和 乐观锁  好像和你在那层实现分布是没有关系的吧,就算你在view层控制,也可以。
16 楼 hpq852 2009-01-12  
czx566 写道
hpq852 写道
好吧, 一个难题, 分布式事务如何实现?

Spring中没有相关的实现, 原因是因为99%的业务没有这个需求, 那么即使需要用到了就交给EJB吧, 搞那么复杂干吗?



这个可以用悲观或乐观锁实现~

我觉得如果一定要采用分布式容器


最好用EJB3



我这里指的是业务逻辑的分布, 而不是数据库的分布. 不要搞混了. 而在管理业务逻辑分布方面恐怕是EJB唯一可以拿的出手的东西了.
15 楼 czx566 2009-01-12  
hpq852 写道
好吧, 一个难题, 分布式事务如何实现?

Spring中没有相关的实现, 原因是因为99%的业务没有这个需求, 那么即使需要用到了就交给EJB吧, 搞那么复杂干吗?



这个可以用悲观或乐观锁实现~

我觉得如果一定要采用分布式容器


最好用EJB3

14 楼 eyes2near 2009-01-12  
去看看 www.terracotta.org
13 楼 hpq852 2009-01-12  
好吧, 一个难题, 分布式事务如何实现?

Spring中没有相关的实现, 原因是因为99%的业务没有这个需求, 那么即使需要用到了就交给EJB吧, 搞那么复杂干吗?

相关推荐

    基于K8S的Docker分布式容器自动化运维系统的设计与实现.pdf

    #资源达人分享计划#

    基于弹性分布式容器云架构的敏捷开发运维体系.pdf

    1. **弹性分布式容器云架构**:这是本文讨论的敏捷开发运维体系的基础技术框架。容器技术具有轻量级、高密度和快速部署的特点,云架构则保证了资源的弹性伸缩能力。通过容器云架构,能够支持大规模用户访问,满足...

    关于分布式系统的ppt

    在这个关于分布式系统的PPT中,我们可以期待涵盖以下几个重要的知识点: 1. **分布式系统定义与特性**:首先,会介绍分布式系统的概念,包括其组成元素(如服务器、客户端、网络等)以及主要特征,如透明性、并发性...

    源代码关于分布式网络空间aecs的关联问题

    源代码关于分布式网络空间aecs的关联问题源代码关于分布式网络空间aecs的关联问题源代码关于分布式网络空间aecs的关联问题源代码关于分布式网络空间aecs的关联问题源代码关于分布式网络空间aecs的关联问题源代码关于...

    关于分布式散列表DHT的前世今生的故事(上)

    关于分布式散列表DHT的前世今生的故事:包括单机hash、分布式一致性hash

    分布式计算docker容器开发实战技术大全

    分布式计算docker容器开发实战技术大全分布式计算docker容器开发实战技术大全分布式计算docker容器开发实战技术大全分布式计算docker容器开发实战技术大全分布式计算docker容器开发实战技术大全分布式计算docker容器...

    基于Docker容器的分布式爬虫的设计与实现.pdf

    基于 Docker 容器的分布式爬虫的设计与实现是指使用 Docker 容器技术和分布式爬虫技术来设计和实现一个高效、可靠的爬虫系统。该系统使用 Python 的开源框架 Scrapy-Redis 来设计和实现分布式爬虫方案,能够自动快速...

    关于分布式光伏发电示范区工作方案.pdf

    #资源达人分享计划#

    国家电网公司关于做好分布式电源并网服务工作的意见.pdf

    #资源达人分享计划#

    分布式架构

    分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构体系描述 分布式架构...

    一个goalng开发的分布式容器比赛平台.zip

    比赛项目源码

    分布式系统课件PPT

    分布式系统是一种由多台计算机通过网络互相连接,共同协作完成同一任务或多个相关任务的计算模式。这个系统中的每台计算机都可以称为一个节点,它们共享资源、协同工作,以达到提高系统性能、可扩展性和容错性的目的...

    有状态容器实践:k8s集成ceph分布式存储

    其中包括Torus、Flocker等专为容器设计的分布式存储方案。这些方案通常提供了与容器编排系统(如Kubernetes)更为紧密的集成,可以在容器生命周期管理中实现数据的自动化管理。Kubernetes本身通过PersistentVolumes...

    分布式数据库系统概述

    简要概述分布式数据库,是分布式数据库学习的好资源

    下一代的 PaaS:容器、分布式应用以及软件定义一切

    ### 下一代的PaaS:容器、分布式应用以及软件定义一切 #### 一、引言 随着信息技术的飞速发展,企业面临着前所未有的挑战与机遇。下一代PaaS(Platform as a Service,平台即服务)技术的发展成为了推动数字化转型...

    基于容器的分布式系统设计模式

    容器技术自1980年代末期和1990年代初期对象导向编程(OOP)革命性地改变了软件开发方式后,在分布式系统开发领域中也引发了类似的变革,尤其是在微服务架构的流行中,这种架构是由容器化软件组件构建的。容器特别...

    分布式数据库论文

    本压缩包包含5篇关于分布式数据库的完整课程设计,这些设计可以作为深入理解分布式数据库理论与实践的宝贵资源。 首先,分布式数据库的基本概念是理解其运作机制的基础。分布式数据库是由两个或更多个物理位置上的...

    分布式计算环境课件 分布式

    分布式 分布式计算环境 分布计算环境分布式 分布式计算环境 分布计算环境分布式 分布式计算环境 分布计算环境分布式 分布式计算环境 分布计算环境分布式 分布式计算环境 分布计算环境分布式 分布式计算环境 分布计算...

    分布式系统导论课件

    "分布式系统导论"这门课程的目标是为学习者提供关于分布式系统的基本原理、设计模式以及实际应用的入门知识。 课件中可能涵盖以下核心知识点: 1. 分布式系统定义与特性:解释分布式系统的定义,包括其并发性、...

    关于分布式光伏发电实行按照电量补贴政策等有关问题的通知.pdf

    #资源达人分享计划#

Global site tag (gtag.js) - Google Analytics