大型网站架构演进和架构师需具备的基础能力

[架构设计] 01 大型网站架构演进

用户最初通过在浏览器地址栏输入网址来上网,打开的是静态单页网站,包含HTML、JavaScript和CSS样式。

image-20240326142713875

随着时间发展,网站进化成动态交互模式,引入了数据库,使用户能与服务器进行双向交互,如增加、删除、修改数据。

image-20240326143413170

随后出现了单体架构,用户访问服务器,而服务器内部署了应用程序、文件服务器和数据库。

image-20240326143454416

但随着流量增加,为避免服务器性能下降,将不同功能分离部署:网站数据放在应用服务器,用户上传的文件存储在文件服务器,数据库也独立部署。这种分离可以降低用户请求的延迟,提高并发能力和存储空间。

image-20240326143523416

然而,单体服务仍有瓶颈,为解决大规模用户访问问题,引入了缓存中间件,减轻数据库压力并提高用户体验。

image-20240326143606182

但单节点部署存在风险,因此进一步发展为集群负载均衡,通过部署多个相同的应用实例(集群)来分摊流量,提升整体系统性能。

image-20240326143658594

当读操作占大部分时,采用读写分离策略,设置主从数据库以优化性能。

image-20240326143725837

进一步地,当单表数据量巨大时,采用分库分表策略,将数据散列到不同数据库中,实现分布式数据库。

image-20240326143753609

海量数据检索可以引入搜索引擎技术(如 ElasticSearch)贴合用户需求,也可以保护数据库。

image-20240326143842523

最后,面对业务复杂性,采取微服务架构,将业务拆分成独立的子项目,每个子项目有自己的数据库并可独立扩展。但这增加了代码复杂性和运维难度,同时需处理分布式事务问题。

image-20240326144139535

整个演变过程根据企业业务需求灵活调整,目标是满足用户需求,保证系统稳定高效运行。

image-20240326144301774

架构师应该具备的能力和技术知识

成为Java架构师,需要驾驭大型互联网的架构与落地。主要技术包括前后端分离架构、负载均衡、微服务、数据库读写分离、缓存技术和消息队列等。

  • 前后端分离架构:用户请求首先会经过前端,然后进入后端。负载均衡器负责将请求分发到不同的服务器,以保证系统的高可用性。
  • 微服务架构:微服务是一个独立的系统,有自己的数据库,可以与其他服务进行通信。当请求量增大时,可以通过读写分离和缓存技术来减轻数据库的压力。
  • 数据库读写分离和缓存技术:为了提高效率,可以将一部分常用数据存储在缓存中,减少对数据库的访问。同时,数据库之间也可以通过读写分离来分散压力。
  • 消息队列:服务之间可以通过消息队列进行通信,也可以调用公共资源,如推送、短信和邮件等。

大型互联网系统的架构和实施过程

image-20240326151429901

  • 前端和后端交互的过程及其中涉及的关键技术

    • 当用户通过浏览器或移动设备等方式访问网站时,前端负责接收用户的请求并将它们传递给后台。
    • 为了提高可用性和可靠性,在此过程中通常会引入负载均衡器(如Nginx)将流量分配到多台服务器上。如果一台服务器出现问题,另一台备机会立即接管工作。
  • 深入解析Spring Cloud微服务体系结构及其组成部分

  • 微服务架构下,每项业务功能都被视为独立的服务单元。每个服务都有自己的数据库用于存储相关的数据信息,并支持读写分离策略以降低数据库压力。Redis缓存的作用,可以加速某些频繁使用的数据操作。

  • 分布式系统的设计原则和关键挑战

    • 分布式系统的核心概念——数据一致性和事务隔离性等问题。
    • 如何利用锁机制来解决这些问题,解决方案—分布式Session。
    • 应对高并发情况下的限流问题以及分布式日志记录的问题。
    • 其他重要的技术解决方案例如Distributed File System (DFS) 和 Elasticsearch Search Engine(ES)
    • 其中提到的Elasticsearch搜索引擎(ES)是一款开源的企业搜索平台,它可以处理大量的数据,并提供快速高效的查询结果。此外,该引擎还可以与其他工具和服务集成,如Apache Hadoop和Amazon Web Services等,从而进一步增强其性能和实用性。

Views: 35