详解大型网站系统的特点和架构演化发展历程

详解大型网站系统的特点和架构演化发展历程,第1张

详解大型网站系统的特点和架构演化发展历程

随着国内互联网行业的快速发展,中国大型网站系统的特征变得更加鲜明和集中。目前发展最快、用户数量最多的电子商务网站是生活服务类网站。

大型网站的挑战主要来自于庞大的用户、高并发访问和海量数据。一旦任何简单的业务需要处理数亿用户,问题就会变得棘手。大型网站的架构主要是解决这类问题。

大网站不是从零开始建,而是随着小网站业务的逐渐发展,可以逐渐演变成大网站。

一、大型网站系统的特点

俗话说“欲得其所,必先告先知。”换句话说,也是一个道理。想要使用大型网站系统,首先要了解大型网站系统的特点。

1.高并发和大流量

面对高并发用户,需要大流量接入。谷歌日均PV35亿,日均IP访问3亿。QQ最大在线人数为1.4亿(2011年数据)。

2.高可用性

系统7x24小时不间断服务。

3.海量数据

需要大量的服务器来存储和管理海量数据。脸书每周上传的照片数量接近10亿,百度收录的网页数量数百亿,谷歌有近百万台服务器为全球用户提供服务。

4.用户分布广泛,网络情况复杂。

许多大型互联网站为全球用户提供服务,用户范围广泛,各地网络情况差异很大。在国内,还存在运营商网络互通的问题。

5.治安环境不好。

由于互联网的开放性,互联网网站更容易受到攻击,几乎每天都有大型网站受到黑客攻击。

6.需求变化快,发布频繁。

不同于传统软件版本的发布频率,互联网产品为了快速适应市场,满足用户需求,发布频率非常高。一般来说,大型网站的产品新版本每周都会在网上发布,而中小型网站的发布频率更高,有时一天要发布几十次。

7.逐级展开

几乎所有的大型互联网网站都是从小网站起步,逐渐发展起来的。脸书是扎克伯格在哈佛大学宿舍开发的;谷歌的第一台服务器部署在斯坦福大学的实验室;阿里出生在马云家的客厅里。

所有好的互联网产品都是慢慢运营的,不是一开始就开发出来的,对应的是网站架构的演变过程。

二。大型网站架构的演变与发展

1。初期阶段的网站架构
网站刚开始访问的人不多,只有一台服务器绰绰有余,如图1所示。此时,应用程序、数据库和文件等所有资源都在一台服务器上。通常是Linux+Apache+Mysql+PHP架构。

2。应用服务器与数据服务分离
随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能变差,越来越多的数据导致存储不足空。这需要应用程序和数据的分离。与应用数据分离后,整个网站使用三个服务器:应用服务器、文件服务器和数据库服务器,如图2所示。
应用和数据分离后,不同特性的服务器承担不同的服务角色,极大地提高了网站和数据存储的并发处理能力空,支撑了网站业务的进一步发展。但随着用户数量的不断增加,网站再次面临挑战:数据库压力过大导致访问延迟,进而影响整个网站的性能,用户体验受到影响,需要进一步优化。
3。利用缓存提升网站性能
网站使用的缓存有两种:应用服务器上的本地缓存和专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快,但由于应用服务器的内存限制,缓存的数据量有限,会出现与应用争夺内存的情况。分布式缓存可以集群化,大内存的服务器可以部署为专门的缓存服务器,理论上可以提供缓存服务,没有内存容量限制,如图3所示。
使用缓存后,数据访问压力得到有效缓解,但单个应用服务器能够处理的请求数量有限。在网站访问高峰期,应用服务器成为整个网站的瓶颈。

4。利用应用服务器集群提高网站的并发性

利用集群是彻底解决高并发、海量数据问题的常用手段。当一台服务器的处理能力和存储空不足时,可以增加一台服务器来分担原服务器的访问和存储压力。就网站结构而言,只要增加一台服务器就能改善负载压力,同样通过增加服务器就能不断提升系统性能,从而实现系统的可扩展性。
通过负载均衡调度服务器,可以将用户浏览器的访问请求分发到应用服务器集群中的任意一台服务器上。如果用户多了,集群中的应用服务器多了,应用服务器的负载压力就不再成为整个网站的瓶颈。

5。数据库读写分离
使用缓存后,大部分数据读取 *** 作都可以不经过数据库完成,但仍有部分读取 *** 作(缓存未命中和缓存过期)和所有写入 *** 作需要访问数据库,网站用户数达到一定水平。
目前大多数主流数据库都提供主从热备功能。通过配置两个数据库之间的主从关系,一个数据库服务器的数据库更新可以同步到另一个服务器。利用网站数据库的这个功能实现数据库读写分离,从而改善数据库负载压力,如图5所示。
应用服务器写数据时,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样应用服务读取数据时,就可以从从数据库获取数据。为了方便应用程序在读写分离后访问数据库,通常在应用服务器端使用专门的数据访问模块,使得数据库读写分离对应用透明。

6。利用反向代理和CDN加快网站响应
随着网站业务的不断发展,用户规模越来越大。由于国内网络环境复杂,不同地区用户访问网站的速度也有很大差异。研究表明,网站访问延迟与用户流失率正相关。网站访问速度越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,并在未来留住用户,网站需要加快网站访问速度。主要手段是使用CDN和反向代理,如图6所示。
CDN和反向代理的基本原理是缓存。不同的是,CDN部署在网络提供商的机房,用户在请求网站服务时,可以从最近的网络提供商机房获取数据;反向代理部署在网站的中央机房。当用户的请求到达中心机房时,第一个访问的服务器是反向代理服务器。如果用户请求的资源缓存在反向代理服务器中,将直接返回给用户。
使用CDN和反向代理的目的是为了尽快将数据返回给用户。一方面可以加快用户的访问速度,另一方面可以减轻后端服务器的负载压力。

7。使用分布式文件系统和分布式数据库系统

没有一个强大的单一服务器能够满足大型网站不断增长的业务需求。读写分离后,数据库从一个服务器拆分到两个服务器,但是随着网站业务的发展,还是不能满足需求,所以需要使用分布式数据库。文件系统也是如此,需要使用分布式文件系统,如图7所示。
分布式数据库是网站数据库拆分的最后手段,只在单个表的数据非常大的时候使用。不得已,网站比较常用的数据库拆分方法是业务分库,将不同的业务数据库部署在不同的素材服务器上。

8。使用NoSQL和搜索引擎
随着网站业务的日益复杂,数据存储和检索的日益复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎,如图8所示。
NoSQL和搜索引擎都是源于互联网的技术手段,对可扩展的分布式特性有较好的支持。服务器通过统一的数据访问模块访问各种数据,减少了管理众多数据源的麻烦。

9。业务拆分
大型网站为了应对日益复杂的业务场景,采用分而治之的方式,将整个网站业务划分到不同的产品线中。比如大型购物网站会把首页、店铺、订单、买家卖家拆分成不同的产品线,归入不同的商家。
从技术上来说,一个网站也会按照产品线划分拆分成很多不同的应用,每个应用都会独立部署和维护。应用程序可以通过超链接建立关系,或者通过消息队列分发数据。当然,大多数应用程序可以访问同一个数据存储系统,形成一个相关的完整系统,如图9所示。

10。分布式服务
随着业务拆分越来越小,存储系统越来越大,应用系统的整体复杂度呈指数级增长,部署和维护越来越困难。因为所有的应用程序都必须连接到所有的数据库系统,所以在数万个服务器规模的网站中,这些连接的数量是服务器规模的平方,从而导致数据库连接资源不足和拒绝服务。
由于每个应用系统都需要执行许多相同的业务 *** 作,如用户管理、商品管理等。,这些常见的业务可以独立提取和部署。这些可重用的服务连接到数据库提供公共业务服务,而应用系统只需要管理用户界面,通过分布式服务调用公共业务服务来完成具体的业务 *** 作,如图10所示。
大型网站的架构在这里演进,基本上解决了大部分的技术问题,比如跨数据中心的实时数据同步,以及与具体网站业务相关的问题,也可以通过结合和改进现有的技术架构来解决。

三。大型网站架构模式

最后我们说的是最常见的架构模型,就是在横向维度上把系统分成几个部分,每个部分都有一个单独的职责。

1.分层

它是分层应用系统中最常见的架构模式,在计算机世界中无处不在。它可以更好地将庞大的软件系统分成不同的部分,便于分工、协作和维护。

分层的挑战在于合理规划层的边界和接口,严格遵守分层的约束,禁止跨层调用和反向调用。

2.分割

垂直拆分软件。比如网购系统,在应用层,分为交易、物流、折扣、库存等系统。

3.分布式的

分段和分层方便,分段后的模块可以方便分布式部署。分布式应用和服务、分布式文件系统、分布式数据和存储、分布式计算、分布式配置、分布式锁。

4.串

多个服务器部署同一个应用程序组成一个集群,可以保证负载均衡,提高系统的可用性,互相进行容灾。

5.贮藏

CDN,反向代理,本地缓存,分布式缓存,数据库缓存,浏览器缓存。

6.异步的

异步架构中最典型的模型是生产者和消费者模型。为了解耦,使用了异步,异步不能与队列分离。有效使用异步可以消除并发访问的高峰。

7.裁员

当一个集群中的机器数量达到一定数量时,部分机器宕机是正常的,所以需要冗余的数据备份。常规的数据库备份称为冷备份,主从分离的实时同步称为热备份。

8.自动化

发布过程自动化、代码管理自动化、自动化测试、自动化安全扫描、自动化低级错误扫描、自动化监控、自动化警报、自动化故障转移、自动化降级。

9.安全

互联网的开放性注定会在安全方面带来巨大挑战。

好的设计绝对不是模仿,也不是机械地照搬某个特定的模式,而是基于对问题的深刻理解而进行的创造和创新。

一个架构师最大的价值不在于他掌握了多少先进的技术,而在于他能够把一个大系统分成N个耦合度很低的子模块。这些子模块包括横向业务模块和纵向基础技术模块。这种能力一部分来自专业技术和经验,一部分来自架构师对业务场景的理解,对人性的把握,甚至对世界的认识。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/748426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-29
下一篇 2022-04-29

发表评论

登录后才能评论

评论列表(0条)

保存