分布式开发简介

1          概述

分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。之所以要把一个应用程序分布在不同的计算机上,主要有两个目的:

1)        分散服务器的压力

大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。

l        横向:按功能划分。

l        纵向:N层架构,其中的一些层分布到不同的服务器上(分层的概念会在后文进行介绍)。

2)        提供服务,功能重用

使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。

服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。

2          架构

分布式的系统架构,主要从以下几个方面来考虑:分层、面向服务以及分布式数据库。

2.1        分层模型

一般地,我们将应用程序功能分为三个方面,对应3层架构模式。它们是数据层、中间层(业务逻辑层)和表示层,如下图所示。

1)        数据层:存储数据以及从数据库中获得较为原始的数据。

2)        业务逻辑层:介于数据层和表示层之间,负责处理来自数据存储或发送给数据存储的数据,把数据转换成符合商务规则的有意义的信息。

3)        表示层:从业务逻辑层获得信息并显示给用户,负责与用户的交互。

大型分布式软件架构 分布式软件开发_web服务

 三层架构模式,将业务逻辑和数据存储分离,并分别用独立的服务器来承载,有利于分散系统的压力。其优点具体如下所示:

1)        因为客户机不包含业务逻辑,所以它们变得更加简洁。这就使部署和维护工作更加容易,因为更新业务逻辑只需要对应用服务器进行操作。

2)        客户机与数据库细节相分离。应用服务器能够与几个不同的数据源(分布在不同的数据库服务器上,下文中会对分布式数据库系统进行介绍)协同工作,并且只对客户机提供单一的访问点。

3)        如果设计正确,业务逻辑就能够被分布到几个负载均衡的应用服务器上。如果用户需求增加,则可以添加更多的服务器以满足要求。同时,可以将业务逻辑发布为服务,供客户端应用程序或者其它服务调用,构建成面向服务的系统架构。

2.2        面向服务

一家汽车租赁公司决定创建一个新的应用程序,用于汽车预定。该租车预定应用程序的创建者知道,应用程序所实现的业务逻辑必须能够让公司内外运行的其它软件访问。因此,他们决定以面向服务的方式来创建此应用程序,并通过定义完善的一组服务,将此应用程序的逻辑公开给其他软件。

为了实现这些服务并使之与其他软件进行通信,这一新应用程序将使用.Net Framework的分布式计算技术,主要有:

1)        ASP.NET Web 服务

它使用Soap交互信息,是跨平台,跨语言的,目前大多数平台都支持基本的 Web 服务,所以在 WCF 发布之前,这是实现跨供应商互操作性的最直接的方法。一般用在B/S结构的系统中,需要IIS进行启动。

下图演示了客户机消费Web服务的情形。客户机可以是一个Web应用程序、另一个Web服务等。

   

大型分布式软件架构 分布式软件开发_服务器_02


  Web服务的消费者调用名为Method()的Web服务上的方法。实际调用向下层传播,作为Soap消息通过网络,并向上层传播到Web服务。Web服务执行并响应(如果有的话)。实现Web服务与客户机之间的双向通知或者发布/订阅功能是可能的,但是必须手工完成。客户机可以实现自己的Web服务并在对服务器的调用中传递该Web服务的引用。服务器可以保存引用,然后回调给客户机。

2)        .NET Remoting

专门为紧密耦合的 .NET 到 .NET 通信而设计,它为本地网络中的应用程序提供了无缝而直接的开发体验。一般用在C/S结构的系统中,需要通过一个WinForm或是Windows服务进行启动。

3)        Microsoft 消息队列 (MSMQ)

提供持久稳定的消息传送,这通常是间歇式连接的应用程序的最佳解决方案。这些应用程序对数据传送、工作量分离以及应用程序生存期均要求有保证。

4)        WCF服务

WCF是使用托管代码建立和运行面向服务的应用程序的统一架构,是开发者可以建立一个跨平台(可与在J2EE 服务器构建、非 Windows 系统上运行的应用程序通信)、安全、可信赖、事务性的解决方案,能与目前已有的分布式系统兼容。它是微软分布式应用程序开发的集大成者,整合了.Net 平台下所有和分布式系统有关的技术。

 

大型分布式软件架构 分布式软件开发_数据库_03

以通信范围而言,WCF可以跨进程(同一机器上不同的应用程序之间的通信)、跨子网、企业网(局域网内不同的机器之间的通信)甚至于Internet(互联网中不同的机器之间的通信)。从宿主程序而言,可以是ASP.NET,EXE , WPF(Windows Presentation Foundation), Windows Forms, NT Service, COM+.

2.3        分布式数据库系统

分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来操纵这些结点上的子数据库。分布式数据库在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。分布式数据库系统适合于单位分散的部门,允许各个部门将其常用的数据存储在本地,实施就地存放本地使用,从而提高响应速度,降低通信费用。它有以下优点:

1)        解决组织机构分散而数据需要相互联系的问题。比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。

2)        均衡负载。负载在各处理机间分担,可避免临界瓶颈。

3)        可靠性高。数据分布在不同场地,且存有多个副本,即使个别场地发生故障,不致引起整个系统的瘫痪。

4)        可扩充性好。当需要增加新的相对自主的组织单位时,可在对当前机构影响最小的情况下进行扩充。

5)        提高系统性能系统。可以根据距离选择离用户最近的数据副本进行操作,减少通信代价,改善整个系统的性能。

分布式数据库系统虽然有诸多优点,但它同时也带来了许多新问题。如:数据一致性问题、更新同步以及查询分解等的复杂性、数据远程传递的实现、通信开销的降低等,这使得分布式数据库系统的开发变得较为复杂。

3          总结

分布式应用程序的开发,要对应用程序进行分层,各层之间相互独立,通过服务或接口来进行调用,不仅便于开发的管理,也有利于集成其他平台上的应用程序,实现了功能模块的复用、重用,提高了应用程序的可扩展性。在业务数据量多的情况下,还要考虑构建分布式的数据库系统,这可以通过DBMS自动管理的数据订阅、分发技术实现数据库的数据同步,以达到数据共享的目的;也可以与一些分布式的计算技术结合起来,比如说.NET Remoting技术来解决各数据库之间的通信问题,等等。

针对大型的网站应用,分布式部署策略可以从以下几个方面考虑:

1)        代理服务器实现请求的分离 。

2)        缓存的分布式部署,提高系统性能。

3)        拆分网站的对外功能,例如不同域名前、后缀,URL 重写。

4)        面向服务,每个服务分布到一台服务器上 。

5)        数据库的分布式集群部署。

6)        设立专门的应用服务器。比如发送邮件通知的服务。