文档章节

Spring 源码分析(四) ——MVC(一)Web 基础

水门-kay
 水门-kay
发布于 2016/03/21 23:21
字数 2137
阅读 1580
收藏 13

软件的分类

        软件(Software)是一系列按照特定顺序组织的计算机数据和指示,是计算机中的非有形部分。而计算机中的有形部分称为硬件,由计算机的外壳及各零件及电路所组成。计算机软件需要有硬件才能运作,反之亦然,软件和硬件都无法在不互相配合的情况下进行实际的运作。

        一般来说,计算机软件被分为编程语言、系统软件、应用软件和介于两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同应用软件根据用户和所服务的领域提供不同的功能,也可以根据软件结构分成:单机类型、C/S类型和B/S类型三种不同的类型。因为网站架构才是我们这次研究的重点,所以我们就对应用软件进行专门分析。

        基本上不需要联网的应用软件,都可以归类为单机类型,比如我们常见的Office、搜狗输入法、单机游戏等等。这种软件类型简单、使用起来也非常广泛,可以说是应用软件的鼻祖。

        而有些应用软件需要将应用程序中的数据进行统一管理,所以我们必须将保存数据的数据库统一放在一台主机中。这样所有的用户就可以从同一台主机中获取数据了,这时就分客户端和服务端了。用户安装的软件叫客户端,统一管理数据的主机就叫服务端,而这种软件结构就叫C/S结构。通常情况下,如果将业务逻辑全部都放在服务端进行统一处理就可以获得更好的安全性和稳定性而且软件升级也比较容易,但这会加重服务端的负载。反之亦然,如果将业务逻辑放在客户端这样就可以降低负载,但安全性、稳定性以及软件升级都成了问题。所以,在C/S结构中合理的进行的业务逻辑的分配就是一件仁者见仁智者见智的事情了。下面是C/S的结构图:

        其实,C/S结构已经完成了网络通信了,但为了解决刚才所提到了不足,设计者将客户端进行了统一的整合,而且默认安装在客户的计算机中,这就是"浏览器"。客户通过浏览器访问不同的页面,进而完成不同业务逻辑并且进行完成数据交互,这种软件结构就是B/S结构。下面就是B/S的结构图:

        其实,这三种结构谈不上谁好谁坏,一般根据需求而定。B/S结构开发简单、使用方便而且功能强大,所以使用最为广泛。但单机结构的软件基本上是每台计算机上都会有。而C/S结构虽然比B/S复杂,但灵活性和处理效率都要比B/S高出许多,所以现在一些大型的软件和游戏基本使用的还是C/S结构。下面我们就来论述一下关于B/S结构的基础知识。


网络传输模型                                         

        在讨论基础架构前,我们我们必须先了解一下底层网络传输体系,毕竟网站是建立在互联网之上的,有些专门地通讯协议也需要特别注意一下。一般网络传输的分解方式有两种:一种是 OSI 参考模型,一种是 TCP/IP 参考模型。下面是它们的分成方法及对应关系图:

        OSI 参考模型一共分为 7 层,不过它主要用于教学,所以笔者不做阐述。实际使用中更多的是 TCP/IP 的 4 层模型。对于 TCP/IP 的 4 层模型可以简单地理解为:

                网络接入层:将需要互相连接的节点接入网络中,从而为数据传输提供条件。

                网际互联层:找到要传输数据的目标节点。

                传输层:数据传输数据。

                应用层:使用接收到的数据。

        下面是 TCP/IP 4 层模型的层次图:

        对于互联网这种使用广泛的东西,标准是非常重要的,但是在传输参考模型中,这种制度不叫标准而是协议。在 TCP/TP 模型中网络接入层是没有协议的,而重要的协议,在网络互联层是 IP 协议,传输层是 TCP 协议,应用层是 HTTP 协议,当然还有 DNS 协议和基于 HTTP 上层的相关规范也就是 Web 中的 Servlet。 


网站架构的演化

        我们都知道现在的 Web 软件都是基于 B/S 结构的,所以将 B/S 结构做一些小小的改动,就是一个小型网站的架构,当然是最原始阶段的网站架构。小型网站最初的时候并没有多少访问量,一台应用服务器或者将应用服务器拆分成应用服务器和数据库服务器,基本就已经很够用了。下面就是最简单的网站架构图:

        将应用程序、文件等等放在一台应用服务器上,而数据库则在另一台数据库服务器上。通常服务器操作系统是 Linux,应用程序使用 PHP 或者 Java 进行开发,然后用 Tomcat 或者 Apache 进行部署,数据库使用 MySQL,最后汇集各种免费开源软件以及廉价的服务器就可以开始运营了。

        当然,随着业务规模的发展,服务器肯定不够用的,这时就需要添加新的服务器,来进行应用与文件的分离了,并且需要遵循“二八原则”添加专门地缓存服务器来改善网站的性能。但如果出现了高并发加海量数据的情况,最常用的手段是使用集群加数据库读写分离的方法来解决,当然,使用反向代理和 CDN 提升网站性能也是必不可少的环节。至此,一个基本分布式系统就算是建立起来了。当然,这样的架构其实还是可以继续进行优化的,比如使用非关系型数据库、进行业务拆分以及使用分布式服务等等。这个世界没有哪个网站从诞生开始就是大型网站,所以一味地追求网站架构是一种得不偿失的行为。但随着业务的增长,推动网站架构的演进还是非常有必要的,因为这样你才能随心所欲的去应对各种情况。

        性能、可用性、伸缩性、扩展性以及安全性是网站架构最核心的几个要素,基本这些问题解决了,网站架构的大部分困难也就克服了。此外,这个世界没有哪两家公司的业务情况是完全相同的,所以在架构演化的道路上绝对不能盲从。不要受大公司以及从大公司挖过来的技术高手的太大影响,从而偏离了原先的架构演化路线。大公司的经验和成功模式固然很重要,但盲目借鉴,可能会偏离符合实际的架构演化道路。不能为了技术而技术,一味追求最新技术,只会让架构之路越走越难。最后有时候,问题并不是出在它的系统架构,而是业务架构出了问题,所以,合理地调整业务需求往往比修改架构更为有效。

        总的来说,在网站架构演化的过程中,追求技术是为了扩展业务边际,架构设计与业务一定是相辅相成的。



——水门(2016年3月写于武汉)

© 著作权归作者所有

水门-kay
粉丝 460
博文 19
码字总数 59660
作品 0
杭州
后端工程师
私信 提问
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致Daddy
2018/08/03
19.6K
1
Spring MVC 原理探秘 - 容器的创建过程

1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的。Spring MVC 可对外提供服务时,说明其已经处于了就绪状态。再次之前,Spring MVC 需要进行一系列的初始化操作。...

coolblog.xyz
2018/07/03
0
0
Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 然而...

长平狐
2012/11/12
128
0
Spring 源码分析(四) ——MVC(三)源码入口

测试代码 框架配置 现在就从 SpringMVC 的网站开发开始。当然,最先是用 Mavan 下载所需的 jar。下面是 pom.xml 配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht......

水门-kay
2016/03/28
1K
0
史上最简单的 Spring MVC 教程

1 前言   spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,而 Spring MVC 就是其中最优秀的 MVC ...

qq_35246620
2017/01/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Java并发编程的艺术》第二章--2.2--synchronized的实现原理与应用

在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但 是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了 Java中的每一个对象...

我是警察叔叔
21分钟前
5
0
常见排序算法及对应的时间复杂度和空间复杂度

本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门:https://mp.weixin.qq.com/s/Jzdd...

李红欧巴
25分钟前
4
0
时间和空间的完美统一!阿里云时空数据库正式商业化

经过一段时间公测,得到广大客户的热烈支持,阿里云时空数据库已经于2019年9月10日正式商业化售卖! 产品介绍 时空数据库能够存储、管理包括时间序列以及空间地理位置相关的数据。我们的社会...

阿里云官方博客
29分钟前
3
0
什么是公有云、私有云和混合云云桌面,看完后涨知识了

前不久听到有用户在抱怨说“我就想部署个云桌面而已,怎么还有公有云、私有云和混合云这么个说法的,搞得我都混淆了”,那么到底什么是公有云、私有云和混合云云桌面的呢,他们的优缺点又是怎...

GZASD
32分钟前
4
0
6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

导读:随着 K8s 不断更新迭代,使用 K8s 日志系统建设的开发者,逐渐遇到了各种复杂的问题和挑战。本篇文章中,作者结合自己多年经验,分析 K8s 日志系统建设难点,期待为读者提供有益参考。...

大涛学长
33分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部