本文旨在解决产品生命周期中可能演变的特定能问题以及如何解决这些问题。
软件的能都是衡量该在给定工作负载和给定硬件下的速度或响应速度的指标。我所说的工作负载是指后端的数据需求,请求量和硬件可以通过的容量来定义,例如 CPU、内存等。
如何识别能问题
大多数能问题都是由于代码块效率低下而建立的队列演变而来的,这会导致处理速度、串行访问而不是并发访问或资源有限,这些资源无法满足处理所需的容量。
什么是延迟? 它是以时间单位衡量请求-响应在中花费的时间的度量 。我们能的目标应该是化延迟。
什么是吞吐量? 吞吐量是衡量在给定时间内可以处理多少个请求的指标。它是一种速率,因此它被测量为请求处理的速率,它取决于延迟。我们的目标应该是限度地吞吐量。
您认为我们如何解决延迟瓶颈?
延迟瓶颈可以分为两大类:与连接相关和与数据传输相关。我们现在将看到他们俩。
连接瓶颈 可以使用连接池或连接来解决与连接相关的问题。数据库连接池是一种通过打开连接的“池”来降低打开和关闭连接的成本的方法,该“池”可以根据需要从数据库操作传递到数据库操作。连接,也称为超文本传输协议 (HTTP) 连接,是指对进一步的 HTTP 请求和响应保持打开状态的通信通道,而不是在单次交换后关闭。连接也称为 HTTP 保持活动状态和 HTTP 连接重用。
数据传输瓶颈 数据传输瓶颈可以通过使用缓存或限制数据格式和增加压缩来解决。数据缓存是将数据或文件的多个存储在临时存储位置或缓存中以便可以更快地访问它们的过程。限制数据格式可以通过减小必须通过传输的数据的大小来实现,压缩是指使用压缩软件或程序使用的特定公式和精心设计的算法来减小各种数据的大小。
如何解决内存延迟问题
内存延迟瓶颈可能由四大类型引起。我们将一一讨论。
避免记忆 我们的进程应该尽可能少的内存和有限的代码,因为代码库也加载到内存中,然后代码库在处理器中执行。因此,如果指令数量较少,则RAM和处理器之间的来回次数将较少。因此,拥有较小的代码库是一件好事。关于内存,我们需要担心的另一件事是,我们使用的堆空间应该尽可能小,因为这将为垃圾回收器创造更少的工作,并且进程内存不足的可能会更小。
弱/软引用 每当进程运行时注意到进程内存空间不足时,它就可以让垃圾回收器销毁或清理这些弱引用和软引用所引用的对象。它对于大型对象垃圾回收非常有用.
划分大批量流程 当大批处理的内存消耗用例较高时,通常建议使用分而治之原则将处理划分为更小的单元,从而消耗较小的可内元。
垃圾回收算法 通常,垃圾回收算法有几个用例。在批处理(并行收集器)和实时处理(S收集器)的情况下,使用不同类型的算法。
如何解决磁盘延迟问题
磁盘延迟瓶颈可以分为三大类。让我们详细讨论它们。
志记录 在志记录的情况下,我们按顺序写入志文件,顺序 IO 都比随机 IO 快得多。 当我们进行志记录时,如果我们可以一次记录尽可能多的数据,这将有助于降低这些与触点切换相关的成本。此外,在可能的情况下,执行异步志记录,将要记录的数据从主线程传输到另一个线程。
Web 内容文件 静态内容应存储在反向中,使其在内存中可用。此外,利用页面缓存等解决方案,使已读取 的页面保留在RAM中。当我们通过文件时,可以使用更多的零,忽略用户模式以内核模式进行,这可以更快地数据。所有这些能通常都可以在反向中使用。
DB 磁盘访问 显著缩短数据库响应时间的能改进之一是在主表上具有非规范化字段,而不是联接多个表。此外,使用索引可以避免全表扫描,并且可以磁盘位置以查找该记录。
如何解决 CPU 延迟问题
低效的算法和查询 利用的算法和的查询来能。尝试使用更多数据和同时请求对复杂算法进行负载,以在负载下的能。
上下文切换 批处理通过将多个调用合并为单个调用来能,从而改善 CPU 延迟。如果您的应用程序存在大量线程间通信,请尝试程间中设置延迟,以便减少 CPU 上的负载。单独线程中的异步 IO 可用于通过委派工作来能,而不会影响主线程。线程模型有效地将处理委托给异步线程,该线程执行主 IO 处理并返回到主线程。确定正确的线程池大小对于减少上下文切换和 CPU 延迟非常重要。
如何选择正确的数据存储以能
关系数据库 对于数据是关系和结构化的 ACID 事务,建议使用关系数据库。现在,亟待解决的问题是如何关系数据库的能。建议使用 NoSQL 键值存储进行缓存,以减少关系数据库的负载并能。此外,为了减少关系数据库的负载并减小大小,建议使用服务,将旧数据从关系数据库到 NoSQL 存储。
NoSQL 数据库 对于读取次数较少的写入密集型,建议使用 NoSQL 文档存储数据库。对于读取密集型,建议使用 NoSQL 列式数据库。对于缓存要求,请使用 NoSQL 键值存储。对于搜索用例,请使用具有文档存储并可以执行模糊搜索的弹搜索。对 Kafka 的异步调用用于启用,然后调用 Spark 流式处理群集,并进一步存储在 Hadoop 群集中,从中可以运行 AI/ML 作业。像/可以存储在对象存储中,CDN服务可以借助本地缓存来能。
结论
能是软件中一个有趣的话题,它是软件实践中一个重要的非能要求。正确处理需要广泛的技能,并且可以成为软件生命周期中不可或缺的一部分。本文将帮助您了解广泛的领域,您可以在各自的中解决这些领域。
互联网用户投稿文章,作者:投稿,如若转载,请注明出处:https://www.missionshow.com/2001.html