当今的应用系统,不管是c/s模式还是b/s模式。以及多层的分布式系统都是采用内容面向中心的。也就是说应用所要处理的数据都是在数据服务器上的,整个系统都是采用层状结构每一个终端用户都是孤立的,应用采用这种模式的优点和缺点分析:
   优点:数据的来源集中存放在一个数据服务器上,也就是说数据源只有一个,在数据同步方面容易控制。2,数据安全性容易得到保证。3,终端用户的请求处理算法简单。(就是典型的请求/应答模式)。
  缺点:服务器和主机的压力过大(它既要负责业务处理又要负责数据处理)。导致在大型的应用中,服务器的配置要求太高,提高了部署的成本。2,对终端用户资源的利用率不高,在瘦客户机模式下,客户机的资源利用率就更加低下。
   在客户终端配置不断提升(一般现在的客户终端处理都具有3-4应用请求能力)和p2p技术迅速发展的今天。我们能不能采用新系统架构模式,
系统结构分析:
   数据服务器:只是一个存储设备,不参加业务逻辑处理。这样做的原因是减低了系统对服务器的压力,也就服务器的配置要求降低了很多。降低了系统部署成本。
  控制服务器:作为客户终端协同工作的控制器,就像马车有5-6匹马在跑的时候,马夫的作用。
 在这个模型中,我们利用p2p技术,使每个终端客户都建立连接。使每个客户终端相对于整个系统来说都不再孤立。这样传统的客户中断将扮演双重角色,它既是是服务器(应答请求)又是客户端(也可以发出请求)。这样做的目的是:把原来服务器的任务,分配给多个客户,充分利用终端客户机的资源。提高整个系统的资源利用率。
   这种模式的需要解决的几个问题:1。如何保证数据的同步2。数据安全性问题(因为在这个模式中每个客户断都有数据服务器一部分数据的备份)。3,终端客户连接算法的问题。

解决方案 »

  1.   


    >>这样传统的客户中断将扮演双重角色,它既是是服务器(应答请求)又是客户端(也可以发出请求)。这样做的目的是:把原来服务器的任务,分配给多个客户,充分利用终端客户机的资源。提高整个系统的资源利用率。你的意思是由控制服务器来在各个客户端之间协调(分配)原来应用服务器的工作是吗?先不说安全问题先,既然要分配,那么请求客户端就必须等待,然后控制服务器轮询(或者其他方法)客户端,找到空闲的客户端来执行这个原来应用服务器的工作,,,如果任务不是可以分割的,那么最终只能找到一个客户端来执行,如果是这样,是否有点骑牛找牛,海底掘渠?请求的客户端本身执行这个任务不就行了?如果任务是可以分割的并且任务的计算复杂度足以抵消分配任务和执行端同步的开销,这个方案才有价值,但是任务分割,首先要求任务有分割的可能性和必要性,要么负责分配任务的控制器分割这些任务,要么客户端的请求描述本身支持任务分割(显然客户端的就很复杂了),那到底我们通常应用服务器处理的是什么任务?像这样一个任务:select * from t1;这就没什么好分割的,update from t1 set ..也没什么好分割的,如果是一组sql语句或者其他计算任务,限于上下文的关联性,也不能分割(不是不能分割,是没有可行性),,,
      

  2.   

    实际上就是分布式运算。已经有成熟算法和实例。广义的可以参考j2ee甚至CORBA、ACE之类的东东。
      

  3.   

    象bt这样的东西,他们的具体算法和协议是怎样的我不清楚,但是他们之所以可以这样工作,是因为数据来源是read only的,不变的,但是如果把这种工作方式引申到数据库应用里面来就行不通了。因为数据库的数据不是不变的,如果数据是不变的,我们也不必这么麻烦,还要数据库干吗?每个个客户端copy一份数据不就完事了?数据是不断变化的,如果你在多个节点维护数据的副本,那么更新的时候,你就必须获得类似于全局锁的东西,以便保持数据视图在整个运行域里面是一致的,管理锁就很麻烦了,性能就更不必说了,还有很多实际的东西,比如数据在哪里这样的问题,因此你还必须维护数据分区这样的一份目录,比如事务问题,rollback怎么办?还有安全性怎么保证和实现?弄来弄去,最后就是一个分布式数据库系统了,这本身就是一个大project,无论从技术上来说还是开发成本来说,都不是一般的开发企业力所能及的。做应用还是专注做应用,做基础服务还是做基础服务,两者要分开来,这种客户端同时担任两种角色的思路可能只会将问题复杂化现在专门软件的造价总是比批量生产的硬件的造价高得多,数据库服务器硬件配置高一点就行了,现在多层系统也能够很好的满足高并发的需求,需求真的达到那样的程度,也可以采用目前已经研发出来的分布式数据库系统
      

  4.   

    www.groove.net
    去看看吧,我认为最好的办公软件
    应该就是这种思想