架构·Client-Server

1、目录

  • 概述
  • 两层架构
  • 三层架构
  • MVC 架构

2、概述

一个联网应用程序总是分布在两个或多个主机之间,这就衍生了我们该如何在多个主机之间划分功能的问题。

我们从两个方面关注该问题: 1、技术推理。 2、组织如何管理其网络计算基础架构和联网应用程序。

3、两层架构

有两个基本的替代方案如下图所示,C/S 架构P2P 架构

*C/S 架构 与 P2P 架构

3.1、 C/S 架构

C/S 应用程序 一部分是由 以与客户端或用户交互为基础的主机,另一部分主机则是专门用于管理大型数据存储库,处理应用特有的数据和逻辑的服务器。

这给 C/S 架构引入了不对称的功能性,客户端需要向服务端发起请求,而服务端需要满足(答复)客户端的请求。C/S 架构适合应用于在服务器上发布的信息管理应用程序。OLTP 应用则是传统的 C/S 架构中的良好示例。

3.2、P2P 架构

这是 C/S 架构的替代架构,P2P架构不设立服务端,只有客户端。这种架构对于一些去中心化的即时通信应用是有吸引力的。P2P 很适用于语音或视频会议的场景。P2P 的很明显的特征是功能的对称性。

一般来说,可以将C/S和P2P架构混合在一起。举例,许多直接即时通讯社交应用涉及信息管理和多用户交互方面。一个客户端主机可以同时作为 Client 或 Peer,这取决于该主机在应用程序的角色定义。

4、三层架构

二层结构无法识别包含关键数据库一类的特殊需求,典型的例子是 OLTP。希望将这些关键任务数据库集成到C / S应用程序中,而不会牺牲其期望的质量。

下面将展示三层的 C/S 架构:

  • 第一层:客户端(用户)。
  • 第二层:服务端(用于存放应用程序的逻辑)。
  • 第三层:数据库(不同的应用程序所需要的共享数据)。

三层的 C/S 架构

这种3层架构的动机包括:

  • 表现:专注于单个用户
  • 应用程序逻辑:支持多用户,通过添加多台服务器来支持更多用户的成本是较低的。
  • 关键共享数据:支持多个应用程序。

这三层的 C/S 架构字啊每层之间都是n…1的关系。显然三层架构比两层架构具备更高的扩展性,向客户端隐藏的异构数据库支持以及提供了不同的通信协议的更好支持。

5、MVC 架构

模型 - 视图 - 控制器(MVC)应用程序架构是用于分析分布式应用程序的功能的流行模型。这种抽象有助于将应用程序分解成逻辑组件,以实现更容易/更清晰的分布式实现。

MVC 划分在监视和处理数据中涉及的对象之间的功能,以便最小化这些对象之间的耦合度,并因此将这些对象映射在多层架构上。

最初 MVC 用户解耦:输入、数据处理、输出 UI 界面。但是,将此模型映射到多层网站或企业应用程序也很简单。

MVC

  • 模型(Model):操作数据。

当 Model 层数据变更时通知 View 。 它允许 Controller 访问 Model 封装的方法。

  • 视图(View):将 Model 提供的内容渲染出来。

它可以查询Model关于数据的模型并指定如何呈现它。

  • 控制器(Controller):定义应用程序的行为。

它将用户手势映射到要由Model执行的操作。在标准的 GUI 客户端,用户手势可以是按压按钮。在 Web 环境,它可以是发起一次 HTTP GET/POST 请求。通常一个Controller,表示一组相关的功能。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏不止思考

不懂高性能的负载均衡设计?没关系,架构师带你飞

在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,...

922
来自专栏阮一峰的网络日志

谷歌的代码管理

谷歌和 Facebook 都只有一个代码仓库,全公司的代码都放在这个库里。 我一直很困惑,为什么要这样做,不同语言的项目放在一个库有什么好处? 最新一期的《AC...

3818
来自专栏java工会

BAT的大牛都经常犯的逻辑错误,看看你有没有

编程的时候经常会遇到一类错误,就是明明代码没有问题。编译也可以通过,但是运行的时候就会抛异常,这就是所谓的逻辑错误了。编译时的错误很好发现,因为编辑器会友好的提...

823
来自专栏Java职业技术分享

不懂高性能的负载均衡设计?没关系,架构师带你飞

在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,...

862
来自专栏维C果糖

敲开 GitHub 的大门 · 注册账号

在「初识 GitHub · 简介篇」一文中,我们已经初步了解了 GitHub,里面有众多的业界大神、有丰富的学习资料、有著名的开源项目代码,我们也可以在 Git...

2056
来自专栏腾讯移动品质中心TMQ的专栏

抽丝剥茧定位Windows客户端CPU占用问题

摘要 本文主要展示了从电脑管家CPU占用过高问题发现到解决的全过程。包括分析问题的思路、解决问题的方法、压力测试的设计、优化前后数据对比等。同时,在末尾分享了自...

2805
来自专栏IT派

你还在付费爱奇艺VIP?神级程序员教你用Python任意下!

我相信如果看电影的都知道,不管是爱奇艺还是腾讯视频还是优酷很多的电影电视都是需要VIP的,但是为了看这么一个电视或者电影开个vip又不是很划算,小编今天教大家如...

1724
来自专栏开心的学习之路

从零开始搭建「图像处理实验」平台(React&Flask&MongoDB)

为了争取提前毕业,最近需要做大量图像处理的实验,改代码、调参、存结果,由于专注于实验,所以丝毫没顾及代码质量,又懒得重构,导致今天写的代码明天就忘了什么意思,加...

1366
来自专栏编程之路

快速搭建自己的直播服务器,完成属于你直播服务

这里我们选用开源srs流媒体服务器https://github.com/ossrs/srs,有兴趣的同学也可选用Adobe Media Server 5,原理都...

1.8K2
来自专栏纯洁的微笑

不懂高性能的负载均衡设计?没关系,架构师带你飞

在软件系统的架构设计中,对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案。负载均衡本质上是用于将用户流量进行均衡减压的,因此在互联网的大流量项目中,...

802

扫码关注云+社区