1 早期的web服务

2 CGI程序的出现、发展、凋零到MVC的兴起

  • CGI:通用网关接口技术。
  • 随着CGI技术的出现,web服务端可以通过不同的用户请求产生动态页面内容。

  • web服务器将请求数据交给CGI程序,CGI程序进行运算处理,生成HTML输出,通过web服务器返回给浏览器。早期的CGI编程语言是perl,高效便捷的开发特性使其成为当时许多网站开发的首选开发语言。
  • CGI程序的缺点:web服务器通过启动独立进程的方式调用CGI程序,消耗许多不必要的系统资源。而目前流行的java Servlet则是以线程方式在java web容器中调用Servlet,和CGI方式相比,消耗的资源更少。这就是CGI技术开始消失的主要原因。
  • 一般来说CGI技术(广义上讲Java Servlet)被称为脚本模式,CGI程序需要解析HTTP请求,处理业务逻辑,并在输出流中构造响应信息的HTML。这种技术的优点和缺点是同一个特性-- 可以在CGI程序中做任何事情。CGI程序在获得最大处理能力的同时,也给开发人员带来了麻烦:负责编写业务逻辑程序的程序员不擅长处理HTML,而负责页面构造的美工人员(现在是前端开发工程师)则对程序束手无策。同样,维护这样的程序就是个噩梦,业务逻辑和页面语言耦合在一起,让人无法下手。
  • PHP及其后来的ASP、JSP的出现改善了这一局面,与CGI在程序中输出HTML流正好相反,开发人员可以在HTML中嵌入程序代码。这种模式被称为服务器页面模式。直到现在,PHP仍然是许多中小型网站建站的首先技术,和Apache、MySQL和Linux共同组成了一个强大的web开发平台,被称为LAMP。
  • 既然CGI程序擅长处理请求信息,而服务器页面擅长构造响应的页面,那么能不能将两者结合起来?答案就是MVC模式。控制器接收处理所有的HTPP请求,根据请求信息将其分发给不同的模型对象处理,再根据模式处理结果选择构造视图,得到最终的响应信息。使用MVC模式可以很好的分离模型与视图,使得二者完全解耦,互相影响降到最低。

  • 模型与视图分离为系统开发维护带来了诸多好处,为目前web开发流畅的分层架构模式奠定了基础。分层模式可以更进一步分离关注面和降低系统的耦合性,通过分层,隔离上层对下层的直接依赖,上层设计无需过多的考虑下层实现,各层之间较少耦合,只要保持接口规范不变,各层可以随意替换和复用。web开发中通常将服务端划分为三层:表现层、业务逻辑层和数据源层。表现层完成视图展现和用户交互;业务逻辑层实现系统的核心逻辑;数据源负责数据存储、交换和通信。这种层次划分是逻辑上的,物理部署上多个层会作为一个应用部署在一起。
  • 上面简单的回顾了web开发的技术发展历程和一些早期主要架构模式,这些模式在企业web应用开发中也有许多实践。但是随着互联网应用的快速发展,需求场景和业务领域都有一些和传统企业应用不同的特点,对系统的可用性、扩展性、响应性能、伸缩性、安全性都提出了更高的要求,网站技术架构也和企业应用技术架构脱离,走上了一条更具创新性的发展之路。

web技术发展历程--读《大型网站技术架构_核心原理与案例分析》的更多相关文章

  1. 《大型网站技术架构:核心原理与案例分析》【PDF】下载

    <大型网站技术架构:核心原理与案例分析>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 本书通过梳理大型网站 ...

  2. 阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章,结合《XXX重大技术需求征集系统》,列举实例分析采用的可用性和可修改性战术,将上述内容撰写成一篇1500字左右的博客阐述你的观点。

    这三章主要讲述的是网站的可用性.伸缩性和可扩展性. 首先,网站的可用性描述网站可有效访问的特性,相比于网站的其他非功能特性,网站的可用性更容易引起人们的注意,尤其是大型网站的可用性,如果大公司的网站出 ...

  3. 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  4. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  5. 大型网站技术架构 核心原理与案例分析 pdf

    需要的小伙伴拿去,哈哈.百度云链接:https://pan.baidu.com/s/1hsuiM3q

  6. 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

    一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...

  7. 阅读《大型网站技术架构》,并结合"重大需求征集系统"有感

    今天阅读了<大型网站技术架构:核心原理与案例分析>的第五.六.七章.这三张主要是讲述了一个系统的可用性.伸缩性和可扩展性.而根据文中所讲述的,一个系统的可用性主要是体现在这个系统的系统服务 ...

  8. 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...

  9. 动态 Web Server 技术发展历程

    动态 Web Server 技术发展历程 开始接触 Java Web 方面的技术,此篇文章是以介绍 Web server 相关技术的演变为主来作为了解 Java servlet 的技术背景,目的是更好 ...

随机推荐

  1. .net的retrofit--WebApiClient库

    # 库简介 WebApiClient是开源在github上的一个httpClient客户端库,内部基于HttpClient开发,是一个只需要定义c#接口(interface),并打上相关特性,即可异步 ...

  2. keynote 代码高亮

    brew install highlight (同时会安装 Lua 和 Boost) highlight -K 18 -s Vampire -u 'utf-8' -O rtf test.html | ...

  3. random seed()函数

    用seed()生成随机数字,生成的法则与seed内部的数字相关,如果数字相同,则生成的随机数是相同的. 刷题宝上面的题目: >>> import random >>> ...

  4. 【三十一】thinkphp之安装、配置、模块化及URL模式

    一:安装与配置 1.获取ThinkPHP 下载地址:http://www.thinkphp.cn/down.html 2.入口文件 ThinkPHP采用单一入口模式对项目进行部署和访问,所以我们需要通 ...

  5. 个人项目--“”小鱼企业级开发系统“”Svn地址分享

    由于精力有限,博主现在只维护这一个系统,会不时的更新代码提交. ""小鱼企业级开发系统""的Svn地址:http://code.taobao.org/svn/S ...

  6. 修复Java使用POI合并Excel单元格后,边框不显示的问题

    使用Apache POI生成Excel文档时,当进行单元格合并操作后,被合并的单元格边框会消失,使用如下方式可以解决. 创建方法: public void setBorderStyle(int bor ...

  7. HDU 1232 并查集

    畅通工程                                                                                            Time ...

  8. Codeforces Round #328 (Div. 2)_A. PawnChess

    A. PawnChess time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  9. QQ群友在线/离线,如何测试?

    上篇文章『QQ好友在线/离线,如何测试?』针对即时通讯的"状态"进行了分析和总结,主要说到了QQ好友在线/离线实现方案,测试过程中需要注意的测试点. 针对好友状态实时性的要求需要使 ...

  10. 安装JDK出现错误:-bash: /usr/java/jdk1.7.0_71/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory解决办法

    1.错误描述:安装好jdk之后,通过java -version,javac,java等命令测试是否安装成功时出现错误-bash: /usr/java/jdk1.7.0_71/bin/java: /li ...