`
wendong007
  • 浏览: 3041 次
  • 性别: 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,就会出现死循环的情况。还有容器必须把结果返回给正确的调用者,还有多线程等问题……
      突然想到《非诚勿扰》里的一句台词:老说改进服务质量,怎么改进啊?其实就是细节。

 

分享到:
评论
12 楼 pipilu 2009-01-11  
这个东东主要用于什么场景?
11 楼 javatracker 2009-01-11  
恩,这个是有点烦,不过比起自己写协议那简单的不是一点,目前雏形已经出来,完善了功能先把这个RMI发出来
10 楼 wendong007 2009-01-11  
<div class='quote_title'>javatracker 写道</div>
<div class='quote_div'>
<div class='quote_title'>引用</div>
<div class='quote_div'>RMI用起来太麻烦也是我不选择RMI的一个原因,我不希望用户接触到RMI,做任何与RMI有关的工作,而且反正马上就放寒假了,我的时间多得是,时间的问题不太需要考虑<br/></div>
<br/><br/>呵呵,对RMI封装下就不麻烦了,用户也感觉不到RMI的存在,就纯粹的接口调用,像register(),unRegister(),lookup()就行了</div>
<p> </p>
<p>我就是觉得封装有点麻烦,因为容器里的Bean都是POJO,我就算用RMI也只是来通信,想用他的代理替代远程Bean的代理,我还没想出怎么做比较好</p>
9 楼 javatracker 2009-01-11  
引用
RMI用起来太麻烦也是我不选择RMI的一个原因,我不希望用户接触到RMI,做任何与RMI有关的工作,而且反正马上就放寒假了,我的时间多得是,时间的问题不太需要考虑


呵呵,对RMI封装下就不麻烦了,用户也感觉不到RMI的存在,就纯粹的接口调用,像register(),unRegister(),lookup()就行了
8 楼 wendong007 2009-01-11  
<div class='quote_title'>javatracker 写道</div>
<div class='quote_div'>呵呵 我现在在自己做一个AppServer集成,分布式集群方面也有这方面的烦恼,和你不同的是我做的没你那么底层一点,IOC容器集成PiocContainer,远程调用协议目前不准备自己写(时间要都化这里了别的很多都干不成了),JGroups配合RMI来做,当然要对RMI做一下封装,RMIC命令太烦。你通信协议写出来后发出来做各参考。</div>
<p> </p>
<p><span style='font-size: large;'>RMI用起来太麻烦也是我不选择RMI的一个原因,我不希望用户接触到RMI,做任何与RMI有关的工作,而且反正马上就放寒假了,我的时间多得是,时间的问题不太需要考虑</span></p>
7 楼 javatracker 2009-01-10  
呵呵 我现在在自己做一个AppServer集成,分布式集群方面也有这方面的烦恼,和你不同的是我做的没你那么底层一点,IOC容器集成PiocContainer,远程调用协议目前不准备自己写(时间要都化这里了别的很多都干不成了),JGroups配合RMI来做,当然要对RMI做一下封装,RMIC命令太烦。你通信协议写出来后发出来做各参考。
6 楼 wendong007 2009-01-10  
<div class='quote_title'>hocus 写道</div>
<div class='quote_div'>呵呵,先搞些基本需求<br/>再深入<br/></div>
<p> </p>
<p><span style='font-size: medium;'>我也是这么想的,呵呵</span></p>
5 楼 wendong007 2009-01-10  
<div class='quote_title'>javatracker 写道</div>
<div class='quote_div'>
<div class='quote_title'>引用</div>
<div class='quote_div'>我设想的分布式是通过容器间的引用来配置的,比如,容器A引用容器B,那么A可以透明的调用B中的Bean,从简化配置和设计的角度来考虑,如果A引用了B,B又引用了C,应该让A也能够调用C才对,也就是说应该具有传递性,但是很可能存在的情况是容器间存在循环引用,这时如果用户请求了一个不存在的Bean,就会出现死循环的情况。</div>
<br/><br/>从这里看你前面的说的动态代理不一定必须是JDK的动态代理也可以是是RMI的stub代理(当然这个要做个处理,不可能有那么多的stub),或者JNDI生成的代理。<br/>至于循环调用的问题,你没必要一定设成链式引用,你可以在每个容器中维护一个所有容器的列表,业务程序请求bean时先查询本地容器,没有在去找列表中的容器(可以在本地缓存各个容器内bean的名称)。但这样也有个问题,就是一个容器中的Bean内变量不能引用另一个容器内的Bean。除非这种引用一开始并不注入,而是请求到之后在去请求这个属性bean,生成代理然后注入。缺点时每次请求都要注入。<br/></div>
<p> </p>
<p><span style='font-size: large;'>我也考虑过用RMI,这样的好处是不用我自己设计通信协议,而且解决传递参数是区分本地对象和远程对象的问题,有些细节也可以帮我处理,但是我希望把框架设计成非侵入式,而且还考虑到一些其他的因素,我还是放弃了RMI的方案,那个链式引用的问题其实也不是什么问题,只是提供怎样的方案来配置更方便而已,我一直坚持的一个原则就是习惯大于配置,怎么简单怎么是,哪怕牺牲点灵活性,所以我希望配置起来能够非常简单,所以才会出现这个问题,至于效率,我还没怎么考虑,我打算先做出来再说,以后可以慢慢优化</span></p>
<p> </p>
<p><span style='font-size: large;'>非常感谢你的回帖,我发了这么多天终于有人回了,呵呵</span></p>
4 楼 dennis_zane 2009-01-10  
关于分布式的垃圾收集一般是采用租约模式(Leasing),本地代理和远程对象达成一个租约,远程对象持有这个租约,在租约过期或者本地代理回收前(回调接口)主动通知远程对象后,远程对象也被回收。当然,租约也是可更新的,租约本身的清除也是有期限的。

容期间的循环引用,也许可以采用计数解决,在查找bean的过程中对每个到达的容器计数,避免重复访问超过一定次数。
3 楼 hocus 2009-01-10  
呵呵,先搞些基本需求
再深入
2 楼 javatracker 2009-01-10  
不错,支持一把,可能没引起牛人的注意呢。

引用
比如远程容器中Bean的生存周期(非单例状态的情况下),本地容器中的动态代理对象成为垃圾之后如果保证远程容器中的Bean被回收


动态代理实现一个生命周期接口,当其被摧毁前调用生命周期方法dispose,此方法通知远程容器回收远程bean。这个代理最好在容器内做个缓存,这样业务代码就不能通过使他为null将其摧毁,只能通过unRegister来摧毁它,这样容器就可以拦截到调用生命周期方法了。

引用
我设想的分布式是通过容器间的引用来配置的,比如,容器A引用容器B,那么A可以透明的调用B中的Bean,从简化配置和设计的角度来考虑,如果A引用了B,B又引用了C,应该让A也能够调用C才对,也就是说应该具有传递性,但是很可能存在的情况是容器间存在循环引用,这时如果用户请求了一个不存在的Bean,就会出现死循环的情况。


从这里看你前面的说的动态代理不一定必须是JDK的动态代理也可以是是RMI的stub代理(当然这个要做个处理,不可能有那么多的stub),或者JNDI生成的代理。
至于循环调用的问题,你没必要一定设成链式引用,你可以在每个容器中维护一个所有容器的列表,业务程序请求bean时先查询本地容器,没有在去找列表中的容器(可以在本地缓存各个容器内bean的名称)。但这样也有个问题,就是一个容器中的Bean内变量不能引用另一个容器内的Bean。除非这种引用一开始并不注入,而是请求到之后在去请求这个属性bean,生成代理然后注入。缺点时每次请求都要注入。

至于多线程没想太多,但总能解决,无非时复杂度和效率的问题
1 楼 wendong007 2009-01-09  
为什么一个回帖的也没呢,就这么沉了吧

相关推荐

    基于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