Distributed Application
DCOM, COM+, Enterprise Service, Web Service, .NET Remoting, Windows Communication Foundation.
摘要:这个post要表达的东西是非常基本而且简单的,但我已经反复考虑了数月之久。这里的程序指的是个人/家用桌面程序,非所谓的“企业级应用”。 几周前我在整理我家里电脑的相册时,PC和Laptop之间的相册不同步,COPY来COPY去实在是太繁琐了。而我在公司的另一台Laptop也带回家后,这变成了一个更麻烦的问题。解决这个问题的办法是找个文件夹同步软件。 在另外一个方面,假如我在父母住处也想看看我的相册怎么办呢?答案是我最好创建一个网上相册,比如Windows Live的Gallery服务,Google的Picasa相册,或者是其他网上大量的网络相册服务。而这里的问题是,网络太慢了,桌面程序点一下Page Dn就能翻一个相片,网上有时候要一分钟。 我的电子邮件也有着类似的问题。如果使用Outlook收邮件的话,收下来后服务器上就没了,这意味着我不能在另外一台电脑上再去查看这个邮件。对于工作邮件这可能不是个问题,但个人邮箱却没有办法。于是很多人选择了全部基于Web界面处理个人邮件,比如Gmail和Live Mail。 但更为理想的状况是,我可以用Outlook收发邮件,用Word编辑邮件,同时邮件在服务器上总是保存着副本(这可以设置Outlook下载邮件后不删除服务端邮件,但邮箱容量往往都很小,不能长期这么做,现有邮件系统也不把这种需求当作典型应用)。邮件服务器上不但保存一个一个邮件,还有我设置的邮件分类,还有已读/未读状态值,甚至Outlook的Flag和Task等。这样无论我在哪里打开Outlook,都是一样的体验。 我现在使用Google的Picasa相册已经有了部分的这种能力,它同时有桌面和Web版本,我曾对它寄予完全的希望,用来管理我所有的相片。但如果不是我孤陋寡闻,显然Google并没有考虑到这个方面,因为Picasa桌面端只能向Web端上传图片却不能下载。。。而更进一步的设计则应该是具有本地文件和Web数据库同步的功能。 Windows Live的Favorites似乎有着一模一样的问题,它允许你从IE的Favorites导入到Web端,但却没有反向同步的能力。。。但它相比Picasa的优点是,客观上它是支持导出的,但是只是导出到一个HTM文件让你下载而已。。。而不是自动“装”到IE收藏夹所在的文件夹内。 微软的Share Point Service加上Office则是个更接近理想的组合: 数据保存在服务端的数据库里,你在任意网络可连通的地方都可打开 Office一系列桌面软件安装于客户端,可以用这些软件来打开修改文档 这个组合在我看来已经接近完美了,但唯一的问题是在离线状态文档就不可访问了。我们需要文件在硬盘上的Cache。当然,SPS/WSS主要还是针对企业应用的,这个问题不大,网络速度一般也不会成为问题,数M的Word文件在数秒内就能传输完成。但如果Office System在客户端再加个“Share Point Client”维护硬盘Cache的话,那就更棒了。 这里的Model是相当简单的: 数据(Online,公共服务器维护,受安全措施保护)↑↓缓存(Offline,程序自动维护)↑↓程序(Offline,自维护或者IT管理员维护) 作为可选项,公共服务器上可以支持Web版的数据查看和一些简单操作 — 如果有必要的话。 至于Google的在线版本的Word和Excel,则根本是误入歧途(我不是作为一个MS MVP下这个结论的)。Google的选择是把程序和数据统统放在服务端,这大概是大部分对Google这些服务心存怀疑态度的人的最根本出发点。Web程序最终是不可打败桌面程序的,就算有下一代的DHTML可以做到和现有桌面程序一样的用户体验(比如Word般丰富的文本编辑器),他仍然需要硬盘的Cache。且不说这是个相当大的假设,更不用说微软的WPF加Expression套件在Rich Client方面已经再次走在了前面。也许五年后网络速度和连通性又有了非常大(速度*=100,连通性100%,网络延迟100ms内)的提高,硬盘Cache无足轻重,那基于浏览器的应用还面临着最后一个问题,那就是它们必定受限于浏览器安全沙箱模型,可触及的数据和可做的动作都是受限的。 Google的Picasa软件离这个目标则只有一步之遥。但令人匪夷所思的是,他们为什么不在Gmail这样的产品上也应用类似的策略呢?Gmail Notifier都做出来了,再进一步吧。Gmail的Web界面编辑器确实“还算不错”,但也只是相对于其它Web编辑器而言而已,距离Outlook等桌面软件差太远了。 除了这些用户关注的数据,其它程序本身使用的数据也可放在网上。比如说配置文件。极端一点,想象一下把整个Windows注册表都同步到网上的情形(当然硬件相关的配置信息就不用了),至少你能节约大量重装系统的时间(装系统很快,但装软件配置软件很慢)。Q3ACN(一个游戏网站)曾提供过保存Quake3游戏CFG文件的服务,大受欢迎,因为这样我们Quaker随便去哪个网吧都能以自己的CFG文件配置游戏系统,提高作战水平。要是id Soft直接把这个功能植入游戏,再在公司的Server上提供数据库接口,那就更完美了。(这是个坏例子,不打Quake游戏的朋友可能很难理解这一点。。。) 最后,关于SaaS(Software as a Service),这也是一个很好的切入点,虽然这个和SaaS只有一丁点关系。。。程序除了使用更好的加密算法防止盗版(比如微软的SPP),还可结合Internet。让程序的一部分功能依赖于Internet上的Server,可以非常轻松的获得非常好的保护。破解的Xbox360能玩单机游戏,却不能玩联网游戏,这就是个良证。把程序所需的配置数据放在互联网上,也是实现这个目的的途径之一。是不是合适,这是另外一个问题,这里的假设是你希望保护好你的软件并为你带来利润,而不是一个FOSS偏执狂。 刚才Kaneboy提示,Office 2007的Groove已经具备了我所需要的"Share Point Client"的功能,当然它的feature还不止这些,呵呵。updating...[
阅读全文]
摘要: 思归和我翻译的《.NET企业服务框架》一书终于面世了,在这里可以看到相关的介绍和购买信息(第二书店上也有)。 目录 | 译者序 | 前言 | 作者序 这是一本介绍.NET Enterprise Service的书,做企业开发的开发者,一定能在这本书里找到你想要的东西。这里有3个章节的在线版本。 我还新建了一个Google Group,有任何关于这本书的问题都欢迎来这里讨论: .NET企业服务框架 Browse Archives at groups.google.com 最后,这本书本来预期是今年上半年上市的(我春节就交稿了),但由于各种各样的原因居然拖到了现在。对一直关注这本书的朋友们说一声SORRY!...[
阅读全文]
摘要:引:要不是TechEd,还真不知道微软出了Compute Cluster Pack这么个东西。
微软在群集/分布式领域已经做了大量的工作,在Windows 2000发布时,它就已经支持了四种分布式模型,分别对应于不用的应用场合。他们是:Microsoft群集服务(MSCS)、网络负载平衡(NLB)、组件负载平衡(CLB)和Application Center 2000。详情见:http://www.microsoft.com/china/technet/archives/columns/tips/w2kclust.asp
我对分布式计算一直比较有兴趣,今年在上海TechEd听了一个讲Windows Compute Cluster Server(CCS)的Session,才知道有这么个东西存在。MSDN上已经有下载了,发布日期是2006/07/17。但不知何故微软似乎没有怎么给这个产品作市场宣传嗯。
Product Overview:http://www.microsoft.com/windowsserver2003/ccs/overview.mspx
我在TechEd会后和微软的工作人员(来自开发团队)小聊了一会儿,得知这个产品最佳的应用领域在于那些“Task的数量很少,但每个Task都需要很长时间计算”的问题,比如Pi的计算。实际上这个产品是为科学计算准备的,比如气象模拟、地质勘探等领域。
CCS基于MPI 2.0标准,所以它可以和其他基于MPI 2.0栈的服务器协同工作。CCS目前可以安装在Windows Server 2003/R2 64bit版本上。32-bit对于高性能计算(HPC)可能确实字长太短了,所以微软的方案也根本没有打算支持。
这里有个从微软网站copy过来的table,我在最右边加了一列,来描述CCS和它们的不同之处:
MSCS
NLB
CLB
Application Center
CCS
用途
应用程序故障恢复与故障返回
IP通信负载平衡
COM+对象负载平衡
创建并管理Web区
高性能计算(High Performance Computing/HPC)
优势
可用性与可管理能力
可用性与可伸缩性
可用性与可伸缩性
可用性、可伸缩性与可管理能力
可伸缩性与可管理能力
每个群集中的最大节点数量
2个(针对Win2k AS)或4个(针对Datacenter)
32
16
16
无限制
群集类型
共享存储机制
无共享资源
无共享资源
无共享资源
N/A
状态信息
有状态
无状态(如果需要的话,可以支持有状态连接)
无状态
无状态
N/A
是否需要对服务器应用程序进行修改
需要
不需要
不需要
不需要
需要(使用MPI 2.0库,只支持Fortran77、Fortran90和C语言)
是否需要使用专用硬件设备
需要
不需要
不需要
不需要
64-bit CPU from Intel or AMD ...
是否独立
是
是
否(需要使用AppCenter)
是
否(需要使用Compute Cluster Pack)
分布式计算可以让你的程序或者服务拥有更好的可靠性,或更高的可伸缩性。CCS是为性能而生的产品,它可以以高度scalable的方式增强群集的性能。微软在多CPU/多核方面已经提供了对了SMP的支持(通过VC2005的OpenMP 2.0支持 — 同时支持Managed和Unmanaged代码!),在多机并行运算方面又实现了MPI 2.0,它的计算机群集方面的产品线应该已经相当完善了。
以上信息来自网上资料汇总(大部分来自官方),有不对之处请指正。...[
阅读全文]
摘要:MySQL 5.0的发布已经有好些天了,添加了“企业应用”所需的特性,它终于支持存储过程和触发器了;不过,企业应用最大的需求之一,被很多初学者所忽略了的(这个现象来自对论坛的观察),是MySQL 5.0新增加的对分布式事务的支持:http://dev.mysql.com/doc/refman/5.0/en/xa.html,基于Open Group的XA规范。
最近又看到新闻,PostgreSQL 8.1也快发布了。在其RC1版本的Release Notes中,也看到了它新增的对XA的支持:http://developer.postgresql.org/docs/postgres/release.html#RELEASE-8-1。不知道这个算不算是PostgreSQL迫于MySQL的压力才推出的功能;对于数据库这样的产品,分布式事务的支持只能算一个基本功能,Oracle和SQL Server在很早以前就已经支持了,这实在不是什么新鲜玩意儿。只是这些开源数据库也开始支持这种关键功能,这应该可以成为真正挑战商业数据库的起点。
这些数据库实现XA规范时,也都采用了2PC的方式(2-Phase Commit)。也有一些产品采用了OMG的CORBA OTS规范,也有一些使用了XA规范但用的是一步提交(XA规范同时支持这两种方式)。然而,最流行的还是基于XA和2PC的方式。SQL Server,Oracle都已经支持(Sybase和DB2也支持XA 2PC,但我不确定它们的驱动也支持);MySQL和PostgreSQL也增加了对它的支持。
Windows和.NET对这种分布式事务(XA和2PC)也有着良好的支持。对于Windows Server 2003和Windows XP,可以简单的使用COM+ 1.5的无组件服务做到:ServiceConfig scopeConfig = new ServiceConfig();
scopeConfig.Transaction = TransactionOption.Required;
ServiceDomain.Enter(scopeConfig);
try
...{
// business actions
}
catch(Exception e)
...{
ContextUtil.SetAbort();
}
finally
...{
ServiceDomain.Leave();
}
.NET 2.0的FCL有System.Transactions.TransactionScope类可用:http://msdn2.microsoft.com/en-us/library/system.transactions.transactionscope.aspx。用法更简单,而其背后也是通过ServiceDomain和COM+ 1.5实现的。
对于要求兼容Windows 2000的系统,则可以自己实现一个服务组件来做到这一点。如PetShop 3.0里面的例子,基本的代码看起来是这个样子:[Transaction(TransactionOption.Required)]
public class BusinessComponent : ServicedComponent
...{
[AutoComplete]
public void BusinessProcess()
...{
// business actions
}
}
在// business actions段,可以同时建立到多个数据库服务器的连接,数据库提供商也可不同,进行多步数据操作,并且保证这些操作是一个原子操作(实际上能保证所有四个ACID属性)。这就是分布式事务的威力,也是大型应用中必须实现的需求。
写到这里也许你已经打算用MySQL的.NET Connector试试MySQL的这个新功能了。不过还得再等等,MySQL是升级了,它的.NET Connector还没升级,开源社区看起来还是更喜欢Java(显然),因为Java版的Connector已经可以了。为新版PostgreSQL准备的.NET驱动也还在开发过程中。不过它们实现的分布式事务规范和COM+的相同,所以没有理由不支持,就看驱动的了。到时候,你是否也会考虑考虑使用这些开源的产品呢?
COM+也是个好东西,并且目前为止这是.NET下(COM+的托管包装见System.EnterpriseService命名空间)实现分布式事务的唯一途径。我刚加入Infosys不久,涉及到的两个.NET项目(一个B/S一个C/S)均使用了ES/COM+。得益于COM+服务良好的灵活性和可伸缩性,配合Windows Cluster Service,满足了客户苛刻的需求。...[
阅读全文]