Web应用系统架构演进过程
- 格式:docx
- 大小:359.01 KB
- 文档页数:9
Web应用的发展历程一、引言随着科技的飞速发展,互联网已经渗透到我们生活的方方面面,改变了我们的工作方式、学习方式、甚至思维方式。
在这个数字化、网络化的时代,Web应用作为互联网的重要组成部分,其发展历程也反映了互联网技术的进步和社会需求的变化。
本文将对Web应用的发展历程进行详细完整的回顾和总结。
二、Web应用的起源和初期发展Web的起源Web应用的发展起源于互联网的诞生。
20世纪60年代末,美国国防部高级研究计划局(ARPA)为了应对军事通信的需求,研发了ARPANET,这是互联网的雏形。
ARPANET的出现为信息传输提供了新的可能,也为Web应用的诞生奠定了基础。
初期发展在Web应用的初期发展阶段,主要是静态网页的展示。
1991年,蒂姆·伯纳斯-李(Tim Berners-Lee)发明了万维网(World Wide Web),并创建了第一个网页浏览器和网页服务器。
万维网的出现使得人们可以通过浏览器浏览和分享信息,这是Web应用的开端。
三、Web应用的快速发展和变革动态网页的出现随着技术的不断进步,静态网页逐渐无法满足人们的需求,动态网页应运而生。
动态网页可以根据用户的请求和数据库的内容动态生成页面,使得Web应用更加灵活和个性化。
PHP、ASP等服务器端脚本语言的出现,为动态网页的开发提供了有力支持。
AJAX技术的出现2005年,AJAX(Asynchronous JavaScript and XML)技术的出现,使得Web应用可以在不重新加载整个页面的情况下,与服务器进行数据交换并更新部分页面内容。
这种异步通信的方式大大提高了Web应用的用户体验和性能。
Web 2.0时代的来临Web 2.0时代的来临标志着Web应用从单纯的信息展示向用户参与和互动的方向发展。
在这个阶段,社交网络、博客、维基百科等用户生成内容的Web应用大量涌现,用户不仅可以浏览信息,还可以参与到信息的创造和分享中。
Web前端技术发展简史1、静态页⾯阶段那是1990年的12⽉25⽇,恰是西⽅的圣诞节,Tim Berners-Lee在他的NeXT电脑上部署了第⼀套“主机-⽹站-浏览器”构成的Web系统,这标志BS架构的⽹站应⽤软件的开端,也是前端⼯程的开端。
1993年4⽉Mosaic浏览器作为第⼀款正式的浏览器发布。
1994年11⽉,⿍⿍⼤名的Navigator浏览器发布发布了,到年底W3C在Berners-Lee的主持下成⽴,标志着万维⽹进⼊了标准化发展的阶段。
这个阶段的⽹页还⾮常的原始,主要以HTML为主,是纯静态的只读⽹页。
2、Javascript诞⽣及第⼀次浏览器战争1995年,NetScape公司的⼯程师Brendan Eich设计了javascript脚本语⾔,并集成到了navigator2.0版本中。
随后微软也意识到了javascript 的潜⼒,并模仿开发VBScript和JScript应⽤到了IE中,这直接开启了NetScape和微软的浏览器竞争。
由于微软的IE集成在windows操作系统上的优势,NetScape的navigator很快在浏览器市场上落于下风。
于是他们把javascript提交到了ECMA,推动制订了ECMAScript标准,成功实现了javascript的标准国际化。
虽然第⼀次浏览器战争最后IE⼤胜Navigator,但是NetScape 的javascript主导了W3C的官⽅标准。
3、动态页⾯的发展Javascript的诞⽣之初,就给⽹页带来了⼀些跑马灯、浮动⼴告之类的特效和应⽤,让⽹页动了起来。
但是⽹页真正开始向动态交互发展的开端,却是PHP、JSP和ASP为代表的后端动态页⾯技术的出现。
这些服务器端的动态页⾯技术使得⽹页可以获取服务器的数据信息并保持更新,推动了Google为代表的搜索引擎和各种论坛的出现,万维⽹开始快速发展。
服务器端⽹页动态交互功能的不断丰富,伴随的是后端逻辑的复杂度快速上升,代码越来越复杂。
Web发展历史Web发展历史可以追溯到1960年代,但以下是一些关键的里程碑,展示了Web是如何发展成今天的形式:1. 1960年代:万维网的前身- 1962年,美国计算机科学家J.C.R. Licklider提出了一个名为"Galactic Network"的概念,该概念旨在连接全球的计算机,使其能够共享信息。
- 1969年,美国国防部的高级研究计划局(ARPA)建立了第一个分组交换网络ARPANET,为大规模计算机间的通信提供了基础。
2. 1970年代:电子邮件和TCP/IP协议的出现- 1971年,美国计算机工程师Ray Tomlinson发明了电子邮件系统,使得用户能够在不同计算机之间发送消息。
- 1974年,由美国国防部支持的国际互联网协议(TCP/IP)被开发出来,成为互联网通信的基础。
3. 1980年代:出现域名和万维网概念-1983年,域名系统(DNS)被引入,用于将易记的域名映射到IP地址,简化了互联网的寻址。
- 1989年,英国计算机科学家蒂姆·伯纳斯-李(Tim Berners-Lee)提出了万维网(World Wide Web)的概念,这是一个通过超链接连接文档和资源的系统。
4. 1990年代:万维网的广泛应用和商业化- 1991年,伯纳斯-李发布了第一个Web服务器和Web浏览器,并制定了HTML(超文本标记语言)作为Web页面的标准格式。
-1993年,Web浏览器Mosaic的发布引发了Web的爆炸性增长,并推动了商业化的发展。
- 1994年,万维网联盟(W3C)成立,旨在推动Web技术的标准化和发展。
- 1995年,互联网公司Netscape推出了首个商业化的Web浏览器Netscape Navigator。
5. 2000年代:Web 2.0和社交媒体的崛起- 2000年,Web 2.0的概念出现,强调用户生成的内容、社交媒体和互动性。
WEB开发的流程1.项目需求分析项目需求分析是整个WEB开发过程的起始阶段,它的目的是明确项目的需求和目标。
在这个阶段,开发团队与客户进行沟通,了解客户的需求,确定项目的范围、功能、平台和用户群体等。
2.系统设计在需求分析阶段的基础上,进行系统设计,确定项目的总体架构和技术方案。
开发团队会设计数据库结构、系统模块和各个模块之间的交互方式,并梳理出系统开发的具体任务和时间计划。
3.界面设计在系统设计的基础上,进行界面设计。
界面设计要考虑用户体验和用户界面的交互方式,包括页面布局、色彩搭配、图标设计等。
设计师会根据需求和系统定位进行界面设计,并提供给前端开发人员使用。
4.前端开发前端开发是指将设计师设计的界面进行编码实现。
前端开发人员会使用HTML、CSS和JavaScript等技术,将视觉设计转化为具体的网页。
他们需要保证页面在不同浏览器和设备上的兼容性和响应式设计。
5.后端开发后端开发是指通过编写服务器端代码来实现网站的业务逻辑和数据库的操作。
后端开发人员主要使用服务器端的编程语言和框架,如Java、Python、PHP等。
他们会根据系统设计的要求,开发相应的功能模块和接口,并与前端开发人员进行接口对接。
6.测试在开发完成后,需要进行测试来验证系统的功能和稳定性。
测试人员会根据项目需求和系统设计编写测试用例,并进行功能测试、性能测试、安全性测试等。
测试人员会报告错误和问题,开发团队需要及时修复问题并重新测试。
7.发布上线在测试通过后,将系统部署到服务器上进行发布。
这个过程包括配置服务器环境、上传代码、配置域名等。
发布后,测试人员和开发团队会进行最后一次的检查和测试,确保系统能正常运行。
8.维护系统发布上线后,需要进行后续的维护工作。
维护工作包括系统的监控、数据备份、系统安全和漏洞修复等。
同时,发现用户反馈或需求变更时,也需要及时进行维护和更新。
总之,WEB开发的流程包括项目需求分析、系统设计、界面设计、前端开发、后端开发、测试、发布上线和维护等阶段。
前后端分离发展史
前后端分离是一种web应用架构模式,它有效地对项目进行解耦。
前后端工程师约定好数据交互接口,实现并行开发和测试。
在运行阶段,前后端分离模式需要对web应用进行分离部署,前后端之前使用HTTP或者其他协议进行交互请求。
前后端分离的发展过程经历了以下三个阶段:
前后端不分离阶段:在这个阶段,前端和后端是紧密耦合的,通常使用Java的JSP作为前端视图时代。
前后端半分离阶段:在这个阶段,前后端开始使用Ajax进行交互,实现了半分离状态。
前后端完全分离阶段:在这个阶段,前后端使用代理服务器进行完全分离,前端采用MVVM架构,后端采用RESTful API。
随着互联网技术的发展,前后端分离的架构模式逐渐成为主流。
在前后端分离的架构中,前端工程师主要关注用户界面和交互体验,后端工程师主要关注数据持久化和业务逻辑实现。
这种分工明确、高效协作的开发模式能够提高开发效率和可维护性。
同时,前后端分离也促进了前端和后端技术的快速发展和创新。
互联⽹架构的演变过程(⼀)简介web1.0时代web2.0时代互联⽹时代互联⽹+ --》智慧城市。
2012年提出。
云计算+⼤数据时代背景随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的垂直应⽤架构已⽆法应对,分布式服务架构以及流动计算架构势在必⾏,亟需⼀个治理系统确保架构有条不紊的演进。
1、第⼀时期单⼀应⽤架构all in one(所有的模块在⼀起,技术也不分层)⽹站的初期,也认为互联⽹发展的最早时期。
会在单机部署上所有的应⽤程序和软件。
所有的代码都是写在JSP⾥⾯,所有的代码都写在⼀起。
这种⽅式称为all in one。
特点:1、不具备代码的可维护性。
2、容错性差。
因为我们所有的代码都写在JSP页⾥。
当⽤户或某些原因发⽣异常。
(1、⽤户直接看到异常错误信息。
2、这个错误会导致服务器宕机)容错性,是指软件检测应⽤程序所运⾏的软件或硬件中发⽣的错误并从错误中恢复的能⼒,通常可以从系统的可靠性、可⽤性、可测性等⼏个⽅⾯来衡量。
单体地狱。
:只需⼀个应⽤,将所有功能都部署在⼀起,以减少部署节点和成本。
2 第⼀时期后阶段解决⽅案:1、分层开发(提⾼维护性)【解决容错性】2、MVC架构(Web应⽤程序的设计模式)3、服务器的分离部署特点:1、MVC分层开发(解决容错性问题)2、数据库和项⽬部署分离问题:随着⽤户的访问量持续增加,单台应⽤服务器已经⽆法满⾜需求。
解决⽅案:集群。
3 可能会产⽣的⼏个问题:1.1. ⾼可⽤“⾼可⽤性”(High Availability)通常来描述⼀个系统经过专门的设计,从⽽减少停⼯时间,⽽保持其服务的⾼度可⽤性。
(⼀直都能⽤)1.2. ⾼并发⾼并发(High Concurrency)是互联⽹分布式系统架构设计中必须考虑的因素之⼀,它通常是指,通过设计保证系统能够同时并⾏处理很多请求。
⾼并发相关常⽤的⼀些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发⽤户数等。
系统架构演进与创新设计随着科技的不断进步和应用的深入,各类系统架构也在不断演进和创新。
本文将探讨系统架构的演进过程以及创新设计的重要性,并通过实例说明其应用。
一、系统架构的演进系统架构是指在设计和开发软件、硬件或者软硬件结合的系统时所采取的结构和组织方式。
在演进的过程中,系统架构经历了从简单到复杂、从单层到分层、从集中到分布式的变化。
1.1 从简单到复杂早期的系统架构相对简单,由于硬件和软件技术的限制,功能和性能很有限。
随着计算机技术的进步,系统的功能逐渐增加,架构也越来越复杂。
例如,互联网的出现使得系统可以实现全球范围的通信和数据交换,这需要更为复杂的系统架构来支持。
1.2 从单层到分层早期的系统架构往往是单层的,所有的功能模块都集中在同一个层次上。
这样的架构存在着很多问题,如扩展性差、维护困难等。
为了解决这些问题,人们开始采用分层的架构。
分层架构将系统划分为若干个层次,每个层次都有特定的功能和职责。
这样可以提高系统的可扩展性和可维护性。
1.3 从集中到分布式早期的系统往往是集中式的,所有的模块都运行在同一个物理设备上。
随着计算机网络的发展,分布式系统逐渐取代了集中式系统。
分布式系统将不同的模块部署在不同的设备上,通过网络进行通信和协作。
这种架构可以提高系统的可靠性和性能。
二、系统架构创新设计的重要性创新设计对系统架构的演进起着重要的推动作用。
创新设计可以使系统具备更好的可用性、可扩展性和性能。
以下是创新设计的几个重要方面:2.1 分布式存储分布式存储是一种创新设计,在大规模数据存储和处理方面具有重要意义。
通过将数据在多个节点上进行分布式存储,可以提高数据的可靠性和可用性,并可以实现更高的数据处理能力。
2.2 微服务架构微服务架构是一种将系统划分为若干个小型服务的设计方式。
每个服务都具有独立的功能和职责,并可以独立部署和升级。
这种架构可以提高系统的可扩展性和可维护性,同时还可以加速开发和部署的速度。
简要说明 Web 应用的工作原理1. 概述Web 应用是指利用 HTTP 协议进行通信的应用程序。
它的工作原理可以分为客户端和服务器两部分。
2. 客户端客户端是指用户使用的设备,如电脑、手机、平板等,它通过浏览器向服务器请求数据,并将服务器响应的结果展示给用户。
客户端的工作原理如下:•用户输入请求 URL:用户在浏览器地址栏中输入要访问的网址,这个网址通常以http://或https://开头。
•构建 HTTP 请求:浏览器会根据用户输入的网址构建一个 HTTP 请求。
请求中包含请求方法、请求头、请求体等信息。
常见的请求方法有 GET、POST、PUT、DELETE 等。
•发送请求到服务器:浏览器将构建好的 HTTP 请求发送给服务器。
发送的过程中会经过网络传输链路。
•服务器处理请求:服务器接收到请求后,会根据请求的内容进行相应的处理。
比如查询数据库、读取文件、调用其他的服务等。
•构建 HTTP 响应:服务器处理完请求后,会构建一个 HTTP 响应,其中包含响应状态码、响应头和响应体等信息。
•发送响应到客户端:服务器将构建好的 HTTP 响应发送给客户端。
发送的过程中也会经过网络传输链路。
•浏览器渲染页面:客户端接收到服务器的响应后,会根据响应的内容进行相应的处理。
如果响应是一个 HTML 页面,浏览器会解析 HTML 并渲染成页面展示给用户。
3. 服务器服务器是指接收客户端请求并返回响应的计算机或软件。
服务器的工作原理如下:•接收请求:服务器通过网络接收到客户端发送的 HTTP 请求。
•解析请求:服务器会解析请求头和请求体,获取请求方法、URL、请求参数等信息。
•处理请求:服务器根据请求的内容进行相应的处理。
处理过程可以包括查询数据库、执行业务逻辑、调用其他的服务等。
•构建响应:服务器处理完请求后,会构建一个 HTTP 响应,其中包含响应状态码、响应头和响应体等信息。
•发送响应:服务器通过网络将构建好的 HTTP 响应发送给客户端。
阿里巴巴大型网站架构演变和知识体系之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想从事互联网行业的同学一点初步的概念,文中的不对之处也请各位多给点建议,让本文真正起到抛砖引玉的效果。
架构演变第一步:物理分离webserver和数据库最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易出问题,于是进入了第一步演变阶段:将应用和数据库从物理上分离,变成了两台机器,这个时候技术上没有什么新的要求,但你发现确实起到效果了,系统又恢复到以前的响应速度了,并且支撑住了更高的流量,并且不会因为数据库和应用形成互相的影响。
看看这一步完成后系统的图示:这一步涉及到了这些知识体系:这一步架构演变对技术上的知识体系基本没有要求。
架构演变第二步:增加页面缓存好景不长,随着访问的人越来越多,你发现响应速度又开始变慢了,查找原因,发现是访问数据库的操作太多,导致数据连接竞争激烈,所以响应变慢,但数据库连接又不能开太多,否则数据库机器压力会很高,因此考虑采用缓存机制来减少数据库连接资源的竞争和对数据库读的压力,这个时候首先也许会选择采用squid 等类似的机制来将系统中相对静态的页面(例如一两天才会有更新的页面)进行缓存(当然,也可以采用将页面静态化的方案),这样程序上可以不做修改,就能够很好的减少对webserver的压力以及减少数据库连接资源的竞争,OK,于是开始采用squid来做相对静态的页面的缓存。
1
系统架构演化历程 -- 初始阶段架构
初始阶段的小型系统,其特征表现为应用程序、数据库、文件等所有的资源都部署在一台服务器上,我们通俗称为LAMP架构。
特征:
应用程序、数据库、文件等所有的资源都在一台服务器上。
描述:
通常服务器操作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。
2
系统架构演化历程 -- 应用服务和数据服务分离
好景不长,发现随着系统访问量的增加,Web应用服务器器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台Web应用服务器提供系统的访问效率。
特征:
应用程序、数据库、文件分别部署在独立的资源上。
描述:
数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。
3
系统架构演化历程 -- 使用缓存改善性能标题
特征:
数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。
描述:
1. 系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上;
2. 缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。
4
系统架构演化历程 -- 使用应用服务器集群
在对应用系统做完分库分表工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看Web Server,发现Apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,发现问题是由于请求数太高导致需要排队等待,响应速度变慢。
特征:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。
描述:
1. 使用集群是系统解决高并发、海量数据问题的常用手段。
2. 通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。
5
系统架构演化历程 -- 数据库读写分离
享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新、删除的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢。
特征:
通过多台数据库服务器通过集群的负载均衡向外部提供服务,解决单台数据库服务器处理能力和存储空间上限的问题。
描述:
1. 使用数据库集群是系统解决高并发、海量数据问题的常用手段。
2. 通过向数据库集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。
6
系统架构演化历程 -- 反向代理和CDN加速
特征:
采用CDN和反向代理加快系统的访问速度。
描述:
1. 为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。
2. CDN与反向代理的基本原理都是缓存。
7
系统架构演化历程 --分布式文件系统和分布式数据库
随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作
特征:
数据库采用分布式数据库,文件系统采用分布式文件系统。
描述:
1. 任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。
2. 分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
8
系统架构演化历程 -- 使用NoSQL和搜索引擎
特征:
系统引入NoSQL数据库及搜索引擎。
描述:
1. 随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。
2. 应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
9
系统架构演化历程 -- 业务拆分
特征:
系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。
描述:
为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。
A. 纵向拆分:
1. 将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统;
2. 纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。
B. 横向拆分:
1. 将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务;
2. 横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。
X
系统架构演化历程 -- 分布式服务
特征:
公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。
描述:
随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。