如何设计一个优秀的分布式系统?重要因素、工具、策略都在这里
副标题[/!--empirenews.page--]
介 绍 今天的应用程序可以说是分布式系统开发中的一项奇迹。基于不同的系统架构,构成应用程序的每个功能或服务可能在不同的系统上执行,而系统位于不同的地理位置,使用不同的计算机语言编写。应用程序的组件可能托管在一个功能强大的系统上,该系统由用户自己携带,并且可以和世界各地的应用程序组件或服务进行通信(他们都是数据中心的副本)。 而令人惊讶的是,使用这些应用程序的用户通常并不会对复杂环境的请求作出响应。这样的请求包含了像本地时间、本地天气或前往酒店的方向等等。 让我们慢慢开始介绍,看看使这一切成为可能的工业魔法,并思考开发人员在处理这种复杂性时应该牢记哪些思想和规则。 系统设计的演变史 图1:系统设计的历史演变 来源:Interaction Design Foundation, The Social Design of Technical Systems: Building technologies for communities 从程序员编写应用程序,手工将它们编译成他们正在使用的机器的语言,然后使用切换开关将单个机器指令和数据直接输入到计算机的内存开始,应用程序开发已经走过了漫长的道路。 随着处理器越来越强大,系统内存和在线存储容量增加,计算机网络能力显著增强,开发方法也产生了变化。现在,数据可以从地球的一段传递到另一端,而速度比早期电脑将数据从系统内存转移到处理器本身的速度还要快! 让我们看看这一惊人转变中的一些亮点。 单体设计 早期的计算机程序都是基于单体设计的,所有的应用程序组件都被设计成在一台机器上执行。这意味着像用户界面(如果用户实际能与程序交互)、应用程序处理规则、数据管理、存储管理和网络管理(如果计算机连接到计算机网路上)等功能都包含在了程序中。 这些虽然编写起来简单,但这些程序会变得越来越复杂,越来越难以形成文档,也难以更新和更改。这时,机器本身对企业来说就成了最大的开销,因此应用程序的设计是为了尽最大可能使用机器。 客户端/服务器架构 随着处理器越来越强大,系统和在线存储容量增加,数据通信更快、更经济,应用程序的设计也随之发展,以适应发展的速度。应用程序逻辑被重构或分解,允许每个应用程序在不同的机器上执行,并且在组件之间插入了不断改进的网络。这使得一些特性可以迁移到当前可用的成本最低的计算环境中。这一演变经历了一下几个阶段:
早期的分布式计算依赖于特别用途的用户访问设备——终端。应用程序必须理解它们使用的通信协议,并直接向设备发出命令。当廉价的个人计算机(PC)出现时,终端被运行终端模拟程序的PC所取代。 此时,应用程序的所有组件仍然驻留在单个大型机或小型计算机上
随着PC的功能越来越强大,支持更大的内部和在线存储,网络性能进一步提高,企业对其应用程序进行了细分或分解,以便在本地PC上提取和执行用户界面。应用程序的其余部分则继续在数据中心的系统上执行。 这些PC通常比它们所替代的终端便宜,并且它们还有额外的优点。这些PC是多功能设备,它们可以运行在它们所替换的终端上无法运行的、却能提高办公效率的应用程序。这种组合促使企业在更新或刷新应用程序时,开始倾向于客户端/服务器应用体系结构。
PC的发展仍在快速进行。一旦出现了更强大、存储容量更大的系统,企业就会使用它们,将更多的处理操作从数据中心昂贵的系统迁移到便宜的用户办公桌上。这时,用户界面和一些计算任务就迁移到了本地的PC上。 这样大型机和小型计算机(现在成为服务器)就有了更长的使用寿命,从而降低了企业总体的计算成本。
随着PC变得越来越强大,更多的应用程序度可以从后端服务器迁移过来。在这里,除了数据和存储管理功能之外的所有功能都已迁移。
这时,公共互联网和万维网出现了。客户端/服务器计算的方式仍然在使用。为了降低总体成本,一些企业开始重新架构它们的分布式应用程序,便于使用标准的internet协议进行通信,并使用Web浏览器代替之前定制的用户界面功能。后来,一些应用程序的特性通过Javascript语言重新编写,这样它们就可以在客户端的计算机上本地执行。
行业创新并不仅仅关注客户端侧的通信链路,对服务器也做了很大的改进。企业开始利用许多更小、更便宜的符合行业标准的服务器,通过它们强大的功能来支持部分或者全部原来基于大型机的功能。这样它们可以减少需要部署的昂贵主机系统的数量。 接着,远程PC就可以和许多服务器通信,每个服务器都支持自己的应用程序组件。在此环境中使用了专用的数据库和文件服务器。之后,再将其他应用程序功能迁移到应用程序服务器。 网络是另一个业界高度关注的领域。企业开始使用提供防火墙以及其他安全功能的专用网络服务器、文件缓存功能来加速应用程序的数据访问,电子邮件服务器、web服务器、web应用程序服务器、分布式命名服务器这些服务器跟踪和控制用户凭证,用于访问数据和应用程序。封装在设备服务器中的网络服务列表一直在增长。 基于对象的开发 PC和服务器功能的快速变化,加上处理能力、内存和网络这三者的价格的大幅下降,这些都对应用程序开发产生了重大影响。IT领域中最大的成本开销不再是硬件和软件,而是变成了通信、IT服务(员工)、电力以及冷却系统。 软件开发、软件维护和IT操作出现了新的重要性,开发过程也发生了变化以迎合新的形势,即系统便宜,而人员、通信和电力越来越贵。 图2:全球IT花费预测 来源:Gartner Worldwide IT Spending Forecast, Q1 2018 企业希望通过改进数据和应用程序架构来充分发挥员工的价值。其结果就是面向对象的应用程序和开发方法。许多编程语言,例如下面的语言,都支持这种方式: C++、C#、COBOL、Java、PHP、Python、Ruby 在定义和记录数据结构时,应用程序开发者的编写变得更加系统化来适应变化。这种方式还使得维护和改进应用程序更加容易。 开源软件 (编辑:上饶站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |