如何读懂Web服务的系统架构图

本文深入浅出地介绍了Web服务架构的扩展方式,包括CPU负载和IO负载的分散方法,以及如何通过分布式和纵向扩展来应对大规模服务需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Web服务的一个重要特点就是流量大、数据多,仅靠一台服务器肯定难以支撑大规模的服务。 所以我们经常会看到诸如以下的一些术语,教人好生不懂:

*:系统架构、物理架构、Web服务基础设施

*:应用服务器

*:数据库服务器

*:索引服务器

*:反向代理服务器

*:缓存服务器

*:分布式、可扩展性

*:cpu负载、IO负载

如果你也不懂,那么本文对你来说就是一个很好的开始,关于web服务架构方面,前面还有几篇不错的文章可供参考阅读---大型网站架构演化历程(上)、大型网站架构演化历程(下)、大型网站的灵魂——性能(请戳我)。

本文的主要目标—读懂下面这张图例:

如何读懂Web服务的系统架构图

cpu负载和I/O负载

我们从CPU和IO说起。 一个典型的Web服务就是网站服务——用户通过浏览器向服务器发起请求,服务器从数据库提取数据后,加工处理返回HTML页面给用户。

如何读懂Web服务的系统架构图

上图中的4个箭头“<—”都需要消耗Server的CPU计算资源,而从Database中获取数据则消耗IO资源。 当用户数量、请求数量上升时,Server的CPU资源告急(IO资源负载也有增加);当储存的数据量上升时,Server的IO资源也要告急。

比如说单台Server每分钟可以处理3000次请求(PV, Page View),那么每月就可以处理100万PV,超过这个数量服务器就撑不住了; 每次请求都需要从文件系统提取数据的话,由于读取磁盘所需的时间是内存的100000-1000000倍,每分钟的请求数多了数据提取速度必然跟不上,数据库就挂了。

可扩展性

如何处理规模逐渐增大服务需求呢?这要求你的系统要有可扩展性:

横向扩展:横向扩展又叫分布式,一台Server撑不住我就多来几台。 但现实远比理想复杂。

纵向扩展:纵向扩展是金融高富帅或者企业软件比较常采用的方法,因为服务器的价格和性能不成正比,性能达到一定程度后,每一分性能的提高需要投入更多的钱——服务器性能的边际价格是不断上升的。 对于互联网的草根创业团队来说,这显然是不可接受的。

cpu能力的扩展

CPU负载的分散比较容易,因为CPU的计算不存在依赖性,即当前请求的结果不依赖于上一次请求的结果。 HTTP协议的stateless就是一个很好的例子。 这样CPU撑不住的时候,我直接clone几台完全一起的就好了,而被克隆的这种服务一般就称作应用服务器。

应用服务器和Web服务器的界限并不很清晰。 Web服务器负责接收用户发过来的请求和返回资源对象给用户,而应用服务器则负责通过计算产生这个资源对象(比如调用CGI脚本)。

这样CPU的负载问题就解决了,我们的架构变成了这个样子。

如何读懂Web服务的系统架构图

I/O能力的扩展

内存读取的速度远高于磁盘,根据操作系统缓存(Cache)的原理,我们提高数据读取速度的基本思路是——提高内存大小可以显著的降低IO负载,即为你的Server换上更大更多的内存条。 相应的基本方针——当操作系统的缓存无法处理时,再进一步考虑分布式。 IO负载分散的本质也就是廉价小容量内存的分散。

IO负载的分散可比CPU的难多了,由于存在数据同步的问题,我们这里不讨论数据库服务器之间全盘的数据复制和冗余化。 既然数据量太大,大到一台服务器的内存装不下,那我们就把数据分割开来——数据分割(数据压缩也可以达到一定的效果)。

Web服务的请求是存在访问模式,比如爬虫和普通用户的访问(爬虫会请求很早以前的页面,而普通用户大多访问当前的热门页面),我们把应对用户的热门的资源对象放在一台服务器,应对爬虫的资源对象放在另一台。

即使不存在访问模式,我们也可以通过分区(Partitioning),即表分割来做到。 比如现在MySQL数据库里有一个用户ID表,用户量增长后表的record数是13亿,我们根据ID的大小来排序,分割成几个ID表,每个表几千万个ID,这样单个表大小就是GB级别——内存够装了。

不管是哪一种情况,我们都需要一台索引服务器,来做应用服务器和数据服务器的mapping。

那么现在我们的架构就是:

如何读懂Web服务的系统架构图

本文的说明就到这里为止了,相信你现在再回头看开头的那张系统架构图将会非常容易了吧。

### GraphRAG介绍 GraphRAG是一种结构化、分层的检索增强生成(Retrieval-Augmented Generation, RAG)方法,旨在处理复杂的非结构化数据并将其转化为可查询的知识图谱。这种方法不仅能够提升自然语言处理(NLP)任务中的问答性能,还能够在推理复杂信息方面表现出色[^5]。 #### 特点 - **知识图谱的应用**:与传统的仅依赖于文本片段进行匹配的方法不同,GraphRAG强调了知识图谱的重要性。它可以从原始文档中抽取实体及其关系,并以此为基础建立一个富含语义的信息网络。 - **层次化的社区构建**:通过对知识点之间的关联度分析来创建具有逻辑性的社群划分,从而使得机器学习模型更容易理解和利用这些结构性的数据来进行更精准的回答生成。 - **自动摘要功能**:针对每一个识别出来的主题域自动生成简洁明了的小结,帮助减少冗余的同时也提高了效率。 ### 安装指南 对于想要快速上手的人来说,在官方提供的预编译版本里可以直接体验到GraphRAG的强大之处;而对于那些希望深入定制或优化特定应用场景下的表现,则建议从源代码开始搭建开发环境[^4]。 准备阶段主要涉及Python虚拟环境配置以及必要的第三方库安装: ```bash conda create -n graphrag_env python=3.8 source activate graphrag_env pip install neo4j langchain streamlit ... ``` 完成上述操作后就可以按照指引进一步探索如何将自己的数据集导入系统内,并启动交互式的Web界面用于测试目的。 ### 实际运用场景举例 假设有一个医疗健康领域的企业希望通过引入先进的AI技术改善客户服务体验。借助GraphRAG框架,企业可以将内部积累下来的大量病历资料整理成易于计算机理解的形式——即所谓的“医学术语网”,进而支持客服机器人更加准确地解答患者咨询的问题,甚至辅助医生做出诊断决策。 ### Python命令行工具 要初始化整个工作流,只需一条简单的指令就能让程序跑起来,这背后涉及到一系列自动化脚本负责完成诸如索引建设等工作[^3]: ```python python -m graphrag.index ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值