架构修炼之道 | 一个传统网关系统有几种 “死” 法(下)

简介: 架构修炼之道 | 一个传统网关系统有几种 “死” 法(下)

image.png


关于这两个概念的理解,我们还可以举一个例子来说明。有8个人在排队玩一个打地鼠的游戏机,要求1分钟之内要打完100个地鼠,如果有人一分钟之内没有完成这个任务,那么就需要重新排队,等待下一轮。游戏机在这里相当于CPU,正在或等待玩打地鼠游戏的人就相当于任务数量。


在玩游戏的过程中,肯定有的人在规定的1分钟之内打完100个地鼠,完成任务之后就离开了,有人没有完成任务而去重新排队,还有可能有新增的人来玩这个游戏,人数的变化相当于任务的增减。有的人拿起打地鼠的锤子就开始玩,一直打完1分钟,而有的人可能在前20秒看手机,后40秒才开始玩打地鼠。把游戏机看作CPU,排队的人数看作任务数,我们说前一种人(任务)的CPU利用率高,后一种人(任务)的CPU利用率低。


当然CPU不会在前20秒休息、后40秒工作,只是说,有的程序可能涉及的计算量比较大,CPU利用率就高,而有的程序涉及的计算少,CPU的利用率就低。不管CPU利用率是高是低,跟后面有多少人(任务)在排队没有必然的联系。

 

之所以花了一些篇幅来介绍CPU的这两个概念,因为这两个指标实在是太重要了,在线上生产环境中是需要重点监控的。鉴于API网关的访问量大和依赖系统多的特点,如果调用的API性能突然变差,在大访问量的情况下,线程数会逐渐升高,直至将CPU资源耗尽。蔓延到整个网关集群,这就是雪崩的效应。

 

关注磁盘

磁盘有两个比较重要的指标分别是磁盘使用率和磁盘负载百分比。磁盘使用率比较容易理解,我们重点说一下磁盘负载百分比这个指标。在Linux系统下查看该指标的命令为 iostat -x 1 10 (如果没有iostat ,则需要使用yum install sysstat进行安装),笔者下面的图中示例值还构不成威胁,但如果 %util 接近 100%,则说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,如下图所示。


image.png


程序运行的过程中我们可能都不会关注磁盘的使用,如果处理不当,这有可能是一个“定时炸弹”。网关的特性访问量大,再加上有的程序里面的日志打印不规范,比如日志的级别设置得不合理,把info日志打印出来。即使在日志级别合理的情况下,比如error日志,这时又涉及网关的第二个特性,依赖系统多。当有API返回失败错误的时候,就会有大量的error日志写入磁盘,很容易把磁盘打满,尤其在容器时代,每台服务器分配的磁盘容量相对物理机来说都比较小,如果集群的所有机器磁盘被打满,对网关系统来说无疑是一场灾难。

 

关注网络

在微服务系统架构下,应用离不开网络,尤其是网关系统,它的特点之一就是依赖系统多。依赖就是RPC调用和网络。在一个RPC环境下,网络占据了一次RPC调用所耗时间的很大比重。网络质量的好坏直接影响了一次请求从进入API网关到返回给用户响应的时间长短。如下图所示,网关到依赖系统B之间的网络突然变差,调用时长增加,在请求访问量多的时候,一请求一线程的模式下,会直接导致API 网关系统的任务线程数增多,如果短时间内不能恢复,则整个API网关的集群所有机器的CPU资源都会被线程耗尽。


同时现有的线上生产环境部署并不能完全保证同机房调用,甚至还有跨地区调用,因此网络是我们要考虑的一个重要因素,同时网络的因素需要和上面讲到的CPU的线程资源相关联去考虑。


image.png


现在可以总结一个传统API网关系统会有几种“死”法了,因为依赖的某个系统的API性能突然变差导致请求线程数量逐渐升高直至线程占满了CPU,也就是API网关依赖系统多的特点因素,可以认为是被其他系统“拖死”的。线上生产环境下日志输出不规范,过度打印日志,再加上请求量突然变大,导致清理工具来不及清理日志,最后磁盘满了,可以认为是被日志“打死”的。网络一直是一个除系统本身外最不稳定的因素,在系统之间调用的时候,网络发生故障导致请求变慢,这一点和第一条被其他系统“拖死”类似,只是这次是网络。


查理.芒格有一句名言:“如果我知道我会死在哪里,我将永远不去那个地方”。同样对于一个API网关系统,如果我们知道哪些因素会导致一个网关“挂掉”,那么我们就会提前防范,以避免这种“灾难”的发生。当然并不是宣扬传统网关不好,它也有自己的优势,比如编程模型简单、开发调试运维方便等。如果业务规模较小,比如每天调用量不足千万,或者不到亿级,那么可以继续使用这种类型的网关,甚至达到亿级规模之后再配合有效的容错机制(比如Netflixzuul1+Hystrix)也可以支撑上亿规模的访问量。不过我们有更好的异步网关解决方案,接下来介绍异步网关技术实现。

相关文章
|
3月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
2月前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
2月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
3月前
|
人工智能 监控 测试技术
告别只会写提示词:构建生产级LLM系统的完整架构图​
本文系统梳理了从提示词到生产级LLM产品的八大核心能力:提示词工程、上下文工程、微调、RAG、智能体开发、部署、优化与可观测性,助你构建可落地、可迭代的AI产品体系。
587 51
|
2月前
|
机器学习/深度学习 人工智能 缓存
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
本文提出面向边缘通用智能的多大语言模型(Multi-LLM)系统,通过协同架构、信任机制与动态编排,突破传统边缘AI的局限。融合合作、竞争与集成三种范式,结合模型压缩、分布式推理与上下文优化技术,实现高效、可靠、低延迟的边缘智能,推动复杂场景下的泛化与自主决策能力。
280 3
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
|
2月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
|
3月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
383 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
3月前
|
前端开发 API 定位技术
如何开发车辆管理系统中的用车申请板块(附架构图+流程图+代码参考)
本文详细解析了如何将传统纸质车辆管理流程数字化,涵盖业务规则、审批流、调度决策及数据留痕等核心环节。内容包括用车申请模块的价值定位、系统架构设计、数据模型构建、前端表单实现及后端开发技巧,助力企业打造可落地、易扩展的车辆管理系统。
|
2月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
拔俗AI学伴智能体系统:基于大模型与智能体架构的下一代个性化学习引擎
AI学伴智能体系统融合大模型、多模态理解与自主决策,打造具备思考能力的个性化学习伙伴。通过动态推理、长期记忆、任务规划与教学逻辑优化,实现千人千面的自适应教育,助力因材施教落地,推动教育公平与效率双提升。(238字)

热门文章

最新文章