分布式应用程序解析:它们是什么?以及它们是如何工作的?
分布式架构已成为现代数字生态中不可或缺的一部分。随着云计算、大数据和高度可用系统的普及,传统的单体架构已经让位于更加分布式、可扩展和具有弹性的设计。
在本博客中,我们将探讨使应用程序成为分布式架构的因素,以及分布式应用程序如何通过实现高可用性、可扩展性和弹性来发挥作用。想深入了解 Kong 在分布式架构中的应用,请联系我们的中国合作伙伴咨询 consultant@gingxing.com。
什么是分布式应用程序?
分布式应用程序是一组分散在多个计算节点上的计算机程序。每个节点都是一个独立的物理设备或软件进程,但都是为了实现共同的目标而工作。这种设置也被称为分布式计算系统。
在单个计算机上运行的应用程序代表了一个单点故障——如果那台计算机出现故障,应用程序就会变得不可用。分布式应用程序通常与单体应用程序形成对比。
单体应用程序可能更难扩展,因为各个组件不能独立地扩展。随着它们的发展,它们也可能成为阻碍开发者速度的因素,因为更多的开发者需要在共享的代码库上工作,而这个代码库不一定有明确的界限。这会导致更新速度变慢和升级变得更加棘手。
当将一个应用程序拆分成不同的部分并在许多地方运行时,整个系统可以容忍更多的故障。它还允许应用程序利用单个应用程序实例无法使用的扩展功能,即水平扩展的能力。然而,这也有代价:增加了复杂性和操作开销——你现在正在运行许多应用程序组件,而不是一个大型应用程序。
分布式应用程序是如何工作的?
在分布式计算中,单个问题被分解,每个部分都由一个组件处理。运行在计算机网络中所有机器上的分布式组件构成了应用程序。
例如,分布式计算可以加密大量数据;解决具有许多变量的物理和化学方程;以及呈现高质量的三维视频动画。分布式系统、分布式编程和分布式算法等术语都指的是分布式计算。
分布式计算的工作原理是计算机在分布式系统架构内相互传递消息。通信协议或规则在分布式系统的组件之间创建依赖关系。这种相互依赖被称为耦合,主要有两种类型的耦合。
松散耦合
在松散耦合中,组件之间的连接比较弱,因此一个组件的变化不会影响其他组件。例如,客户端和服务器计算机可以通过时间实现松散耦合。客户端的消息被添加到服务器队列中,而客户端可以继续执行其他功能,直到服务器对其消息做出响应。
紧耦合
高性能的分布式系统通常使用紧耦合。快速局域网通常连接多台计算机,从而形成集群。在集群计算中,每台计算机都被设置为执行相同的任务。被称为集群中间件的中央控制系统控制和安排任务,并协调不同计算机之间的通信。
不同类型的分布式应用程序模型
客户端-服务器架构
该模型考虑了存在具有强大计算能力的服务器。该服务器又负责接收请求并为多个用户提供服务。功能被分为两类:客户端和服务器。
客户端具有有限的信息和处理能力。相反,它们向服务器发出请求,服务器管理大部分数据和其他资源。
服务器计算机同步并管理对资源的访问。它们以数据或状态信息的形式响应客户端的请求。
这种架构便于远程访问数据源和业务逻辑,并能够实现瘦客户端架构和共享资源访问。
客户端-服务器架构的示例(Example of a client-server architecture)
面向服务的架构
面向服务的架构(SOA)定义了一种通过服务接口使软件组件可重用和可互操作的方法。服务使用通用的接口标准和体系结构模式,以便它们可以快速集成到新应用程序中。接口是服务提供商和消费者之间的服务合同。
服务接口通常使用 Web 服务定义语言(WSDL)来定义,WSDL 是基于 XML(可扩展标记语言)的标准标记结构。服务通过使用标准网络协议(如简单对象访问协议(SOAP)/HTTP)来公开。
企业服务总线(ESB)是一种体系结构模式,其中中央软件组件执行应用程序之间的集成。它执行数据模型的转换,处理连接和消息传递,执行路由,转换通信协议,并可能管理多个请求的组合。通常,您会在 SOA 体系结构中看到 ESB 的实现。
这种体系结构可实现异构环境和可重用组件之间的互操作性,并促进服务的编排和组合。精明的读者可能会意识到,ESB 本身可能会成为一个单体应用程序。
面向服务架构的示例(Example of a service-oriented architecture)
最基本地说,分布式数据库是一种将数据存储在多个位置而不是单个位置的数据库。这意味着,数据不是放在一台服务器或一台计算机上,而是放在多台服务器或由单独的节点组成的计算机集群中。这些节点通常地理位置分离,可能是物理计算机或虚拟机。
每个节点存储一组数据,并运行分布式数据库管理系统软件(DDBMS)。要确定哪些数据将存储在哪个节点中,必须考虑数据分布的概念。
这种架构将数据存储和管理分散到网络化的服务器上。数据的分片使得数据量的增长能够实现水平扩展,而且由于没有单点故障,它具有容错性。
分布式数据库的示例( Example of a distributed database)
云计算与软件即服务(SaaS)
软件即服务(SaaS)是一种基于云的软件模型,通过互联网浏览器向最终用户交付应用程序。SaaS 供应商托管服务和应用程序,供客户按需访问。使用 SaaS 产品时,您无需考虑如何维护服务或如何管理底层基础设施;您只需要考虑如何使用该软件。
如今,SaaS 是最常见的公共云计算服务,也是主导的软件交付模式。工作人员使用的许多软件——从日常工具(如 Slack 用于消息传递和 Dropbox 用于文件存储和共享)到核心业务应用(如企业资源规划(ERP)和人力资源/劳动力优化平台)——都是通过 SaaS 模式交付的。
Kong Konnect 是一个基于 SaaS 的 API 管理平台示例,提供混合解决方案以及专用云网关、开发人员门户、分析和服务中心。
SaaS 服务示例(Example of a SaaS offering)
云计算架构提供按需计算、存储和服务,同时支持分布式系统的轻松扩展。通过利用云原生应用程序设计,可以实现弹性。
SaaS 利用云计算基础设施和规模经济,为客户提供一种更简化的软件采用、使用和付费方式。
分布式应用程序的优点和缺点
使用分布式应用程序的优点有:
可扩展性——通过添加额外的计算能力来进一步分配工作负载或增加存储容量或处理能力,它们可以实现水平扩展。
可用性——它们对软件故障或网络分区更加容忍,因此具有很高的恢复能力。
透明性——分布式应用程序在用户与物理设备之间提供逻辑分离,使人感觉就像在与单个计算机交互一样。
效率——通过优化资源利用实现更快的性能,这使得管理工作负载的间歇性尖峰变得更加容易。
使用分布式应用程序的缺点有:
数据集成和一致性——在分布式系统中,维护多个节点之间的一致性成为一项艰巨的挑战。确保所有节点对系统状态具有共享视图需要细致的协调。在本博客中,我们不会深入探讨 CAP 定理(一致性、可用性和分区容忍性),但如果您有兴趣了解更多信息,请查看以下链接。
网络和通信故障——分布式系统容易因网络分区、硬件问题或软件错误而出现故障。确保系统能够优雅地处理这些故障而不损害用户体验是一项持续存在的挑战。
管理开销——为了了解分布式系统的操作和故障情况,需要增加更多的智能、监控、日志记录、负载均衡等功能。
分布式应用开发的现代化
我们最近经常听到“应用现代化”这个词,但它到底意味着什么呢?
应用现代化是指更新、升级或改造现有软件应用程序的过程,以提高其功能、性能、安全性和用户体验。
对于大多数并非“天生”数字化的公司——因此无法充分利用所有最新的云技术——是否进行现代化几乎别无选择。在基础设施、技术、应用程序和软件开发方法上停滞不前,意味着在竞争中输给更加敏捷、响应迅速和创新的竞争对手。如今的大型传统企业必须迅速发展,以保持竞争力和相关性。
应用现代化有多种策略,取决于组织的目标。其中许多策略只关注重新托管或“提升和转移”,以减少代码更改或重新平台化,这介于重新托管和重构之间。
在我们深入探讨如何实现应用现代化之前,不要忘记在应用程序开发方式上还存在一种文化或思维方式的转变。团队需要更加协作,并使用能够加快构建和交付过程而不牺牲质量的工具和流程。这与日益流行的以 API 为首的模式有很多相似之处。
应用现代化的关键技术和模式
应用现代化的最常见模式涉及重构和将一个整体应用程序拆分为一系列小型、松耦合的微服务。这个过程可能看起来令人生畏。然而,有方法可以系统地完成这一工作。
一种方法是使用“扼杀者模式”,而不是一次性将整体应用程序拆分。这种模式是指将应用程序一点一点地拆分,首先提取最容易、最有价值的部分,直到整体应用程序不复存在。
将应用程序重构为微服务通常包括重新平台化或重新托管应用程序。虽然可以通过简单地提升和转移应用程序来减少编码量,但更常见的是,通过重构应用程序以使其更加云原生(利用包括容器和 Kubernetes 在内的云模型)来发现价值。
现代化的另一种方法可以是保留应用程序,并通过 API 安全地公开其功能或数据。这种方法更多地依赖于集成而非迁移,并使新的云原生应用程序能够利用现有系统和数据的功能。
结论
在这篇博文中,我们定义了什么是分布式系统、为什么要使用它,并简要介绍了几种分布式应用程序的类型。接着,我们讨论了分布式系统的优缺点,最后探讨了如何在应用现代化中利用分布式架构。想要深入了解 Kong 在分布式架构中的应用,请联系我们的中国合作伙伴咨询 consultant@gingxing.com。
版权声明: 本文为 InfoQ 作者【Gingxing】的原创文章。
原文链接:【http://xie.infoq.cn/article/9a5a5a548c9095f1b54b46461】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论