大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(六)Remoting扩展支持
2009-09-20 15:51 通用C#系统架构 阅读(2355) 评论(11) 编辑 收藏 举报 深夜了小区里只有几家的灯是亮着,我继续静悄悄的写这个系列吧,由于本人水平有限,可
能会有误导大家之处请谅解、有错误、漏洞之处请大家指出,我尽快修正,此文适合初学者水
平阅读。
近期由于手上的大型软件项目临近验收、工作压力大、非常忙碌,没精力写这个系列文章了,
今天是周末休息由于中午睡了一觉,晚上想程序想来想去又兴奋过头失眠了,洗了几个葡萄,
边吃葡萄边写写这篇介绍文章,把自己曾经折腾的经验写出来分享给那些有需要人,争取让那
些需要的人少走点儿弯路、节省一些宝贵的生命,做更需要做的事情。
紧跟新技术屁股后面跑,的确是蛮累、蛮辛苦的事情,同时也很容易当炮灰,几年前把Remoting
技术掌握了,心里踏实了一些,没过多久又出来WCF了,这2年也关注了一些,打算再过写日子用。
做项目都喜欢用最成熟的技术走在别人后面安全一些风险低一些,向别人学习,省事儿。
我这个人很俗,我不是为了学技术、我只是为了赚钱,客户要的是实实在在的,不是要技术。
例如客户常常最关心的是:
界面是否大气?操作是方便否友善?功能是否符合业流程务要求?运行是否稳定?运行性能是否高?
只要不跟这些有直接关系的技术,一般懒得学了,因为那些技术是不影响赚钱的,重点抓整体,
局部慢慢优化就可以了,赚钱最要紧,有了钱在学习心里踏实一些、实惠一些。
不聪明的人那就得靠用功来解决问题,好像在2004年就第一次接触了Remoting,也看了很多老外
的书,但是还是没彻底搞明白到底这个东西如何用,好在之前对Java的RMI技术有些了解,只知道这
个大概是怎么回事情,但在实际工作中没用过。对只写B\S系统的人来讲Remoting的用处不是很明显,
因为程序本来就是在服务器上运行的。
由于前几年工作上的需要,同时开发2个大型C\S架构的项目,客户不大可能因为某个软件项目的
实施,把员工的电脑都更新了,例如这个软件需要有10个8个用户经常用,很有可能这几个电脑都很
破旧,不可能每次都给员工随着时代的进步更新固定资产,也不像我们软件开发人员一样勤换笔记本,
笔记本显示器进过一次水,经常会花屏又需要换电脑了自己掏腰包就可以了,但是单位里的事情不是
你想换就换了,公司是否有相应的预算?政策?领导是否审核通过了?你换了电脑其他几十几百个员
工有意见怎处理?
其次那么多客户端,每个装几百兆的Oralce客户端,再运行环境再装管理软件真要崩溃,并且
客户端都自己去连接数据库,那得需要有多少Licence才可以呀?定制开发大型软件项目的客户
一般都是由实力的,用正版软件的比较多,你要是买正版的Oracle、需要有几个十个Licence,
那不真不知道要烧少钱才可以了?估计比开发定制软件的费用还要昂贵好几陪了,客户是否能买得起?
是否舍得买还是另外一回事情了。在那么破的电脑上能顺利安装.NET运行环境,已经是很不容易了,
再跑这么庞大的Oracle客户端 + 管理系统 + 数据运算等等,传统的胖客户端是绝对吃不消的。
刚开始我们是选择用WebService,运行速度是死慢死慢的,老牛拉车,我们自己的电脑上跑
都觉得有些忍无可忍更何况发布到客户的电脑上,那绝对是会闹出国际玩笑的,本来.NET WinForm
运行性能就不怎么地,只能想办法改进了,硬着头皮试试Remoting的性能了。
有一次也是兴奋过度,折腾了一个通宵,查找了相关资料,在自己的电脑上进行测试,感觉运行
速度的确奇快,不知道在网络环境下运行速度如何,又在公司的服务器上发布服务器端程序,在自
己的电脑上进行远程呼叫测试,折腾了一晚上,做了相应的性能测试,结果让我很是开心,我一晚
上兴奋过度没入睡,早上接着跟大伙儿一起上班了,也没请假调休。
但是的测试结果一直没丢弃,下面表格数据就是测试结果:(编写了一个相对耗时的程序进行测试)
|
本地调用运行1次 |
远程调用1次 |
本地调用运行50次 |
远程调用50次 |
第1次运行 |
0.360 seconds |
0.390 seconds |
15.262 seconds |
14.721 seconds |
第2次运行 |
0.344 seconds |
0.351 seconds |
14.391 seconds |
14.000 seconds |
第3次运行 |
0.375 seconds |
0.361 seconds |
14.234 seconds |
14.050 seconds |
平均 |
0.360 seconds |
0.367 seconds |
14.629 seconds |
14.257 seconds |
运行结果:Remoting 调用模式下的运行速度几乎与本地运行Local模式几乎没有多大差别,
同时在多台客户端上做并发测试,结果都正常,就这么起步万事大吉了。
这样我们对开发架构尽心了调整、只在客户端运行显示界面、页面逻辑验证等后台程序都
在服务器上运行,尽量减轻客户端的压力原则开发系统了。
希望你是读过我的前一篇文章:白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
若你的程序不是按SOA的思想写,很难把系统扩展成Remoting、WCF,本着一切都是调用服
务的思想去设计的程序,才有比较好的可扩展性,否则就僵死在哪里,成了乱糟糟的程序,
电子垃圾一大堆了。
白话讲山寨版 Remoting:如下图解:
1:服务器端程序:跟页面是无关的,可以打开数据库,能访问数据库。
2:客户端:处理页面表示逻辑,调用服务器端的服务,是无法直接打开关闭数据库的。
本来是程序都写在一起,现在是分开了写,哪些应该是在服务器上运行,哪些应该是在客户端运行。
就像B\S系统里的,C#代码与JavaScript代码一样,一个是在服务器上运行,一个是在客户端运新。
接下来我们讲吉日嘎拉的疯狂架构之RemotingServer,请看贴图:
要架设一个 RemotingServer,首先需要有个配置文件,这里叫Config.xml 结构说明如下:
配置文件折腾好后,只需要一行代码就可以把 RemotingServer 折腾好了,其实是非常简单的,
代码如下:
为了检查程序是否运行正常,获取了服务器当前时间,为了检查是否正确连接上了数据库服务器
还获得了数据库服务器的当前时间。
配置文件写对了,数据库联接串也设置对了,运行程序的效果会如下:
若能有上面的效果能运行出来,基本上可以表明服务器端应该是完事OK了。
那为什么要这么黑乎乎的控制台应用干什么呢?他有一个调试作用,抓个屏幕看看。
我的调试部分的代码就不会变成灰色了,看图如下:
我运行客户端后的调试效果如下:谁什么时候调用了什么方法?花费了多长时间?甚至
运行了什么SQL语句都可以调试出来?这对项目开发中的简单性能测试来说实在是太强了。
接着我们讲客户端的配置:首先需要一个配置文件,如下图:
配置文件配置好了,在程序里写一行代码:
RemotingConfiguration.Configure("Remoting.xml");
就OK了。
说得最俗一些稍微夸张一些,我的程序只需要在客户端、服务端各配个配置文件,各增加一行代码,
就符合Remoting架构了,好的程序好的架构,优点就体现在这里,不用升级一次就死一回,我坚信
WCF的改进也会很顺利,有空时,我会把WCF的简易运行模式也详细的写篇入门的文章给大家看看。
写程玩的不是技术是思想,做项目玩的不是架构是业务,经营公司玩的不技术玩的是人。
若心情好、时间充裕,下一篇写 WindowsService 的部署,如何把RemotingServer按WindowsService部署。
哥写的不是寂寞更不仅是代码,哥写的是架构哥写实都是RMB,深夜折腾了4个小时终于写好了这篇文章了。
一个轻量级快速软件开发系统架构不在于局部最优而在于整体最优、不在于技术最先进而在于最简单易懂、方便扩展。
导读:
白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
疯狂.NET架构通用权限后台管理工具演示版2.0下载
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 数据集权限
淘宝店地址:
http://shop59297253.taobao.com/