在线情况
楼主
  • 头像
  • 小咪的爸爸
  • 级别
  • 徽章
  • 职务总版主
  • 声望+29
  • 积分39723
  • 经验1151179
  • 文章33857
  • 注册2003-08-14
珍贵的体验:在Linux平台发挥.Net的强大威力
  最近跟爱立信合作了一个项目,要做一个分布式的系统,其中服务端由我领头来开发,用什么技术不限,但就是有一条:所有的服务器、客户端,全都是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的角色。

  前天结束了这个项目,然后爱立信过来了一大帮人来看,都很满意。公司也很高兴,给我们几个放了一天假,今天过来上班。

  这个项目对我来说真是印象深刻。

[ 此贴最后由Xinsoft在2011-3-30 11:57:14编辑过 ]
asp技术学习感谢您的参与
在线情况
2
  • 头像
  • 级别
    • 积分5
    • 经验393
    • 文章5
    • 注册2010-08-11
    这么多年,俺很少让客户满意[EM13][EM05]
    asp技术学习感谢您的参与
    在线情况
    3
    • 头像
    • 级别
      • 积分70
      • 经验3418
      • 文章63
      • 注册2007-04-22
      [P],客户满意,那不容易,还有几个“非常非常”, [/P]
      asp技术学习感谢您的参与
      在线情况
      4
      • 头像
      • 级别
      • 徽章
      • 积分400
      • 经验26210
      • 文章392
      • 注册2006-06-16
      [P]小新又在吹水了。。[/P]
      asp技术学习感谢您的参与
      在线情况
      5
      • 头像
      • 级别
        • 积分5
        • 经验393
        • 文章5
        • 注册2010-08-11
        孩子他爹像80年代的电影明星[EM32]
        asp技术学习感谢您的参与
        在线情况
        6
        • 头像
        • 级别
        • 徽章
        • 积分400
        • 经验26210
        • 文章392
        • 注册2006-06-16
        [P]我的头像帅不[EM31][/P]
        asp技术学习感谢您的参与
        在线情况
        7
        • 头像
        • 空灵君
        • 级别
        • 徽章
        • 职务论坛版主
        • 声望+1
        • 积分3727
        • 经验57014
        • 文章2374
        • 注册2004-07-01
        [P]用Silverlight了没?[EM05][/P][P] [/P][P]最近在看WPF和XAML[/P][P]用银光写了一个小型的ERP系统[/P][P]和公司开发中的软件结合在一起[/P][P]目前还在调试中……[/P]
        asp技术学习感谢您的参与
        在线情况
        8
        • 头像
        • 小咪的爸爸
        • 级别
        • 徽章
        • 职务总版主
        • 声望+29
        • 积分39723
        • 经验1151179
        • 文章33857
        • 注册2003-08-14
        [P][QUOTE][b]下面引用由[u]xyxp[/u]发表的内容:[/b] 用Silverlight了没? 最近在看WPF和XAML用银光写了一个小型的ERP系统和公司开发中的软件结合在一起目前还在调试中……[/QUOTE][/P][P] [/P][P]没有用到 Silverlight。[/P][P]我最主要的客户端并不是浏览器,只是一个发送、接收HTTP Post request/response的应用程序。[/P][P]个别地方需要提供一个WebAdmin,类似于你家里的宽带路由器自带的那种Web管理界面,用不着Silverlight。 [/P]
        asp技术学习感谢您的参与
        在线情况
        9
        • 头像
        • 寒梅只为伊人香
        • 级别
          • 声望+1
          • 积分981
          • 经验24119
          • 文章918
          • 注册2003-06-12
          [P]对猫爸的项目提几个问题,呵呵[/P][P]1 据之前的了解,Mono对.net2.0也只是支持大部分,并不能完全兼容,至于3.5和其它的,没有关注它后续的发展。把它用在实际的项目中,风险也挺大。[/P][P]2 Controller能自动发现新的Loger,对于这种机制,从安全角度考虑,猫爸有没考虑过Controller被伪造的Loger欺骗。[/P][P]3 如果项目扩展至Loger之间需要有实时的数据同步需求,猫爸会怎么去做呢[/P][P]4 对你这个项目的架构感兴趣,我正在做类似的项目,也是负责服务端,但是,遇到了3中提到的问题[/P]
          asp技术学习感谢您的参与
          在线情况
          10
          • 头像
          • 小咪的爸爸
          • 级别
          • 徽章
          • 职务总版主
          • 声望+29
          • 积分39723
          • 经验1151179
          • 文章33857
          • 注册2003-08-14
          [P]很好的问题。我一一回答你:[/P][P][QUOTE][b]下面引用由[u]绿水萝卜[/u]发表的内容:[/b] 1 据之前的了解,Mono对.net2.0也只是支持大部分,并不能完全兼容,至于3.5和其它的,没有关注它后续的发展。把它用在实际的项目中,风险也挺大。[/QUOTE][/P][P]你所说的这种不兼容的情况,恐怕是多年以前的老皇历了。你所说的这种情况已经是几年前的事了,现在Mono的长期支持版本是2.6.7,最新稳定版本是2.10.2,这两个版本对Microsoft.Net 2.0都有非常好的支持,而且对3.0/3.5的绝大多数特性也支持,并开始支持部分Microsoft.Net 4.0的特性。[/P][P]Mono对Microsoft.Net不兼容的地方,主要在以下几部分:[/P][P]1、WCF:Mono支持一些最基本的WCF特性,但不支持其所有特性;[/P][P]2、WPF / Silverlight:这部分完全不支持;[/P][P]3、底层图形库:这部分特性不见得都不支持,但在Linux下的实现和在Windows下的实现有很大的差异。[/P][P]4、Mono还包含一些Microsoft.Net所不涉及的特性,比如说Mono.Unix这个namespace。[/P][P] [/P][P]知道了Mono和Microsoft.Net的差异在哪里,你就知道了在什么样的项目中可以大胆地使用Mono,在什么项目中你可以先做兼容性试验,在什么样的项目中你应该放弃Mono。[/P][P]在我的这个项目中,由于我做的是纯server端开发,而且没有用到WCF,所以我采用了Mono。[/P][P]关于Mono的稳定性:现在的Mono早已不是一个用来做实验的东西,它早已是一个产品级的平台了。近几年,国外著名的.Net开源项目,有很多已经推出了Mono版的实现。比如说应用甚广的mojoPortal,这么复杂的一个CMS都推出了与Microsoft.Net同步更新的Mono版,可见mojoPortal开发团队对Mono的信心。[/P][P]Mono我早在几年前就在关注,基本上Mono每一个大版本出来后我都会尝试一下,无论是在Windows上还是Linux上的表现,现在的版本表现都挺不错的。而且以前我在Mac系统下工作的时候也尝试过拿Mono 2.x在Mac系统上写WinForm的程序,偶尔做一些小工具的开发,还是非常高效的。[/P][P] [/P][P]关于Mono对Microsoft.Net的兼容性,最新的官方文档如下:[/P][P][URL=http://www.mono-project.com/Compatibility]http://www.mono-project.com/Compatibility[/URL][/P][P][upload=14182,0]Compact-4.0.png[/upload][/P][P][upload=14183,0]Compact-3.0.png[/upload][/P][P][upload=14184,0]Compact-2.0.png[/upload][/P][P]另外,如果你有一个现成的.Net程序,想移植到Mono平台,可以用这个工具来事先做一下兼容性分析:[/P][P][URL=http://www.mono-project.com/MoMA]http://www.mono-project.com/MoMA[/URL][/P][P] [/P][P] [/P]
          asp技术学习感谢您的参与
          在线情况
          11
          • 头像
          • 小咪的爸爸
          • 级别
          • 徽章
          • 职务总版主
          • 声望+29
          • 积分39723
          • 经验1151179
          • 文章33857
          • 注册2003-08-14
          [P][QUOTE][b]下面引用由[u]绿水萝卜[/u]发表的内容:[/b] 2 Controller能自动发现新的Loger,对于这种机制,从安全角度考虑,猫爸有没考虑过Controller被伪造的Loger欺骗。[/QUOTE][/P][P] [/P][P]目前我的系统全都在一个局域网中,即使将来不在一个局域网中我也打算通过VPN+VLAN使它们在逻辑上处于同一个网络之中。这样就可以很有效地防止ARP欺骗。[/P][P]另外,如果你的应用在互联网当中,也可以通过数字证书来进行各个角色之间的认证。[/P][P] [/P]
          asp技术学习感谢您的参与
          在线情况
          12
          • 头像
          • 小咪的爸爸
          • 级别
          • 徽章
          • 职务总版主
          • 声望+29
          • 积分39723
          • 经验1151179
          • 文章33857
          • 注册2003-08-14
          [P][QUOTE][b]下面引用由[u]绿水萝卜[/u]发表的内容:[/b][/P][P]3 如果项目扩展至Loger之间需要有实时的数据同步需求,猫爸会怎么去做呢[/P][P]4 对你这个项目的架构感兴趣,我正在做类似的项目,也是负责服务端,但是,遇到了3中提到的问题[/P][P][/QUOTE][/P][P] [/P][P]如果log server之间需要实时同步数据,我会在这些服务器上起一个socket监听程序,互相之间以TCP协议互相发送Notification。[/P][P]不知这么回答可否解决你的问题。 [/P]
          asp技术学习感谢您的参与
          Page created in 0.0312 seconds with 6 queries.