目录
一、互联网架构演进
1. web1.0阶段
用户通过浏览器访问网站服务器,往往服务器上的资源是静态的,仅仅包含html、js、css等内容,没有和用户进行交互,都是单向的,这是web1.0里面常见的模式。整个架构如下图所示:
2. web2.0阶段
到了web2.0,上面的架构中引入了数据库,用户和服务器之间有了一定的交互,用户可以增加删除和修改一些数据,这些数据存储在数据库里面,架构如下:
3. 单体阶段
提供了一台服务器,服务器里面会部署我们的javaweb程序,数据库服务、文件服务。
4. 原始服务分离架构
随着用户规模的提升,单体服务器的性能瓶颈越来越严重,不管是数据库,还是文件服务器,性能都越来越乏力,无论是cpu,网络、io都吃不消,同时单体服务一旦宕机,服务器不可访问,整个服务架构演变为网站服务器、文件服务器、数据库服务器。这是最初的分离模式,实现了单体服务的降压。如图:
5. 缓存架构
随着时间的推移,用户数量大规模的增加,访问请求越来越多,数据库的压力越来越大,用户的访问越来越慢,体验越来越不
好,这个时候就引入缓存中间件。架构如图:
6.集群架构
上面为止,所有的部署都是单节点部署,一旦其中一个节点宕机,那么用户是无法访问的,对企业来说是具有毁灭性影响的,并且单节点部署还是有很严重的性能问题,于是引入集群与负载均衡的架构,架构如图:
7. 数据库读写分离架构
到目前为止除了大部分的请求落入到缓存,但是还有一部分请求的读写落入到数据库上,数据库很快成为整个服务的瓶颈,于是引入了数据库的读写分离架构。如图所示:
8. 数据库分库分表
虽然做了读写分离,但是大型网站的业务还是会急剧增长,如果数据库扛不住了,这个时候可以进行分库分表,一般来说,当数据库单表达到800万左右,就开始考虑分库分表了。如图所示:
9. 搜索引擎架构
随着网站的进一步发展,用户对于检索的要求也多样化,特别是模糊查询,数据库可能满足不了用户的需求,并且如果在数据库中进行查询的话,会对数据库造成一定的压力,所以这个时候会引入相应的搜索引擎,比如solr或者es。如图所示:
10. 微服务架构
大型网站的业务通常非常复杂,这个时候,需要将复杂业务拆分成小的产品线,比如电商系统,这个就是微服务阶段,如图所示:
11. 一个简化版的互联网架构
二、架构演进的一点想法
在之前的架构演进中,明显有着两条主线:
1. 用户规模的快速增长
网站的架构不断的演进。随着大型互联网公司越来越多,用户群体规模已经达到了最大,像微信、淘宝这类公司,用户规模再上升已经非常困难了,而且支撑大规模用户的架构趋于成熟,相关的架构技术也不断在独角兽相关的公司开始普及。而这个时候大公司开始着重已有成熟架构的优化,比如微服务架构的优化方向上产生了新一代的ServiceMesh架构。
2. 业务场景的快速丰富
网站架构也不断演进。刚开始的web1.0只支持静态页面资源访问,而且是单向的服务,后来诞生了用户交互相关的需求,多媒体相关的需求,用户访问性能方面的需求,但是目前网站上依然是一大堆静态的资源。下一阶段,随着webGL、VR等技术的发展,互联网会呈现出用户更多的需求。比如目前在淘宝上买东西,依然是以图片、视频等静态资源的形式进行访问的,以后用户可以随意旋转物体,360度无死角的拖动旋转,如同玩游戏一样,不在需要图片的形式进行展现,直接以动态模型的形式进行展现。