大型网站一步一步进化,架构师需要了解整体架构的进化过程@mikechen
大型网站系统的特点
1.高并发和大流量
面对高并发用户,需要大流量接入。
2.高可用性
系统7 x 24小时不间断服务。
3.海量数据
需要大量的服务器来存储和管理海量数据。
4.用户分布广泛,网络情况复杂。
许多大型互联网站为全球用户提供服务,用户范围广泛,各地网络情况差异很大。在国内,还存在运营商网络互通的问题。
5.恶劣的安全环境
由于互联网的开放性,互联网网站更容易受到攻击,几乎每天都有大型网站受到黑客攻击。
6.需求变化快,发布频繁。
不同于传统软件版本的发布频率,互联网产品为了快速适应市场,满足用户需求,发布频率非常高。一般来说,大型网站的产品新版本每周都会在网上发布,而中小型网站的发布频率更高,有时一天要发布几十次。
7.逐级展开
几乎所有的大型互联网网站都是从小网站起步,逐渐发展起来的。好的互联网产品都是慢慢运营的,不是一开始就开发出来的,这正好对应了网站架构的发展演变过程。
1.初级阶段的网站架构
大型网站是从小网站发展而来,网站架构也是如此,从小网站逐渐演变而来。
小网站刚开始访问的人不多,只有一台服务器就绰绰有余了。此时,网站架构如下图所示:
所有资源,如应用程序、数据库、文件等。都在一台服务器上。
2.应用服务和数据服务的分离
随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问,导致性能变差,越来越多的数据导致存储不足空。
这时候就需要把应用和数据分开。与应用数据分离后,整个网站使用三个服务器:应用服务器、文件服务器、数据库服务器。这三台服务器对硬件资源有不同的要求:
服务器需要处理大量的业务逻辑,所以需要更快更强大的CPU。
数据库需要快速的磁盘检索和数据缓存,所以需要更快的磁盘和更大的内存。
服务器需要存储用户上传的大量文件,所以需要更大的硬盘。
至此,网站系统的架构如下图所示:
从应用数据中分离出来后,不同特性的服务器承担不同的服务角色,网站的并发处理能力和数据存储空得到了很大的提升,支撑了网站业务的进一步发展。
然而,随着用户数量的不断增加,网站再次面临挑战:过多的数据库压力导致访问延迟,进而影响整个网站的性能和用户体验。这时候就需要进一步优化网站架构了。
3.使用缓存提高网站性能
网站的特点遵循二八定律:80%的业务访问量集中在20%的数据上,就像现实世界中财富的分配一样。
由于大部分业务访问都集中在少量数据上,如果将这少量数据缓存在内存中,可以减轻数据库访问的压力,提高整个网站的数据访问速度,提高数据库的写性能。
网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和存储在专门的分布式缓存服务器上的远程缓存。
本地缓存的访问速度更快,但由于应用服务器的内存限制,缓存的数据量有限,会出现与应用争夺内存的情况。
分布式缓存可以集群化,大内存的服务器可以部署成专门的缓存服务器,理论上可以提供不受内存容量限制的缓存服务。
使用缓存后,数据访问压力得到有效缓解,但单个应用服务器能够处理的请求和连接有限,应用服务器在网站访问高峰期成为整个网站的瓶颈。
4.利用应用服务器集群提高网站的并发处理能力。
集群是网站解决高并发、海量数据问题的常用手段。
当一台服务器的处理能力和存储空不足时,不要试图更换更强大的服务器。对于大型网站来说,服务器再强大,也无法满足网站不断增长的业务需求。
在这种情况下,增加一个服务器来分担原有服务器的访问和存储压力是比较合适的。
就网站架构而言,只要增加一台服务器就能改善负载压力,同样通过增加服务器就能不断提升系统性能,从而实现系统的可扩展性。
服务器实现集群是网站可扩展架构设计中相对简单和成熟的一种,如下图所示:
通过负载平衡调度服务器,来自用户浏览器的访问请求可以被分发到应用服务器集群中的任何服务器。如果用户多了,就会有更多的应用服务器加入集群,这样应用服务器的压力就不再成为整个网站的瓶颈。
5.数据库读写分离
使用缓存后,大多数数据读取操作都可以在没有数据库的情况下访问。但是,一些读取操作(缓存未命中和缓存过期)和所有写入操作都需要访问数据库。网站用户达到一定规模后,由于负载压力大,数据库成为网站的瓶颈。
目前,大多数主流数据库都提供主从热备功能。通过配置两个数据库之间的主从关系,一个数据库服务器的数据更新可以同步到另一个服务器。
利用网站数据库的这个功能实现数据库读写分离,从而提高数据库负载压力,如下图所示:
应用服务器写数据时访问主数据库,主数据库通过主从***机制将数据更新同步到从数据库,这样应用服务器读数据时就可以从从数据库获取数据。
为了方便应用程序在读写分离后访问数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。
6.使用反向代理和CDN加快网站响应速度
随着网站业务的不断发展,用户规模越来越大。由于国内网络环境复杂,不同地区用户访问网站的速度也有很大差异。研究表明,网站访问延迟与用户流失率正相关。网站访问速度越慢,用户越容易失去耐心而离开。
为了提供更好的用户体验,留住用户,网站需要加快网站访问速度。主要手段是使用CDN和定向代理,如下图所示:
CDN和反向代理的基本原理是缓存。
CDN部署在网络提供商的机房中,以便用户在请求网站服务时可以从最近的网络提供商的机房中获取数据。
反向代理部署在网站的中央机房。当用户的请求到达中心机房时,第一个访问的服务器是反向代理服务器。如果用户请求的资源缓存在反向代理服务器中,将直接返回给用户。
使用CDN和反向代理的目的是尽快将数据返回给用户,一方面加快用户的访问速度,另一方面减轻后端服务器的负载压力。
7.使用分布式文件系统和分布式数据库系统。
没有一台强大的服务器能够满足大型网站不断增长的业务需求。读写分离后,数据库从一台服务器拆分到两台服务器,但随着网站业务的发展,仍然不能满足需求。这时候就需要使用分布式数据库了。
文件系统也是如此,需要使用分布式文件系统,如下图所示:
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常大的情况下才能使用。不得已,网站比较常用的数据库拆分方式是业务分库,将不同业务的数据部署在不同的物理服务器上。
8.使用NoSQL和搜索引擎
随着网站业务的日益复杂,对数据存储和检索的需求也越来越复杂。网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
如下图所示:
NoSQL和搜索引擎都是来自互联网的技术手段,对可扩展的分布式特性有较好的支持。服务器通过统一的数据访问模块访问各种数据,减少了管理众多数据源的麻烦。
9.业务拆分
为了应对日益复杂的业务场景,大型网站采用分而治之的方式,将整个网站业务划分为不同的产品线。
比如大型购物网站会将首页、店铺、订单、买家、卖家等拆分。分成不同的产品线,并分配给不同的业务团队。
技术上,按照产品线划分,一个网站会拆分成很多不同的应用,每个应用独立部署。应用程序可以通过超链接(主页上的导航链接都指向不同的应用程序地址)建立关系,也可以通过消息队列分发数据。当然,最常见的方式是访问同一个数据存储系统,形成一个关联的完整系统。
10.分布式服务
随着业务拆分越来越小,存储系统越来越大,应用系统的整体复杂度呈指数级增长,部署和维护变得越来越困难。
因为所有的应用程序都必须连接到所有的数据库系统,所以在数万个服务器规模的网站中,这些连接的数量是服务器规模的平方,从而导致数据库连接资源不足和拒绝服务。
因为每个应用系统都需要执行许多相同的业务操作,如用户管理、商品管理等。,这些共享业务可以独立提取和部署。这些可复用的服务连接到数据库提供通用的业务服务,而应用系统只需要管理用户界面,通过分布式服务调用通用的业务服务来完成具体的业务操作。
如下图所示:
大型网站的架构在这里演进,基本上解决了大部分的技术问题,比如跨数据中心的实时数据同步,以及与具体网站业务相关的问题,也可以通过结合和改进现有的技术架构来解决。
更多大型网站架构设计专题系列
更特别的大型网站架构设计系列
本文来自是我太自作多情投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/480474.html