关于多层分布式系统技术层次的探讨,望大家都来看看啊!在此先行谢谢了!!!(200分)

  • 主题发起人 主题发起人 fjw
  • 开始时间 开始时间
pcplayer老兄,再次谢谢你啦,听了你的高见,真是豁然开朗,小弟在这里再次谢谢你的指教了,结贴时一定好好谢谢老兄。
有一点我需要说明,我们数据库的数据量也是非常大的,一般一个结点的数据量有一百万左右,但我们要查询的数据全都是汇总数据,这在存储过程中都已经解决得很好了,每次客户端查询时也就传递几百条左右数据,所以数据传输量不算太大。在关于COM+的POOL功能我已有所研究了,但李维先生说的数据库连接POOL我却不知如何处理,在哪做?这点还请老兄及各位大侠们多多指点老弟了。
再次衷心地谢谢你:pcplayer
谢谢duancy、geniusq的热心参与!!!
 
FJW,如果使用ADOCONNECTION,你要注意了。
ADOCONNECTION有个属性:KeepConnection,
如果使用了这个属性为TRUE,又设置了COM+的对象为POOL,我印象中我在调试的时候碰到过奇怪的现象。已经过了半年多了,忘记当时是什么现象,怎么处理的了。你如果要做,这里多试验一下。
至于上面的朋友问COM+的POOL和DBMS自己的池的区别,因为这里我们是讨论的多层,而不是客户端直接连接DBMS啊。具体的区别,我也不是很了解。呵呵。
 
pcplayer老兄,我记得李维先生好像说如何用数据库连接POOL时,KeepConnection最好设为False吧,你再想想呢?
 
pcplayer, 是不是这个多层一定好用哪?我不太清楚,我的纪录早已经上100w了,用户也已经有1600+个,但是我一样不用多层,甚至还使用的dbf,99年做的,一直修修补补到现在,由于没有利润,我从来也没有想过该什么多层的。其实,现在用的也不错呀,除了速度稍微慢点……
当然了,我这个程序对效率要求的不是太高,一般统计一次至少需要运算2100w+次,不过用新买的机器用不了3分钟就ok了,但是在99年买的联想服务器上面需要1小时40+分钟。在我的550(2000年买的笔记本)大概需要半个小时以上,连接就是用ftp呀,分散开以后,在任何一个机器上都要比大型数据库来的快,最多才不错360(客户的下属终端)*365(每天的汇总)条纪录,非常的快。
不知道多层是不是很好用吗?有什么好处?比如对于上1000w上100w的纪录处理?上1000的客户访问?或者是什么情况下必须用多层,来增加几乎是40-60倍的工作量?(我的程序是我16天一个人兼职做的,我估计多层需要我专职工作40+天)各位,我没有作过多层,有谁知到的多多指教???
 
to pcplayer:
看来你做COM+很在行啊,我有一些问题想请教,不知可否留个信箱?我的信箱是:xujh@163.net
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4403
 
>>to pcplayer
我想问你一个问题(参照李维的书).
我是用客户端调用协调COM+,再由协调COM+调用逻辑COM+.
我在
逻辑COM+上放置了TADOConnection,TADOQuery,TDataSetProvider;
协调COM+上放置了TSocketConnection,TClientDataSet;
在协调COM+上用连接TSocketConnection逻辑COM+,取得数据.
我用客户端如何连接协调COM+,并取得数据.
如果解决问题,我另开论题,答谢大家!!!
 
感谢盛利老兄啊!
大家还有什么其它的高见吗?
pcplayer老兄,你在哪啊?怎么不来参与了啊!
 
好东西,**造!
收藏中....
 
出了一趟差,好长时间没来了,原来大家都走了,也不来再行讨论一下啊?
 
不要用分布多层系统了,此种技术马上就要淘汰了,用.net吧,别听其他人讲多层怎么好,他们都是在闭着眼睛瞎说,多层系统就是好听不好用,你去市场上调查一下,有没有用多层实现的系统其性能非常好,日常维护量是非常低的,你会发现你可能找不一家。用多层实现的系统失败的例子太多了,多层可以已经被淘汰了,现在大公司基本上没有用多层开发系统的了。
据我所知,现在国内所有的超市pos系统全是二层的,就是因为数据量太大,并发量太大,多层做出来的东西是没法用的。财务系统二千年初左右推出过三层,也只晃花一现,现在全改回二层了,就是因为多层的产品速度太慢了。
搞理论的人,不怎么会编软件的人,在他们的眼里多层就是非常的好。
真正编软件的人,才知道二层才是最好的。
未来的技术肯定是.net,j2ee也不如.net好,因为java的运行效率太低了,开发与使用成本太贵了,sun公司欠了一大堆债,股票与就快进入垃圾股的行列了。
学会.net,最少还能在it界干十年。
多层的技术起源于unix,unix上的数据库连接一次要4秒,甚至40秒才能连上,在此机制上才推出来中间层,由中间层长连数据库,而在win系统+sql2000,使用ado,千分之几秒就能连上数据库,所以不需要有中间层的。
多层系统在win系统下,就是张冠李戴(unix的多层帽子往win的头上戴)
 
嘻嘻,想不到pcplayer兄还在这里混呀。
列位看官,用二层还是三层/多层或者是完全B/S的其实都行。具体得看应用来。
二层的优点:开发较简单,直接,程序逻辑容易理解,维护也容易。
三层/多层的优点:前端程序并不关心后端的数据存储模式,只专注于程序界面与程序录入逻辑,它的优点是在于架构上的。如果你已经确实地知道了(并且不会改变)数据存储方式与网络架构,那么,其实,多层的优点并不会比二层多出多少,照我看,怕只是多出了一个容易控制客户端数量与行为的优点吧。
纯B/S优点:零客户端维护。管它什么网络,一律http、统一html。
那么,来看一看缺点,
C/S 程序,在程序设计与开发阶段就要仔细考虑并确定数据库存储的方式,网络的架构,一旦决定,开发倒也没有太大的难度,如果不同的子网间要同步数据,只需要制订RDBMS的同步计划。程序开发完成后,如果数据库存储方式(比如Oracle太贵,最后终于买了InterBase)或者网络架构(比如客户端与服务端突然加了个防火墙而且突然有个变态网管将其设定成只允许走http@80端口 :(~~~~~ 等等 )突然有变化,那么,将给你带来一场恶梦。
多层方式中,显然,程序设计难度突然增加了许多,程序员突然加重了许多工作,整天为DCOM线程问题、连接方式问题、负荷问题而忧心仲仲,继而开始发现白发增多,女朋友也开始埋怨说陪她的时间太少~~~~~~~~~ 但是,离开发结束还有二周多时间的某一天,老板突然带着一副好象被霜打了的茄子般的脸孔召集开发会议说:“客户突然选用了另一种数据库产品,可离交货期只有二周了~~~~~” 只见你轻轻地从嘴边泛起一个自信的微笑,很平静地说道:“没问题。” 此时的你,一定会觉得前面的路走对了。
事实上,从程序编写者的角度来看,要写好一个多层的程序,其难度大约要比一个C/S程序高出三个数量级。因为,要从根本上转变思路,以多线程,最小数据量等网络编程方式处理与解决问题,也不要盲目地使用书本上的示例,必须专注于为每一个应用程序服务器提高性能,不要使用Select * from Table这样的语句,要多多利用RDBMS本身的优点,永远记住最小数据量与最短加锁时间。在客户端程序中,也尽量不要去考虑数据存储的方式,尽量减少网络数据传输量,共用的逻辑功能在应用程序服务器完成。程序完成后至少做三次代码的ReView。
纯 B/S 方式显然是最灵活的,但是,就算是有基于IE的强大的DHTML的支持,在客户端的表现力上,仍然是没法做到良好的使用性,特别是海量数据录入与打印。
那么,对于fjw来说,最好的方式是什么呢?其实,在我看来,也没有什么最好的方式,只有最适合的方式。
1  如果使用C/S方式,刚每个子网内部使用C/S方式 ,子网间直接用 RDBMS的数据同步机制。
2 如果用Client/AppServer/Server方式,当然是DataSnap,至于连接方式,用DCOM或者Socket都行,如果要我说,干脆使用 RemObjects SDK ,它是一个使用HTTP的DataSnap技术,其应用程序服务事实上就是一个HTTP Server。
3 如果用B/S,建议将数据录入部分与打印部分单独做成应用程序。通讯方式仍然使用HTTP。 可以使用XMLHTTP。
事实上,还是要看你的开发人员对技术架构的熟悉程序。先做十拿九稳的事儿。有空了再Upgrade。
 
呵呵,真的没有想到,连茶壶老兄也来帮忙了,真的是非常谢谢啊!
听了茶壶老兄的高见后,真的是忽有醒悟,谢谢老兄的指教!
茶壶老兄,我不知你说的“RemObjects SDK ”是什么?还请老兄多多指点,根据我们系统的业务特点与数据流程,我只能采用你说的Client/AppServer/Server方式,本来想采用DCOM技术连接的,但在测试使用中,发现配置DCOM确实是一个令人头痛的问题,所以,我现在最头疼的问题就是连接中间级的问题,听说Socket连接也不错,况且Borland也提供了SocketServer的源码,不知老兄对这有什么高见?
 
茶壶也来了,呵呵,看来有水喝了。
〉〉3 如果用B/S,建议将数据录入部分与打印部分单独做成应用程序。通讯方式仍然使用HTTP。 可以使用XMLHTTP。
呵呵,其实还有一点补充,b/s中,也有本地数据库的概念,不知道你还有没有印象。本地
数据库是系统自动生成的,可以由vbscript(或者javascript)进行维护(包括上传更新、下
载等等),然后可以分页浏览(其实,分页比煮方便面都简单),最适合的就是用户多(可
能并发1000+个),数据量不是很大(拨号方式不超过100k,并且二进制的文件想图片什么的
比较少,我比较过,这样比浏览图片多的网页快的多了,新郎的主页在600+k),当连接上去以后一样可以更新改动的部分。比如现在的大富翁,其实如果用那种方式的话可能比现在的xml在某些方面还要快不少……
 
to:茶壶
你讲的数据同步技术RDBMS,只能处理量不大的应用,即使在局域网里如果数据量成千万、上亿行,这种技术同步一次得好几天。
大数据量的同步技术还是要用数据库提供的同步技术才成,自己开发的数据库同步软件没一个处理的了成千万、上亿行数据的。sql2000的同步技术可以做到20多分钟一亿行!
还有一点,你讲的开发一半用户要换数据库,你能很容易的做更换,这也说明你用的sql语句都是通用的sql语句,或者全使用的是delphi数据库的感知控件做的产品,这样的产品做出来性能也是非常低的,客户的数据量一大,不是客户骂人,就是开发人员哭!
我认为真正开发应该是使用三层的思想,开发基于二层的应用,在二层中把应用逻辑单列出来。
软件人员就如武林人士一样,真正的高手没人用华而不实的武功!
 
欢迎大家继续讨论!谢谢各位大侠的支持!
 
茶壶兄,我到大富翁混没几天。什么时候有空一起喝茶。呵呵。
 
to mrzj:
不好意思,偶主要是着眼于小规模应用,因为,事实上,大规模的就用根本就没有讨论的必要,不是Corba就是EJB。
事实上,未必一定用通用的SQL,也未必全用数据感知控件,我那样说的意思只是说到时候只需要重新开发中间层,所有的接口不变而已,至于中间层,用什么样的SQL,那是中间层开发的细节问题,可能是每种中间层都用的与数据库相关的特定的 SQL和 StoreProc,但是,其实,所谓的RDBMS,还是有通用性的,也就是关系型的数据。在客户端,仍然有巨大的相似性。
所谓以三层的思想开发二层的程序,这一点我倒是十分赞同的,因为很久以前就这样做了,比如,较为典型的作法是把大量的业务逻辑放到存储过程中去。但这仍然只是属于程序效率与业务逻辑的集中性问题。三层的技术解决的问题并不仅仅是这样,还有一个分布式的问题。对于POS系统,我看也就不必要三层了,对于一个OA系统,我看也直接上Web程序就行了,对于那种不大不小的企业,在各地有分厂,但规模都并不大(这种企业其实挺多的),数据量并不大,只是架构要求很灵活,那么,这种应用上三层我看是最理想的。
  当然,诚如你所说,事实上,真实的开发中,要改变RDBMS的情况很少见,而且,仅靠RDBMS的同步机制显然是不能处理大数据量的问题的。真是遇到这种情况,就到了要用EJB,CORBA这样的技术的时候了。
但是比较两种技术不应该完全以维护的角度看问题,一个写得很好的两层程序当然要比一个写得极差的三层程序容易使用,容易维护。一个写得很好的三层要比一个写得不好的两层容易维护。
最重要的还是思路。
 三层带来的好处是第一上架构上的,其次才是逻辑上的,第三才是效率与功能上的。后两项事实上用二层的程序可以做得很好。
 
to fjw:
去搜索一下,RemoteObject SDK还是不错的东东。偶这里有源码的。你去找找,也应该找得到。找不到给俺来个信:teapot@163.com,如果你的应用不用公开卖,我看用一下也没什么大不了的。
 
呵呵,茶壶大侠,我给你寄信了,你怎么没回啊,请你给我寄一份RemoteObject SDK好吗?
我的信箱:fjwzd@163.com。如果资料太大的话,请寄:fengjiwei@glg.com.cn,在此先行谢谢了!
各位大侠,你们还有什么高见指点小弟的,马上就要结帖了啊!
 
后退
顶部