三层构架问题
有做过三层构架的朋友们吗?请讲讲三层构架是怎么一回事?为什么要采用三层构架,有什么好处?采用三层构架主要是运用了哪些技术,其关键部分是什么?有哪些是特别要注意的问题?
欢迎这方面的前辈指点,也欢迎新手一同学习。
问题点数:100、回复次数:29Top
1 楼TigerHu(愁煞人)回复于 2001-12-11 10:12:47 得分 2
我来听课....Top
2 楼cdone(cd)回复于 2001-12-11 10:35:47 得分 2
学习Top
3 楼zzh()回复于 2001-12-11 10:35:49 得分 5
最主要的技术有中间件技术(包括COBRA,JaveBeans,COM+/DCOM/COM这三种)Top
4 楼tpProgramer(tp编程者)回复于 2001-12-11 10:59:06 得分 5
三层的好处很多:
比如具有灵活性,可以随意调整组件的位置和服务器的位置,可以增加和修改各个组件,更主要的是具有了商业逻辑的灵活性,因为中间层的商业逻辑层负责商业逻辑
比如说容易更新,不用重新编译整个工程就可以更新功能,替换一个组件不会扩大影响到整个工程
比如说容易维护,各层意义明确,不会出现商业逻辑和各种访问控制混合在一起的情况,而且分层的好处是,各层可以使用不同的配置,各个服务器的维护也变得简单
比如说有天生的网络化,只要配置好一个外部环境,各个组件运行时不会注意到自己访问的是网络资源还是本地资源,这种分布式的好处对于一个企业来说是急需的。
Top
5 楼zhuang094(hz-huang)回复于 2001-12-11 11:02:03 得分 0
对三层构架我不熟悉,请问三层构架是指在同一个应用程序中分成了三个主要的部分:数据处理(对数据库的操作)、逻辑事物处理、用户接口,还是被分成了多个应用程序?Top
6 楼halfdream(哈欠)回复于 2001-12-11 11:30:38 得分 70
三层构架可以从逻辑上分的,在物理上也可以分开的.
拿DCOM为例,一般中间层可以是一个或多个DCOM组件,
可以是单个或多个DLL或OCX或EXE文件,它封装了相对稳定的企业逻辑和对数据库的访问.
因为它们之间调用是二进制标准的..
所以你可以用VC,DELPHI,BCB开发中间层,同时可以用VB,DELPHI甚至ASP开发相对易变的界面.
Top
7 楼zhuang094(hz-huang)回复于 2001-12-11 15:04:57 得分 0
对于CORBA,当用户连接上来,完成本次请求操作后是不是就被释放掉了,等到下次需要的时候再连接上来?Top
8 楼Hover_cn(翔)(:public IUnknown)回复于 2001-12-11 15:17:40 得分 2
听课,占个位置Top
9 楼zhuang094(hz-huang)回复于 2001-12-11 17:20:39 得分 0
知道的和不知道的都可以来嘛,知道的人教教我们这些不知道的人,不知道的人来这里听听,顺便up一下。Top
10 楼Flwu()回复于 2001-12-11 18:45:51 得分 2
来学习Top
11 楼XDZXG()回复于 2001-12-11 19:37:42 得分 2
楼顶,楼中和地下室,地下室是保密的(数据库:想象你家村了几袋大米会让别人知道吗)
你们家做饭总不能在楼顶做吧,至于楼上,你可以在楼顶上吃饭呀Top
12 楼halfdream(哈欠)回复于 2001-12-11 23:24:14 得分 0
对于CORBA我了解不多,不过,一般来说,很多处理都是异曲同功的,都会考虑到效率因素。
客户端连接上中间件后,中间件会增加对象的引用计数,一般都会相应的产生服务线程,
创建服务对象,一直到这个连接终止,再减少引用计数,释放相应资源。
Top
13 楼0aaron(向往)回复于 2001-12-12 00:07:59 得分 2
找本讲windows DNA 的书看看就清楚为什么和怎样做了.
或找本com+的看,不过最好找的是用vc++语言讲的,不要找vb语言讲的.Top
14 楼zhuang094(hz-huang)回复于 2001-12-12 10:17:10 得分 0
如果我用一个多线程的应用程序来完成类似功能:一个线程负责处理用户接口(包括接收请求和返回请求结果,相当于用户层),一个线程负责逻辑事务处理(分析并处理用户来的请求,如果要对数据库操作,则通过队列发给数据库线程,同时也将数据库线程返回的结果送给用户接口线程,相当于逻辑事务层),一个线程负责对数据库的操作(相当于数据层)。另外还有一个主线程,用来完成其他的一些相关操作。
那么,对于较少的用户量,这些线程应该是能够胜任的。但是,当用户量达到几百、上千甚至更多时,那么很多问题就会随之而来。
首先,对于用户接口部分,我用一个(或多个)服务器套接字线程来接收客户连接,那么这些连接难道是一直保留吗(直到断开)?还是每接收一个连接请求,等到本次事务请求完成以后就将其断开,让它在需要的时候再连接上来。对于这,我不知道那些大的网站是怎么处理的(同时有成千上万个用户在线上操作)。
对于逻辑事务处理部分就不用多说了。对于数据接口部分,由于事务量的增大,有时很多(对一个请求)操作的数据量很大,耗时太长,很可能需要开多个数据库线程,这样在管理上又要多加小心。
我现在做的是一大型呼叫中心,最大支持1000个座席,这样需要对数据库进行操作的客户端就可能有1K(1024)个,而且大多数是需要对库操作较为频繁、数据量大。如果都直接连接数据库肯定是不现实的(那样数据库很可能就瘫了),因此需要一级缓冲对数据库加以保护,这也就是我这个应用程序的目的。
本来是打算买别人的中间件产品,后来公司考虑到节约成本便要我们自己做(我可是一点经验都没有 呜呜~~~~)。我想我这个应用程序实现的思想和三层构架、中间件是大致一致的,因此想多了解一些这方面的东西,借鉴这方面的解决方案,同时也希望想了解这方面的朋友多一个学习的机会,共同进步。
请广大此间的高手、前辈们多多指点!Top
15 楼hbs_biscuit(hbs)回复于 2001-12-12 10:26:47 得分 2
关注
Top
16 楼zhuang094(hz-huang)回复于 2001-12-12 14:36:45 得分 0
对于CORBA和COM两种技术,它们的侧重点分别是什么?即什么情况下应该采用CORBA技术,而什么情况下又应该采用COM技术CORBA是不是也和COM一样做成一个个的组件?Top
17 楼zhuang094(hz-huang)回复于 2001-12-12 14:37:02 得分 0
对于CORBA和COM两种技术,它们的侧重点分别是什么?即什么情况下应该采用CORBA技术,而什么情况下又应该采用COM技术.CORBA是不是也和COM一样做成一个个的组件?Top
18 楼ynyn(风林火山)回复于 2001-12-12 14:47:27 得分 2
gz,push,hehe,大家加油讨论呀,偶来听课Top
19 楼halfdream(哈欠)回复于 2001-12-12 17:10:02 得分 0
zhuang094(hz-huang), 呵..1000个连接...嘿嘿....
一开始就自己开发?做好头疼的准备吧:)
CORBA或DCOM只是两种不同的分布式标准而已,它们区别并不重要.
当然,CORBA多少是比MS弄出的DCOM要稳定些,另外,在UNIX下了支持CORBA.
它们也定义了自己通讯协议.对于访问量较大的WEB,有时是采用的,多台应用器加
一台负载均衡服务器,瘦客户运行在WEB服务器上。
可能这并不是你所需要的。
象你这种情况当然就不能保持连接的.
在设计你这应用服务器和客户端需要好好规划一下.
你先说的
>一个线程负责处理用户接口
>一个线程负责逻辑事务处理
>一个线程负责对数据库的操作。另外还有一个主线程
这种线程设计能支持的用户太少了.
至少也要象这样:
1,多个线程对数据库操作,因为很多数据库操作都花时较长,如果只用一线程这些操作只会串
行处理.
2,只是逻辑事务处理时间也许花得并不多,但逻辑事务往往离不开数据库操作,是单独用线程,
还是同数据库线程一起,由你安排.
3,这么多客户端连接,一个线程处理得过来否?如果可以,随你.
4,服务的线程可以固定数量,由一个线程池管理,队列一有请求到,就有一空闲线程为之服务.
5,应用服务对象最好采用无状态对象.
Top
20 楼EMeiMonkey(峨眉猴子)回复于 2001-12-12 17:56:23 得分 2
听课来啦!COM我还知道一点。Top
21 楼zhuang094(hz-huang)回复于 2001-12-12 19:29:31 得分 0
to: halfdream(哈欠)
非常感谢能得到您的指点,对:
>一个线程负责处理用户接口
>一个线程负责逻辑事务处理
>一个线程负责对数据库的操作。
其实用一个是不够的,在用户接口部分我就开了三个(可能还不够)用户界面线程,每个用户界面线程都有自己的窗口用来进行消息处理(这样不会过多占用主线程);对逻辑事务处理部分我可以用一个线程(不够可以多开几个,实事上在我以前完成的ACD(Automation Call Distribution)程序中就支持呼叫队列和座席的分组,原理是一样的);对数据处理层我是打算开三个线程,不够也可以再加。
俗话说“量变引起质变”,以前我接触过的最多也就一两百(不超过300)个客户端,一下子扩充到上千个,肯定会引起意想不到的错误。我对这样的大型项目还没有经验,急需前辈们指点。对于每一层开多少个线程才合适,我心里也没底,线程开少了处理不过来,开多了管理上又不便。现在的设计思想基本上就象上面我所讲到的,各层之间彼此独立,数据传递主要是通过队列来完成,不过这样可能太耗内存。
我对开发大型项目经验欠缺,期望广大先辈批评指导。同时也欢迎csdn上的朋友和我一同学习,共同进步!Top
22 楼zhuang094(hz-huang)回复于 2001-12-12 19:35:56 得分 0
首先确定用户接口部分是否需要断开连接(这样的话对客户端来说,一次连接它不能提交多次事务处理请求,对客户端限制较大),如果不断开,也就是一直保持连接,那么对于服务器端来说,同时管理这1K个连接是否可行,需要注意些什么?Top
23 楼zhubo(rickyzhu.com)回复于 2001-12-12 19:38:53 得分 2
我对你的这个项目很感兴趣,怎么样同你联系阿,zhuang094大哥,你有MSN账号吗,我可以多向你请教请教?(我在公司,用QQ不方便!)Top
24 楼zhuang094(hz-huang)回复于 2001-12-13 08:54:12 得分 0
to : zhubo(zhunaldo)
E_mail:hz-huang@263.netTop
25 楼zhuang094(hz-huang)回复于 2001-12-13 11:14:01 得分 0
WuWu~~~ csdn上难道就没有做过这方面的高手吗?
up up up !!!Top
26 楼zhuang094(hz-huang)回复于 2001-12-13 15:27:46 得分 0
另外,我想问问我这个程序应该在Windows98下还是在Windows2000下开发,它们各最大支持多少个客户端连接?Top
27 楼halfdream(哈欠)回复于 2001-12-13 18:21:17 得分 0
TO:zhuang094(hz-huang),
最好在WIN2000下开发吧,有很多工具辅助的,首先任务管理器可以帮助你分析你程序的效率,
每个用户连接所占用的内存。
Top
28 楼zhuang094(hz-huang)回复于 2001-12-13 18:26:46 得分 0
那么对最大连接数的限制情况又是怎样的呢?Top
29 楼zhuang094(hz-huang)回复于 2001-12-14 08:56:32 得分 0
看来csdn上没人了,算了,还是自己搞定吧。Top




