1. 概述
分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。之所以要把一个应用程序分布在不同的计算机上,主要有两个目的:
- 分散服务器的压力
大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。
横向:按功能划分。
纵向:N层架构,其中的一些层分布到不同的服务器上。
- 提供服务,功能重用
使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。
2. 架构
分布式的系统架构,主要从以下几个方面来考虑:分层、面向服务以及分布式数据库。
2.1 分层模型
一般地,我们将应用程序功能分为三个方面,对应3层架构模式。它们是数据层、中间层(业务逻辑层)和表示层,如下图所示。
-
数据层:存储数据以及从数据库中获得较为原始的数据。
-
业务逻辑层:介于数据层和表示层之间,负责处理来自数据存储或发送给数据存储的数据,把数据转换成符合商务规则的有意义的信息。
-
表示层:从业务逻辑层获得信息并显示给用户,负责与用户的交互。
三层架构模式,将业务逻辑和数据存储分离,并分别用独立的服务器来承载,有利于分散系统的压力。其优点具体如下所示:
-
因为客户机不包含业务逻辑,所以它们变得更加简洁。这就使部署和维护工作更加容易,因为更新业务逻辑只需要对应用服务器进行操作。
-
客户机与数据库细节相分离。应用服务器能够与几个不同的数据源(分布在不同的数据库服务器上,下文中会对分布式数据库系统进行介绍)协同工作,并且只对客户机提供单一的访问点。
-
如果设计正确,业务逻辑就能够被分布到几个负载均衡的应用服务器上。如果用户需求增加,则可以添加更多的服务器以满足要求。同时,可以将业务逻辑发布为服务,供客户端应用程序或者其它服务调用,构建成面向服务的系统架构。
2.3 分布式数据库系统
分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来操纵这些结点上的子数据库。分布式数据库在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。分布式数据库系统适合于单位分散的部门,允许各个部门将其常用的数据存储在本地,实施就地存放本地使用,从而提高响应速度,降低通信费用。它有以下优点:
1)解决组织机构分散而数据需要相互联系的问题。比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。
-
均衡负载。负载在各处理机间分担,可避免临界瓶颈。
-
可靠性高。数据分布在不同场地,且存有多个副本,即使个别场地发生故障,不致引起整个系统的瘫痪。
4)可扩充性好。当需要增加新的相对自主的组织单位时,可在对当前机构影响最小的情况下进行扩充。
5)提高系统性能系统。可以根据距离选择离用户最近的数据副本进行操作,减少通信代价,改善整个系统的性能。
分布式数据库系统虽然有诸多优点,但它同时也带来了许多新问题。如:数据一致性问题、更新同步以及查询分解等的复杂性、数据远程传递的实现、通信开销的降低等,这使得分布式数据库系统的开发变得较为复杂。
在当今应用架构里,分布式和应用与服务之间的通信都是核心思想。
https://blog.csdn.net/han_dongwei/article/details/7239301
https://blog.csdn.net/yuebinghaoyuan/article/details/8917511