珍贵的体验:在Linux平台发挥.Net的强大威力
2011年7月10日 下03时56分45秒
最近跟爱立信合作了一个项目,要做一个分布式的系统,其中服务端由我领头来开发,用什么技术不限,但就是有一条:所有的服务器、客户端,全都是Linux的。
大胆地采用了Mono,有了Mono这个好东西,就可以在Linux平台发挥.Net的强大威力了。
仅仅2周就把项目做出来了,而且做出来的结果是:客户非常非常满意,据说远远超出了客户的期望。公司上下皆大欢喜。
下一步这套系统,基于多方合作共同开发的需要,也许将继续采纳我的这套.Net架构,也许将全面porting到Python。
但是这套.Net架构确实是一个非常好的案例。
服务器端完全设计成分布式的。有几个角色:Controller、Log Server、Agent Server,这几个角色的服务可以完全装在一台机器上,也可以分开,每个角色独立装载一台服务器上,也可以由一个服务器群来实现其中一个角色。比如说,Log Server不够用了,没关系,现买一台1U的服务器,装上Linux系统,部署上这套程序,然后Controller就能自动发现这台新的Log Server,并且把别的Log Server处理不过来的任务安排给这台新的Log Server。其余的角色也都是这样,可以从1台扩展到N台,有一个简单的算法来按照每台Server的资源利用率自动分配任务,保证合理地利用这些Server。
B/S和C/S的架构共存于这套系统中。Web Server采用Apache,.Net引擎采用Mono 2.10,OS采用Debian Linux 6.0,数据库采用Postgresql 9.0.3,主要用C#语言实现,部分由Python语言实现。大量采用了PL/SQL来进行数据库端开发。大量采用JSON来进行系统之间的对象传递。
无论B/S的部分还是C/S的部分,其实都是用HTTP来通讯,而且尽可能做成RESTful Web Service。
Mono提供了在Linux上运行.Net的环境。之前我也曾经在苹果的Macintosh OS X 10.6上试用过Mono,表现良好。但是这回在Linux的实际项目上正式采用Mono,对我以及对其他人,还是头一次。经过两周的奋战,总之,还好,有个别地方不顺利,不顺利的地方主要牵扯到文件操作,但是别的地方比如数据库操作都是和Windows下的表现完全一致的。至于文件操作这部分,当时没敢多花时间,所以用Python写了个小服务,然后通过HTTP Post这种方式来调用这个服务。别的地方挑大梁的都是.Net/C#。
至于当时用Mono运行.Net遇到的小小的不顺利的几个地方,打算项目结束后我来作一番调研。我相信这些地方都会解决的。而且昨天我去codeplex和codeproject上面查了一下现有的Mono案例,发现资源还是挺丰富的。
所有这些东西由我带着两个人耗时2周完成,其中一名是ASP.Net程序员,完全没接触过Linux环境,另一名是Python程序员,基本上没怎么接触过Windows。我在项目里做的事很杂,架构基本上是我一个人做的,然后分配任务、设计接口,当临时的系统管理员和DBA,现学PL/SQL,用PL/SQL写了大约1千多行的存储过程,然后还为小模块写测试工具,给大家部署开发和测试环境,部署svn,然后还承担了大约60%的具体的开发任务。充当了一个Dev Lead的角色,还充当了一个PM的角色。
前天结束了这个项目,然后爱立信过来了一大帮人来看,都很满意。公司也很高兴,给我们几个放了一天假,今天过来上班。
这个项目对我来说真是印象深刻。
原文链接:http://www.leadbbs.com/a/a.asp?B=205&ID=2869830&Aupflag=1&Anum=1
![5.jpg](http://v.t.qq.com/sign/suizhikuo/7c97266e7fa31455ed85751ba7e375907be6b1ca/5.jpg)
![8.png](http://service.t.sina.com.cn/widget/qmd/1747973797/7f8d4909/8.png)
![1.png](http://service.t.sina.com.cn/widget/qmd/2622466271/bc29cd04/1.png)