Server-Client二层架构简单说明

核心定义

Server-Client形式的二层架构 ,通常简称为 C/S架构两层架构,是一种将系统功能或任务分配到两个不同逻辑单元上的软件架构模型:

  1. 客户端 :负责用户界面业务逻辑的呈现与交互。

  2. 服务器端 :负责数据存储管理,并提供核心的数据服务。

这里的"二层"指的是两个主要的、逻辑上分离的层次:客户端层服务器层(或数据服务层)。


两层架构的详细分解

1. 客户端
  • 角色:前端。它是用户直接与之交互的部分。

  • 主要职责

    • 展示用户界面:提供图形界面、表单、按钮等,用于输入和显示数据。

    • 执行业务逻辑:处理用户输入的数据验证、执行计算、实现应用程序的流程控制等。

    • 向服务器发送请求:根据用户操作,生成具体的请求(如查询、更新、删除数据),并发送给服务器。

    • 接收并处理服务器响应:接收服务器返回的数据或结果,并将其展示给用户。

  • 特点:通常被称为"胖客户端"或"富客户端",因为它承担了相当一部分的计算和业务处理任务。

2. 服务器端
  • 角色:后端。它是系统的核心数据和处理中心。

  • 主要职责

    • 数据管理:存储、组织和维护所有数据,通常通过数据库管理系统实现。

    • 处理客户端请求:接收来自客户端的请求,执行相应的数据库操作(如SQL查询)。

    • 确保数据一致性和安全性:管理用户权限、处理并发访问、保证数据的完整性和安全性。

    • 返回请求结果:将数据库操作的结果(数据集、成功/失败状态)返回给客户端。

  • 特点:通常被称为"数据库服务器",因为它的核心功能是响应数据请求。


工作原理(交互流程)

一个典型的交互流程如下:

  1. 请求:用户在客户端软件上进行操作(例如,点击"查询所有订单"按钮)。

  2. 处理与发送:客户端应用程序执行业务逻辑(如验证查询条件),然后将格式化好的请求(如一条SQL语句)通过网络发送给服务器。

  3. 服务器处理:服务器接收请求,验证其合法性,然后在数据库上执行相应的操作。

  4. 数据库响应:数据库完成操作后,将结果(例如,一组订单记录)返回给服务器进程。

  5. 服务器响应:服务器将数据结果打包,通过网络发送回客户端。

  6. 客户端展示:客户端接收数据,并根据业务逻辑进行处理,最后在用户界面上将结果展示出来(例如,在表格中显示订单列表)。


典型例子

  • 早期的桌面应用程序

    • MySQL客户端工具:你在自己电脑上安装一个客户端软件,它直接连接到远端的MySQL数据库服务器。

    • 早期的银行柜台系统:柜员使用的桌面程序直接连接银行的后台数据库服务器。

    • 大量企业内部管理系统:如库存管理、人事管理系统等。


优势与劣势

优势:
  1. 响应速度快:由于大部分业务逻辑在客户端处理,只有数据交互需要网络传输,所以对用户操作的响应通常很快。

  2. 界面丰富:客户端可以利用操作系统的全部功能,开发出功能强大、交互性好的用户界面。

  3. 充分利用客户端计算能力:将计算任务分摊到各个客户端,减轻了服务器的压力。

劣势:
  1. 部署和维护困难 :这是最大的缺点。任何业务逻辑的更新都需要在每一个客户端上进行安装和升级,对于用户数量多、分布广的系统来说,成本极高。

  2. 客户端负担重:客户端需要较高的硬件配置,并且安装过程复杂。

  3. 可伸缩性差:服务器通常直接与每个客户端建立连接,当客户端数量巨大时,服务器可能成为瓶颈。业务逻辑分散在客户端,难以集中优化和扩展。

  4. 安全性挑战:业务逻辑暴露在客户端,更容易被反编译和篡改,对数据安全构成威胁。


与现代三层/多层架构的对比

为了解决二层架构的问题,现代系统普遍采用三层架构

  • 表示层:只负责用户界面,相当于"瘦客户端"(如Web浏览器)。

  • 业务逻辑层 :专门处理应用程序的核心业务规则和逻辑。这是从二层架构的客户端和服务器中分离出来的独立一层。

  • 数据访问层:负责数据存储,与二层架构的服务器端类似。

核心区别 :二层架构将业务逻辑主要放在客户端,而三层架构将其抽离到一个独立的中间层。这使得系统更易于维护、升级和扩展。今天的Web应用(浏览器-Web服务器-数据库)就是典型的三层架构。

总结

Server-Client形式的二层架构是一种经典的分布式计算模型,它明确划分了客户端(负责UI和逻辑)和服务器(负责数据)的职责。虽然因其部署维护困难等问题,在Web时代逐渐被三层/多层架构所取代,但理解它对于学习系统架构的演变至关重要,并且在某些对界面性能和离线操作要求高的特定场景下,它依然有其用武之地。

相关推荐
CCPC不拿奖不改名1 小时前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试
程序员飞哥1 小时前
几年没面试,这次真的被打醒了!
java·面试
乌暮2 小时前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·开发语言·后端·学习·面试·java-ee
CCPC不拿奖不改名2 小时前
计算机网络:电脑访问网站的完整流程详解+面试习题
开发语言·python·学习·计算机网络·面试·职场和发展
鹏程十八少2 小时前
破解Android悬浮窗遮挡无障碍服务难题:我在可见即可说上踩过的坑
android·前端·面试
Moment2 小时前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
a程序小傲3 小时前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
辞砚技术录15 小时前
MySQL面试题——联合索引
数据库·面试
小L~~~15 小时前
绿盟校招C++研发工程师一面复盘
c++·面试