架构05- 理解架构的演进

关注公众号:领取架构师面试资料
 

在学习架构时,首要的步骤并不是去学习具体的框架,而是要了解架构的演进过程。我强烈推荐您阅读李智慧老师的《大型网站技术架构》这本书。这本书内容丰富,阅读起来很迅速,对于建立自己的技术知识体系非常有帮助。本文的内容就是参考了该书,并在此基础上进行了扩展和解释。

架构的演进:

    大型网站架构的技术挑战主要源于庞大的用户数量、高并发访问和海量数据处理。当一个简单的业务需求需要处理数以P计的数据和应对数以亿计的用户时,问题就会变得非常复杂。因此,大型网站架构的核心目标就是解决这些挑战。在选择架构时,需要根据当前业务需求进行,并在满足业务需求的前提下,确保架构具备足够的扩展性,同时避免过度设计。每次架构升级都是为了解决系统瓶颈而进行的改进,以持续满足业务的需求。

初始阶段的网站架构:

在初始阶段,网站通常相对简单,可以通过一台服务器来满足需求。这样的架构较为简单,没有复杂的分布式系统和大规模的数据处理。请参考下图。

架构05- 理解架构的演进_第1张图片

应用服务和数据服务分离:

    随着网站业务的不断发展,单台服务器逐渐无法满足需求。在这种情况下,需要将应用和数据分离,以实现更好的扩展性和性能。这样的架构设计能够有效地提高系统的稳定性和可靠性,并且能够更好地处理大规模的流量和数据量。请参考下图。

架构05- 理解架构的演进_第2张图片

使用缓存改善网站性能:

现在的网站普遍采用缓存技术来提升性能。这是因为大多数网站的80%的业务访问都集中在20%的数据上。换句话说,只有少部分数据会频繁被访问,而其他数据可能很少被使用。通过在这些热门数据上设置缓存,可以有效降低数据库负载并加快数据访问速度。这种方式可以显著提升网站的响应速度和用户体验。

架构05- 理解架构的演进_第3张图片

使用应用服务器集群改善网站的并发处理能力:

现在的网站在高访问量的情况下往往会面临应用服务器成为瓶颈的问题。为了解决这个问题,一种必然选择是使用负载均衡处理器。负载均衡处理器可以将来自浏览器的请求均匀地分发到应用服务器集群中的各台服务器上。也就是说,当用户发送请求时,负载均衡处理器会根据一定的调度算法从应用服务器集群中选择一台服务器来处理该请求。这样可以实现并行处理,提高整个网站的并发能力和性能。通过使用负载均衡处理器,可以最大程度地利用服务器资源,避免单一服务器超负荷运行。同时,它还能提供高可用性和容错能力,即当某台服务器出现故障时,负载均衡处理器可以自动将请求转发到其他正常运行的服务器上,从而保证整个网站的稳定性和可用性。

架构05- 理解架构的演进_第4张图片

数据库读写分离:

当网站用户规模逐渐增大时,数据库往往会成为网站的瓶颈,因为数据库需要承担大量的读写请求压力。为了解决这个问题,主流的数据库都提供了主从热备功能。所谓主从热备,就是通过配置两台数据库服务器之间的主从关系,将一台数据库称为主数据库,另一台称为从数据库。当主数据库发生数据更新操作时,这些更新会被实时地同步到从数据库上。同时,从数据库可以迅速地处理读取操作,不再依赖主数据库。通过利用数据库主从热备功能,网站可以进行数据库读写分离,即将读取请求分发到从数据库上,而将写入请求发送至主数据库。这样做的好处是,读取操作可以在多台服务器上并行处理,从而分担了主数据库的负载压力,提高了数据库的并发处理能力和整体性能。此外,主从热备还具有高可用性的特点。当主数据库发生故障或不可用时,系统可以自动切换到从数据库,确保数据的持续可访问性和服务的连续性。总而言之,通过配置数据库主从热备关系并实现读写分离,网站能够改善数据库负载压力,提高并发性能,并具备高可用性和容灾能力。

架构05- 理解架构的演进_第5张图片

使用反向代理和CDN加速网站响应:

提高网站的访问速度可以采用两种主要手段:使用CDN(内容分发网络)和反向代理。CDN和反向代理的基本原理都是利用缓存技术来加快用户获取网站内容的速度。它们的区别在于部署位置不同。CDN通常由网络提供商在全国或全球范围内建立了多个机房,在离用户较近的机房中缓存了网站的静态资源,如图片、CSS和JavaScript文件等。当用户请求访问网站时,其访问会被重定向到离用户最近的CDN机房,CDN会优先返回缓存中的静态资源,从而提高了用户访问速度和体验。此外,CDN还可以有效分担网站服务器的负载压力。反向代理则是部署在网站中心机房的服务器,用户的请求首先到达该服务器。反向代理服务器会根据事先设定的规则,判断用户请求的资源是否存在于自己的缓存中。如果有缓存,则直接返回给用户,避免了再次访问真实的网站服务器,提高了响应速度。如果没有缓存,则反向代理服务器会代表用户向后端的网站服务器发送请求,并将响应再返回给用户。通过反向代理,网站可以减轻网站服务器的负载,提高用户的访问速度。总而言之,CDN和反向代理都通过缓存技术来提高网站的访问速度。CDN通过在离用户较近的机房缓存静态资源,减少了用户与网站服务器之间的网络延迟;而反向代理则在中心机房部署,缓存并加速用户请求的资源,同时减轻了网站服务器的负载压力。这两种手段都能有效地优化网站性能,提升用户体验。

架构05- 理解架构的演进_第6张图片

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

对于持续增长的大型网站来说,单一服务器往往无法满足其业务需求。分布式数据库是在数据库规模非常庞大、单表数据量巨大时才使用的一种解决方案,通常被视为最后的手段。因此,在网站数据库拆分时,更常见的做法是进行业务拆分。这意味着将不同的业务数据部署在不同的物理服务器上。通过将业务数据分散到多个服务器上,可以实现负载均衡和并行处理,提高系统的性能和可伸缩性。具体而言,可以按照业务模块或功能模块对数据进行划分,每个部分的数据存储在对应的数据库中,并在服务器端进行逻辑隔离。这样一来,当某一业务模块需要水平扩展时,只需增加相应的服务器和数据库,而不会影响其他业务的正常运行。通过业务拆分,网站可以充分利用多台服务器的计算能力和存储资源,提高整体性能并增强系统的扩展性。每个服务器专注处理自己所负责的业务数据,减轻了单一服务器的压力,提高了系统的稳定性和可靠性。总之,对于大型网站来说,单一服务器无法满足业务需求时,常用的数据库拆分手段是通过业务拆分将不同业务的数据部署在不同的物理服务器上。这种方式可以实现负载均衡、并行处理和系统的横向扩展,提升网站的性能和可伸缩性。

架构05- 理解架构的演进_第7张图片

使用NoSQL和搜索引擎:

对于现在的大型网站来说,搜索引擎已成为必备的功能之一。为了满足用户对快速高效搜索的需求,网站需要采用一些非关系数据库技术,比如NoSQL,并结合非数据库查询技术,如搜索引擎。传统的关系型数据库在处理海量数据时性能可能会受到限制,而NoSQL数据库具有良好的可扩展性和高性能特点。通过使用NoSQL数据库,网站可以更好地应对大规模数据存储和访问的挑战。另外,传统的关系型数据库虽然支持基本的全文搜索功能,但对于复杂的搜索需求,如全文检索、相关性排序等,则需要借助专门的搜索引擎来实现。搜索引擎以其强大的搜索算法和索引机制,能够快速检索和返回相关的搜索结果。因此,大型网站通常会选择采用非关系数据库技术如NoSQL来存储和管理数据,并结合搜索引擎技术来实现高效的搜索功能。这样不仅可以提高用户搜索体验,还可以更好地支持网站的业务发展和应对日益增长的数据量。

架构05- 理解架构的演进_第8张图片

业务拆分:

大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将真个网站业务拆分成不同的产品线。具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过超链接建立管理,也可以通过消息队列进行数据分发。

架构05- 理解架构的演进_第9张图片

分布式服务:

分布式服务是通过将系统设计为由多个独立的节点组成,并通过相互协作来完成各种任务和功能。每个节点都拥有自己的计算能力和存储资源,并且可以 ** 运行和处理请求。通过利用网络通信和协调机制,这些节点可以相互通信和共享数据,以提供用户所需的服务。分布式服务的好处在于它可以提供高可用性和容错性。如果一个节点发生故障或失效,其他节点可以接管其工作并继续提供服务,确保系统的连续性和可靠性。此外,由于资源分散在多个节点上,系统可以根据需求进行横向扩展,以应对不断增长的负载和用户数量。总的来说,分布式服务是一种利用多个 ** 节点分布在不同位置上的架构方式,通过协作和通信实现系统功能和服务的提供。这种架构模式可以提供高可用性、容错性和扩展性,适用于需要处理大量数据和高并发访问的场景。

架构05- 理解架构的演进_第10张图片

关注公众号:领取架构师面试资料

你可能感兴趣的:(架构)