网站架构(网站架构有哪些)-第1张

小型中文网站都是一点一点演进回来的,构架师须要介绍总体构架的演进操作过程@mikechen

小型中文网站控制系统的特征

1.高mammalian,大网络流量

须要直面高mammalian采用者,大网络流量出访。

2.高需用

控制系统 7 x 24 半小时无间断服务项目。

3.海量

须要存储、管理海量,须要采用大批服务项目器。

4.采用者原产广为,互联网情形繁杂

很多小型互联中文网站都是为亚洲地区采用者提供更多服务项目的,采用者原产面广,各省市互联网情形各不相同。在亚洲地区,除了各电信公司互联网互联互通难的难题。

5.安全可靠自然环境恶劣

由于互联网的开放性,使得互联中文网站更容易受到攻击,小型中文网站几乎每天都会被黑客攻击。

6.需求快速变更,发布频繁

和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足采用者需求,其产品发布频率极高。一般小型中文网站的产品每周都有新版本发布上线,中小型中文网站的发布更频繁,有时候一天会发布几十次。

7.渐进式发展

几乎所有的小型互联网中文网站都是从一个小中文网站开始,渐进地发展起来的,好的互联网产品都是慢慢运营出来的,不是一开始就开发好的,这也正好与中文网站构架的发展演化操作过程对应。

1.初始阶段的中文网站构架

小型中文网站都是从小型中文网站发展而来,中文网站构架也是一样,是从小型中文网站构架逐步演化而来。

小型中文网站最开始没有太多人出访,只须要一台服务项目器就绰绰有余,这时的中文网站构架如下图所示:

网站架构(网站架构有哪些)-第2张

应用程序、数据库、文件等所有资源都在一台服务项目器上。

2.应用服务项目和数据服务项目分离

随着中文网站业务的发展,一台服务项目器逐渐不能满足需求:越来越多的采用者出访导致性能越来越差,越来越多的数据导致存储空间不足。

这时就须要将应用和数据分离。应用和数据分离后整个中文网站采用3台服务项目器:应用服务项目器、文件服务项目器和数据库服务项目器,这3 台服务项目器对硬件资源的要求各不相同:

应用服务项目器须要处理大批的业务逻辑,因此须要更快更强大的CPU;

数据库服务项目器须要快速磁盘检索和数据缓存,因此须要更快的磁盘和更大的内存;

文件服务项目器须要存储大批采用者上传的文件,因此须要更大的硬盘。

此时,中文网站控制系统的构架如下图所示:

网站架构(网站架构有哪些)-第3张

应用和数据分离后,不同特性的服务项目器承担不同的服务项目角色,中文网站的mammalian处理能力和数据存储空间得到了很大改善,支持中文网站业务进一步发展。

但是随着采用者逐渐增多,中文网站又一次面临挑战:数据库压力太大导致出访延迟,进而影响整个中文网站的性能,采用者体验受到影响,这时须要对中文网站构架进一步优化。

3.采用缓存改善中文网站性能

中文网站出访的特征和现实世界的财富分配一样遵循二八定律:80%的业务出访集中在20%的数据上。

既然大部分业务出访集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的出访压力,提高整个中文网站的数据出访速度,改善数据库的写入性能了。

中文网站采用的缓存可以分为两种:缓存在应用服务项目器上的本地缓存和缓存在专门的原产式缓存服务项目器上的远程缓存。

本地缓存的出访速度更快一些,但是受应用服务项目器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情形。

远程原产式缓存可以采用集群的方式,部署大内存的服务项目器作为专门的缓存服务项目器,可以在理论上做到不受内存容量限制的缓存服务项目。

网站架构(网站架构有哪些)-第4张

采用缓存后,数据出访压力得到有效缓解,但是单一应用服务项目器能够处理的请求连接有限,在中文网站出访高峰期,应用服务项目器成为整个中文网站的瓶颈。

4.采用应用服务项目器集群改善中文网站的mammalian处理能力

采用集群是中文网站解决高mammalian、海量难题的常用手段。

当一台服务项目器的处理能力、存储空间不足时,不要企图去更换更强大的服务项目器,对小型中文网站而言,不管多么强大的服务项目器,都满足不了中文网站持续增长的业务需求。

这种情形下,更恰当的做法是增加一台服务项目器分担原有服务项目器的出访及存储压力。

对中文网站构架而言,只要能通过增加一台服务项目器的方式改善负载压力,就可以以同样的方式持续增加服务项目器不断改善控制系统性能,从而实现控制系统的可伸缩性

应用服务项目器实现集群是中文网站可伸缩构架设计中较为简单成熟的一种,如下图所示:

网站架构(网站架构有哪些)-第5张

通过负载均衡调度服务项目器,可以将来自采用者浏览器的出访请求分发到应用服务项目器集群中的任何一台服务项目器上,如果有更多采用者,就在集群中加入更多的应用服务项目器,使应用服务项目器的压力不再成为整个中文网站的瓶颈。

5.数据库读写分离

中文网站在采用缓存后,使对大部分数据读操作出访都可以不通过数据库就能完成,但是仍有一部分读操作(缓存出访不命中、缓存过期)和全部的写操作都须要出访数据库,在中文网站的采用者达到一定规模后,数据库因为负载压力过高而成为中文网站的瓶颈。

目前大部分的主流数据库都提供更多主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务项目器的数据更新同步到另一台服务项目器上。

中文网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力,如下图所示:

网站架构(网站架构有哪些)-第6张

应用服务项目器在写数据的时候,出访主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务项目器读数据的时候,就可以通过从数据库获得数据。

为了便于应用程序出访读写分离后的数据库,通常在应用服务项目器端采用专门的数据出访模块,使数据库读写分离对应用透明。

6.采用反向代理和 CDN 加速中文网站响应

随着中文网站业务不断发展,采用者规模越来越大,由于中国繁杂的互联网自然环境,不同地区的采用者出访中文网站时,速度差别也极大。有研究表明,中文网站出访延迟和采用者流失率正相关,中文网站出访越慢,采用者越容易失去耐心而离开。

为了提供更多更好的采用者体验,留住采用者,中文网站须要加速中文网站出访速度,主要手段有采用CDN 和方向代理,如下图所示:

网站架构(网站架构有哪些)-第7张

CDN 和反向代理的基本原理都是缓存。

CDN 部署在互联网提供更多商的机房,使采用者在请求中文网站服务项目时,可以从距离自己最近的互联网提供更多商机房获取数据

反向代理则部署在中文网站的中心机房,当采用者请求到达中心机房后,首先出访的服务项目器是反向代理服务项目器,如果反向代理服务项目器中缓存着采用者请求的资源,就将其直接返回给采用者

采用 CDN 和反向代理的目的都是尽早返回数据给采用者,一方面加快采用者出访速度,另一方面也减轻后端服务项目器的负载压力。

7.采用原产式文件控制系统和原产式数据库控制系统

任何强大的单一服务项目器都满足不了小型中文网站持续增长的业务需求。数据库经过读写分离后,从一台服务项目器拆分成两台服务项目器,但是随着中文网站业务的发展依然不能满足需求,这时须要采用原产式数据库。

文件控制系统也一样,须要采用原产式文件控制系统,如下图所示:

网站架构(网站架构有哪些)-第8张

原产式数据库是中文网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才采用。不到不得已时,中文网站更常用的数据库拆分手段是业务分库,将不同业务的数据部署在不同的物理服务项目器上。

8.采用 NoSQL 和搜索引擎

随着中文网站业务越来越繁杂,对数据存储和检索的需求也越来越繁杂,中文网站须要采用一些非关系数据库技术如 NoSQL 和非数据库查询技术如搜索引擎。

如下图所示:

网站架构(网站架构有哪些)-第9张

NoSQL 和搜索引擎都是源自互联网的技术手段,对可伸缩的原产式特性具有更好的支持。应用服务项目器则通过一个统一数据出访模块出访各种数据,减轻应用程序管理诸多数据源的麻烦。

9.业务拆分

小型中文网站为了应对日益繁杂的业务场景,通过采用分而治之的手段将整个中文网站业务分成不同的产品线。

如小型购物交易中文网站都会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。

网站架构(网站架构有哪些)-第10张

具体到技术上,也会根据产品线划分,将一个中文网站拆分成很多不同的应用,每个应用独立部署。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过出访同一个数据存储控制系统来构成一个关联的完整控制系统。

10.原产式服务项目

随着业务拆分越来越小,存储控制系统越来越庞大,应用控制系统的总体繁杂度呈指数级增加,部署维护越来越困难。

由于所有应用要和所有数据库控制系统连接,在数万台服务项目器规模的中文网站中,这些连接的数目是服务项目器规模的平方,导致数据库连接资源不足,拒绝服务项目。

既然每一个应用控制系统都须要执行很多相同的业务操作,比如采用者管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供更多共用业务服务项目,而应用控制系统只须要管理采用者界面,通过原产式服务项目调用共用业务服务项目完成具体业务操作。

如下图所示:

网站架构(网站架构有哪些)-第11张

小型中文网站的构架演化到这里,基本上大多数的技术难题都得以解决,诸如跨数据中心的实时数据同步和具体中文网站业务相关的难题也都可以通过组合改进现有技术构架解决。

更多小型中文网站构架设计专题系列

网站架构(网站架构有哪些)-第12张
网站架构(网站架构有哪些)-第13张