发布于 2026-01-06 4 阅读
0

为什么要考虑分发您的 Web 应用程序?

为什么要考虑分发您的 Web 应用程序? 

欢迎在推特上关注我,期待您的反馈和评论。

分布式系统、流处理和大数据系统频频登上新闻头条。但是,我们为什么需要它们呢? 
  • 构建分布式系统的 4 个理由以及 Kubernetes 如何帮助我们入门。 

什么是Web应用程序?

Web应用程序是一种可以通过网络访问的应用程序,通常是通过Web浏览器访问。它包含服务器端和客户端。客户端包含用户界面和客户端逻辑。服务器端通常包含数据库、一些逻辑,并且可以调用其他服务器。在服务器端,我们通常会定义一个API,供服务器和客户端通信。API是它们之间进行通信的语言。服务器也可以使用相同的API与其他服务器通信。定义API的方法有很多种,我最喜欢的是Petr Gazarov提出的方法。 

这些都很好,但是什么是分发型 Web 应用程序?我为什么需要它? 

分布式系统是指由分布在多台机器上的组件组成的系统,这些组件通过网络相互传递消息进行通信。这些组件通常位于不同的计算机网络中,并通过消息传递进行通信。消息传递协议及其通信方式由专门为此构建的 API 定义。它们利用消息系统,通过通信模型协调彼此的操作。一种常见的通信模型是主从模型。其中,一个主节点控制流程,多个从节点执行主节点分配的任务。这种通信模型在 Apache Spark 中实现,称为驱动程序和执行器,其中驱动程序是主节点,执行器是从节点。 

构建分布式系统有多种方法,通信模型也多种多样,例如客户端-服务器架构三层架构n层架构点对点架构;耦合方式也有多种分类:松耦合紧耦合。但今天,我们将重点讨论其背后的原因。 

那么,我们为什么需要分布式系统呢?

假设我们开发一个 Web 应用。起初我们服务 100 位满意的用户,随着产品发展壮大,一年后我们需要服务 1000 万用户。我们希望尽可能快速地服务这些用户,避免任何延迟。此外,我们希望应用始终可用,不受任何影响。而且,我们希望应用能够完全实现其预期功能,也就是说,我们需要可靠性。

构建分布式系统的 4 个理由:

1 - 可用性

高可用性是指系统在任何给定时间点都可用的概率。它确保当一台服务器发生故障时,有另一台服务器可以立即替换它,而不会让用户察觉到任何延迟。更重要的是,持续监控服务器,确保它能够响应客户的请求。多个组件随时准备承担不同的角色,有助于实现系统的高可用性。

2 - 可扩展性

可扩展性包含多个组成部分,例如可扩展数据库、能够存储和管理PB级数据的系统,以及能够处理数百万并发请求的系统。在这些情况下,我们都可以采用分布式方法来构建一个可以根据需要进行扩展的系统。如果我们从一开始就将系统架构设计为可扩展的,那么向系统中添加组件应该不会很困难。

3 - 可靠性

系统产生正确输出的概率。可靠的系统不会默默地继续运行并交付缺失或损坏的数据。相反,它会检测到故障,发出警报,并在可能的情况下进行恢复。构建以可靠性为核心的系统,旨在确保我们的客户能够信赖系统提供的响应和数据。这些数据可能包括他们赖以开展业务的数据,例如业务发展分析、金融机构的风险管理分析等等。通过提高系统的可靠性,我们可以降低系统在特定时间段内发生故障的概率。我们通过增加组件的冗余或复制,并对其进行高可用性管理来实现这一点,从而提高系统的可靠性。

4 - 透明度

客户并不会察觉到分布式系统的存在,因为他们与产品的交互方式与集中式系统完全相同。这意味着系统的分布式特性与客户是完全隔离的。我们获得了分布式系统的所有优势,而客户却毫无感觉。

既然我们已经了解了“为什么”,那么让我们来看看“做什么”,最简单的入手方法是什么?

替代文字

像AKS这样的托管 Kubernetes 服务可以为构建分布式系统提供坚实的平台。我们定义节点数量——即 Azure 虚拟机的数量,而 Azure Kubernetes 服务负责管理控制平面(或主节点),这些节点由服务免费提供。图中展示了我们 Kubernetes 集群工作节点的简化示意图,这些节点托管着我们的客户将要访问的 Web 应用程序。客户请求由负载均衡器接收,并传递到我们的 Web 应用程序,该应用程序的组件分布在我们的工作节点池中。这些组件可以复制,并且我们的节点池可以根据负载情况进行扩展或缩减。

这篇文章中,你将了解到如何创建分布式Web应用程序的所有细节 :)

参考:

文章来源:https://dev.to/azure/why-should-i-distribute-my-web-app-1kk8