大型网站架构设计的演化(下)

使用CDN和反向代理

什么是CDN?具体介绍请查看CDN,我这里只简单介绍一下:CDN全称是内容分发网络,一般部署在网络提供商的机房。大家都知道,网络提供商的机房在全国各地都有,按照距离算总有一个离你最近的,CDN就是干这个的,从离你最近的一个机房给你返回数据,加快访问速度。我们公司就把公司的LOGO、轮播图之类的信息上传到CDN,以提升网站的性能。
那么反向代理又是什么呢?具体的介绍还是查看反向代理,简单来说就是部署在网站中心机房的代理服务器,也可以缓存一部分静态资源。当用户的请求到达中心机房后,如果反向代理服务器中有用户所需的资源,就将其直接返回给用户,不用经过数据库,同样可以大大加快访问速度。
下面是采用CDN和反向代理技术的架构图:
大型网站架构设计的演化(下)_第1张图片
网站使用CDN和反向代理后,一方面可以加快用户的访问速度,另一方面也可以减少应用服务器和数据库的压力。

分布式文件系统和分布式数据库系统

如果数据库经过读写分离后,拆分为两台服务器依然不能够满足需求,再应该采用什么办法呢?只能采用分布式数据库了,分布式数据库是网站数据库拆分的最后手段了,只有在单表数据非常庞大时才会使用,比如淘宝的商品、订单等表,单表数据极其庞大,一台数据库服务器远远不能满足需求。不到万不得已,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。
文件服务器也是同样的道理,单一的文件服务器已经无法支撑庞大的业务需求,只能采用分布式文件系统。如下所示:
大型网站架构设计的演化(下)_第2张图片

使用NoSQL和搜索引擎

业务的复杂度无法预估,但是对于数据存储和检索的需求却一直存在,甚至对于性能要求还会更高,常见的手段就是采用一些非关系数据库技术如Redis和非数据库查询技术,常见的是使用Elasticsearch,这就行成了新的架构,如下所示:
大型网站架构设计的演化(下)_第3张图片
笔者所经历的项目,对于高频查询或者搜索,采用都是类似的方案。

业务拆分

大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线,如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统,如图所示:
大型网站架构设计的演化(下)_第4张图片

分布式服务

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致存数据库接资源不足,拒绝服务。既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作,如下图所示:
大型网站架构设计的演化(下)_第5张图片
大型网站的架构演化到这里,基本上大多数的技术问题都得以解决,诸如跨数据中心的实时数据同步和具体网站业务相关的问题也都可以通过组合改进现有技术架构来解决。但事物发展到一定阶段,就会拥有自身的发展冲动,摆脱其初衷,向着使自己更强大的方向发展。既然大型网站架构解决了海量数据的管理和高并发事务的处理,那么就可以把这些解决方案应用到网站自身以外的业务上去。我们看到目前许多大型网站都开始建设云计算平台,将计算作为一种基础资源出售,中小网站不需要再关心技术架构问题,只需要按需付费,就可以使网站随着业务的增长逐渐获得更大的存储空间和更多的计算资源。

本文转自:李智慧. 大型网站技术架构:核心原理与案例分析 (Chinese Edition) (p. 12). 电子工业出版社. Kindle 版本.

你可能感兴趣的:(架构设计,java,elasticsearch,nosql,分布式)