网站设计_详细介绍了大型网站系统的演变过程和架构设计
发表时间:2022-05-05 16:30:24
文章来源:超级管理员
浏览次数:112

大型网站一步步演变,架构师需要了解整体架构的演变过程@mikechen
1.并发性高,流量大
需要面对高并发用户,大流量访问。
2.高可用
系统 7 x 24 小时不间断服务。
3.海量数据
大量数据需要存储和管理,大量服务器需要使用。
4.用户分布广泛,网络情况复杂
许多大型互联网网站为世界各地的用户提供服务,用户分布广泛,网络条件也非常不同。在中国,也存在着运营商网络交换困难的问题。
5.恶劣的安全环境
由于互联网的开放性,互联网网站更容易受到攻击,大型网站几乎每天都被黑客攻击。
6.需求变化迅速,发布频繁
与传统软件的版本发布频率不同,互联网产品发布频率非常高,以快速适应市场,满足用户需求。一般来说,大型网站的产品每周都会发布新版本,中小型网站更频繁,有时每天发布几十次。
7.渐进式发展
几乎所有的大型互联网网站都是从一个小网站逐渐发展起来的。好的互联网产品运营缓慢,一开始没有开发好,这正好对应于网站结构的发展演变过程。
大型网站是从小网站开发出来的,网站架构也是如此,是从小网站架构逐渐演变而来的。
一开始,没有多少人访问小网站,只需要一个服务器就足够了。此时,网站架构如下图所示:

服务器上有所有的资源,如应用程序、数据库、文件等。
随着网站业务的发展,服务器逐渐无法满足需求:越来越多的用户访问导致性能差,越来越多的数据导致存储空间不足。
此时,需要将应用程序与数据分离。在应用程序和数据分离后,整个网站使用三个服务器:应用程序服务器、文件服务器和数据库服务器,对硬件资源有不同的要求:
应用服务器需要处理大量的业务逻辑,因此需要更快、更强大CPU;
数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的磁盘和更大的内存;
文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。
此时,网站系统的架构如下图所示:

应用程序和数据分离后,不同特性的服务器承担不同的服务角色,大大提高了网站的并发处理能力和数据存储空间,支持了网站业务的进一步发展。
然而,随着用户数量的逐渐增加,网站再次面临挑战:数据库压力过大导致访问延迟,从而影响整个网站的性能和用户体验。此时,需要进一步优化网站架构。
网站访问的特点与现实世界的财富分配相同:80%的业务访问集中在20%的数据上。
由于大多数业务访问集中在一小部分数据上,如果将这一小部分数据缓存在内存中,可以减少数据库访问压力,提高整个网站的数据访问速度,提高数据库的写入性能。
本网站使用的缓存可分为两种:本地缓存和专用分布式缓存服务器上的远程缓存。
本地缓存访问速度较快,但受应用服务器内存限制,缓存数据量有限,与应用程序内存竞争。
远程分布式缓存可以作为专用缓存服务器部署大内存服务器,理论上可以实现不受内存容量限制的缓存服务。

使用缓存后,数据访问压力得到有效缓解,但单个应用服务器可以处理的要求连接有限。在网站访问高峰期,应用服务器成为整个网站的瓶颈。
使用集群是网站解决高并发、海量数据问题的常用手段。
当服务器处理能力和存储空间不足时,不要试图更换更强大的服务器。对于大型网站来说,无论服务器有多强大,都不能满足网站不断增长的业务需求。
在这种情况下,更合适的方法是增加服务器共享原始服务器的访问和存储压力。
对于网站架构,只要能通过增加服务器来提高负载压力,服务器就可以继续以同样的方式提高系统性能,从而实现系统的可伸缩性。
实现应用服务器集群是网站可伸缩架构设计中比较简单成熟的一种,如下图所示:

通过负载平衡调度服务器,用户浏览器的访问请求可以分发给应用服务器集群中的任何服务器。如果有更多的用户,在集群中添加更多的应用服务器,使应用服务器的压力不再成为整个网站的瓶颈。
网站使用缓存后,大部分数据读取操作访问不能通过数据库完成,但仍有部分读取操作(缓存访问、缓存过期)和所有写作操作需要访问数据库,在网站用户达到一定规模后,数据库由于负载压力过高,成为网站的瓶颈。
目前,大多数主流数据库都提供主从热准备功能。通过配置两个数据库主从关系,一个数据库服务器的数据可以更新到另一个服务器。
如下图所示:

在编写数据时,应用程序服务器访问主数据库,主数据库通过主复制机制将数据更新同步到从数据库,这样当应用程序服务器读取数据时,数据就可以从数据库中获取。
为了方便应用程序访问读写分离后的数据库,应用服务器端通常使用特殊的数据访问模块,使数据库读写分离对应用程序透明。
随着网站业务的不断发展,用户规模越来越大。由于中国复杂的网络环境,不同地区的用户在访问网站时速度差异很大。研究表明,网站访问延迟与用户流失率正相关。网站访问越慢,用户就越容易失去耐心离开。
为了提供更好的用户体验,留住用户,网站需要加快网站访问速度,使用主要手段CDN 和方向代理,如下图所示:

CDN 和反向代理的基本原理是缓存。
CDN 部署在网络提供商的机房,让用户在要求网站服务时,从最近的网络提供商机房获取数据
反向代理部署在网站的中心机房。当用户要求到达中心机房时,首先访问的服务器是反向代理服务器。如果反向代理服务器中有用户要求的资源,则直接返回给用户
使用 CDN 和反向代理的目的是尽快将数据返回给用户,一方面加快用户访问,另一方面降低后端服务器的负载压力。
任何强大的单一服务器都不能满足大型网站不断增长的业务需求。读写分离后,数据库从一个服务器分为两个服务器,但随着网站业务的发展,分布式数据库仍然不能满足需求。
如下图所示,文件系统也是如此。

分布式数据库是网站数据库拆分的最终手段,只有在单表数据非常大的时候才使用。当必要时,网站上更常用的数据库拆分方法是在不同的物理服务器上部署不同业务的数据。
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。NoSQL搜索引擎等非数据库查询技术。
如下图所示:

NoSQL 和搜索引擎都是来自互联网的技术手段,更好地支持可伸缩的分布式特性。应用服务器通过统一的数据访问模块访问各种数据,以减少应用程序管理许多数据源的麻烦。
为了应对日益复杂的业务场景,大型网站将整个网站业务分为不同的产品线。
例如,大型购物交易网站将主页、商店、订单、买家、卖家等分为不同的产品线,分为不同的业务团队。

在技术上,一个网站也会根据产品线分割成许多不同的应用程序,每个应用程序都会独立部署。应用程序可以通过超链接建立关系(主页上的每个导航链接都指向不同的应用程序地址),或者通过信息队列分发数据。当然,最重要的是通过访问相同的数据存储系统来构成相关的完整系统。
随着业务拆分越来越小,存储系统越来越大,应用系统的整体复杂性呈指数级增加,部署和维护越来越困难。
由于所有应用程序都需要连接到所有的数据库系统,这些连接的数量是服务器规模的平方米,导致数据库连接资源不足,拒绝服务。
由于每个应用程序系统都需要执行许多相同的业务操作,如用户管理、商品管理等,因此可以提取这些共享业务并独立部署。这些可重用的业务连接数据库提供共享业务服务,应用程序系统只需管理用户界面,并通过分布式服务呼叫共享业务服务来完成具体的业务操作。
如下图所示:

随着大型网站架构的演变,大多数技术问题都得到了解决,如跨数据中心的实时数据同步和具体网站业务相关问题也可以通过组合改进现有的技术架构来解决。

