架构之道:合作与分工的核心架构模式

在多台计算机需要协作共同完成任务的情况下,通常会采用客户端-服务器模型。这个模型广泛应用于各种计算机系统,包括计算机网络、数据库系统、操作系统、互联网应用等。

1、客户端计算架构的演变

客户端-服务器架构是架构模式和网络的关键部分。一开始,它很简单,主要用于数据交换和基础计算,服务器是主要的处理中心,而客户端的工作相对较少。但随着时间的推移,这种架构逐渐发展成为更复杂和多样化的形式,以满足不断增长的技术需求和挑战(如图5-6所示)。

下面,我们来看看客户端-服务器架构是怎样发展的。

1.1、大型机

在七八十年代的计算环境,就像一个大老板(大型计算机)和一群小秘书(哑终端)的工作方式。这个大老板做所有的重要工作,而小秘书们只是把信息传递给大老板处理。但慢慢地,这些小秘书(个人电脑)开始有了自己处理事情的能力,虽然还是要依赖大老板完成大部分工作。就像一个公司逐渐让员工独立处理事务,一些组织开始尝试让大老板和小秘书共同分担工作。这就是客户端-服务器架构的起步,它让工作更有效率,每个人都有自己的任务。

1.2、客户端-服务器架构

单层架构

在单层架构中,展示层、应用层和数据库层都集中在同一台机器上,如图5-7所示。这种架构的应用通常被称为单机应用程序。例如,微软Office和MP3播放器就是典型的单层架构应用。然而,在实际的生产环境中,这种架构的使用相对较少。

双层架构(客户端-服务器架构)

在双层架构结构中,第一层是客户端,第二层是服务器。应用逻辑可能分布在客户端的用户界面(UI)或数据库服务器中,也可能同时存在于两者之中。这意味着在客户端和服务器之间不存在中间件。具体可参见图5-8所示。

三层架构(基于Web的架构)

在三层架构中,系统被划分为客户端层、应用层和数据库层三个独立的层次。这种架构的特点是各层之间的线性连接,即所有通信都必须经过中间层处理。具体来说,无论是请求还是响应,都由位于中间的应用层接收和转发,然后才能到达客户端或服务器端。在这种架构下,客户端主要负责展示层的处理,应用服务器则管理应用层,而数据库服务器专注于数据库层。有关这种架构的具体布局,可以参见图 5-9。

N 层架构(多层架构)

在多层架构中,展示、应用处理和数据操控功能在物理层面上是分开的,形成了清晰的层次结构。其中,最常见的多层架构形式便是三层架构。

1.3、面向服务模式

在20世纪90年代中期,随着万维网(WWW)开始引起广泛关注,最初的万维网采用了三层架构。在这种架构中,网络浏览器充当客户端,而Web和应用服务器则托管所有的处理和逻辑。与此同时,面向服务的架构(SOA)也开始崭露头角。

**面向服务的架构(SOA)**是一种设计原则,使得应用程序能够利用网络中的服务。在SOA(如图5-10所示)中,主要有两种角色:

  1. 服务提供者:负责维护服务,并向消费者提供这些服务。
  2. 服务消费者:在服务目录中寻找服务的元数据,并开发客户端组件应用程序,以绑定和使用服务提供者提供的服务。

1.4、云服务模式

在21世纪的前十年,随着基于云的托管服务的兴起,开发者开始倾向于使用这些服务,因为它们提供了根据需求进行弹性伸缩的资源。云服务包含三种不同的托管选项:

  • 基础设施即服务(IaaS) :在这种模式下,开发者需关注应用程序、操作系统、数据和中间件等方面,而云服务则负责硬件、操作系统和网络等基础设施层面的事务。
  • 平台即服务(PaaS) :开发者主要关注应用程序和数据,其他如运行环境、操作系统等则由云服务提供和管理。
  • 软件即服务(SaaS) :这种模式允许在云中托管整个应用程序,用户通过网络访问。

如图5-11所示展示了IaaS、PaaS和SaaS这三种服务模式之间的区别。

1.5、微服务模式

在微服务架构方式下,应用服务被构建为一组松散耦合的服务。每个服务都运行在自己的进程中,并通过轻量级协议与其他客户端或服务进行通信。这种方式特别适合于采用敏捷开发方法的小型项目。有时,人们将其视为面向服务的架构(SOA)的一种变体,因为应用服务是由多个小型服务组成的,而不是作为一个单一的大型应用服务(单体应用服务)。Spring Boot、Swagger和Jersey等框架通常被用来构建微服务架构。如图5-12展示了单体应用服务与微服务架构之间的区别。

2、客户端和服务器通信

在理解客户端和服务器之间的通信之前,我们先弄清楚以下几个术语(如图5-13所示):

  • 请求(Requests) :当客户端需要服务器提供数据(如文件)或通知服务器发生某些活动(例如用户尝试登录)时,它会发送一个请求。
  • 响应(Response) :响应是服务器发回给客户端的信息,用于回应客户端的请求。比如,响应可能包含身份验证的结果。
  • 客户端(Client) :客户端是发起请求的那一方。通常,客户端是一款需要从服务器获取信息或资源的软件应用,比如网络浏览器或电子邮件客户端。客户端发送请求给服务器,并等待服务器回应。
  • 服务端(Service) :服务端则是接收并响应客户端请求的那一方。它提供客户端所需的资源或信息。服务器通常位于远程计算机上,并通过网络进行访问。

需要注意的是,一台计算机可以同时运行Web服务器和文件服务器软件,以应对不同客户端提出的不同类型的请求,并提供相应的数据。

在客户端和服务器之间,信息的交换遵循一种叫做请求(requests)-响应(Response)消息模式。这个过程是这样的:客户端发出请求,服务器接收到请求之后,返回一个响应。这种消息的交换是进程间通信的一个典型例子。服务器组件不断地监听来自客户端的请求,一旦收到请求,服务器就会处理这个请求,然后把响应发送回客户端。根据不同的需求,服务器可以被进一步分为无状态服务器和有状态服务器。

  • 有状态:有状态服务器会记住客户端从一个请求到下一个请求之间的数据(状态),存储会话状态,并跟踪诸如哪些客户端打开了哪些文件、文件的当前读写指针位置、哪些文件被哪些客户端锁定等信息。
  • 无状态:无状态服务器则不保留任何状态信息,不存储任何会话状态,这意味着每个客户端的请求都是独立处理的,不属于任何新的或现有的会话。

为了能够同时处理多个客户端的请求,服务器常常采用主从模式。在这种模式下,主服务器不断监听客户端的请求。当收到一个请求时,主服务器会创建一个从服务器来处理这个请求,同时自己继续监听其他请求。与此同时,从服务器负责执行与客户端的所有后续通信。

如图5-14所示可以清晰地解释这种典型的客户端-服务器交互过程。

3、浏览器通常如何与服务器交互

  • 首先,用户在浏览器中输入一个网站或文件的URL(统一资源定位符)。接着,浏览器向DNS(域名系统)服务器发送一个请求(如图5-15所示)。
  • DNS服务器的任务是查找并确定网站服务器的具体地址。
  • 当DNS服务器找到了网站服务器的地址后,它会回应并提供该网站服务器的IP地址。
  • 有了网站服务器的IP地址(由DNS服务器提供)之后,浏览器就会向该IP发送一个HTTP/HTTPS的请求。
  • 服务器接收到请求后,会发送回网站所需的文件。
  • 最后,浏览器将这些文件进行渲染,然后网站内容就会在用户面前显示出来。这个渲染过程是通过DOM(文档对象模型)解释器、CSS解释器和JS引擎共同完成的,这些组件统称为JIT(即时编译器)。

4、客户端-服务器模型的优点

  • 中心化:客户端-服务器网络的一个主要优势在于集中控制。所有关键信息都储存在一个地方,这对网络管理员来说尤其有利,因为他们可以完全控制管理和行政工作。网络中的任何问题都可以在同一个地方得到解决。同时,更新资源和数据也变得更加简单和高效。
  • 安全性:在客户端-服务器网络的集中式架构中,数据的安全性得到了很好的保障。可以实施访问控制,确保只有授权用户可以访问,比如使用用户名和密码等凭证。此外,如果数据丢失,可以从中央备份轻松恢复。
  • 可伸缩性:客户端-服务器网络具备很高的可伸缩性。用户可以根据需要增加资源,如增加客户端和服务器。扩展服务器的规模基本上不会导致中断,并且即使网络规模扩大,也不会有获取网络资源权限的问题,因为服务器是集中管理的。因此,所需的配置工作量较小。
  • 易于管理:所有文件都存储在中心服务器上,使得文件管理变得更加容易。客户端-服务器网络能够方便地追踪和定位所需文件的记录。
  • 可访问性:在客户端-服务器网络中,无论位置或平台如何,每个客户端都能登录系统。这使得所有用户都可以轻松访问他们的企业信息,而不需要依赖特定的终端模式或处理器。

5、客户端-服务器模型的缺点

  • 流量拥堵:客户端-服务器网络的一个主要弱点是流量拥堵。如果过多的客户端同时向同一服务器发送请求,可能会导致服务器崩溃或连接速度降低。服务器过载会在访问信息时带来各种问题。
  • 健壮性差:我们知道,客户端-服务器网络是集中式的。如果主服务器出现故障或受到干扰,整个网络可能会中断。因此,这种网络结构缺乏健壮性。
  • 成本高:在客户端-服务器网络中,设置和维护服务器有时是一笔昂贵的开销。由于这类网络功能强大,其购买成本可能相当高,这可能不是所有用户都负担得起的。
  • 难****维护:服务器一旦开始运行,通常会持续不断地工作。这就意味着每个服务器都需要得到适当的关注。任何问题的出现都需要立即解决,不能有任何延误。因此,应该由专业的网络管理员来负责服务器的维护。

6、小结

客户端-服务器模型是网络通信的一个基础模式。它描述了两台计算机------客户端和服务器------如何通过网络进行交互。在这个模型中,客户端是发起请求的计算机。当客户端需要某种服务或数据时,它向服务器发送一个请求。而服务器,则是接收并响应这些请求的计算机。

有些情况下,服务器在处理客户端的请求时,可能需要查询数据库以获取所需的信息。这时,服务器本身就扮演了客户端的角色,向数据库服务器发送请求。数据库服务器处理这些请求,并将所需的信息回送给原服务器。然后,原服务器再以此信息响应最初的客户端请求。在这个过程中,数据库可以被视为一种特殊类型的服务器,专门用于存储和管理数据。

相关推荐
期待のcode12 分钟前
Springboot配置属性绑定
java·spring boot·后端
海上彼尚17 分钟前
Go之路 - 6.go的指针
开发语言·后端·golang
云宏信息18 分钟前
运维效率提升实战:如何用轻量化云管平台统一纳管与自动化日常资源操作
运维·服务器·网络·架构·云计算
hour_go21 分钟前
微服务架构的故障演练数字化:方法解析与实践优势
微服务·云原生·架构
LYFlied1 小时前
在AI时代,前端开发者如何构建全栈开发视野与核心竞争力
前端·人工智能·后端·ai·全栈
用户47949283569151 小时前
我只是给Typescript提个 typo PR,为什么还要签协议?
前端·后端·开源
天天进步20151 小时前
【Cradle 源码解析一】架构总览与通用计算机控制 (GCC) 的实现思路
架构
Surpass余sheng军1 小时前
AI 时代下的网关技术选型
人工智能·经验分享·分布式·后端·学习·架构
JosieBook1 小时前
【Spring Boot】Spring Boot调用 WebService 接口的两种方式:动态调用 vs 静态调用 亲测有效
java·spring boot·后端
喵个咪2 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:基于 GORM 从零实现新服务
后端·go·orm