性能优化中的系统架构优化

server/2025/2/12 14:00:49/

系统架构优化是性能优化的一个重要方面,它涉及到对整个IT系统或交易链上各个环节的分析与改进。通过系统架构优化,可以提高系统的响应速度、吞吐量,并降低各层之间的耦合度,从而更好地应对市场的变化和需求。业务增长导致的性能问题推动架构的发展,系统架构的演变过程来分析系统性能与调优方式。

系统性能优化的核心思想主要包括节约和平衡两个方面。节约意味着尽可能地减少不必要的资源消耗;而平衡则是指在遇到瓶颈时,寻找一种方式将资源从紧张的部分转移到相对宽松的部分,以达到整体性能的最大化 。

一、单机架构

传统的架构模型中Web服务与APP服务在一台服务器上(Web服务做页面渲染,APP应用程序执行业务逻辑)。随着业务的增长,单节点的Web服务或者APP服务不堪重负,毕竟机器硬件提供的性能服务是有限的。在程序无法优化的情况下,最直接的办法是增强机器性能。或者把web服务和APP服务拆分。

图片

同样虽则和业务的快速增长会继续出现性能瓶颈,尤其是以DB的性能瓶颈最常见。例如DB承受的IO压力大,导致IO等待,从而影响客户体验。对于Web&App服务频繁读写文件也会导致IO瓶颈,例如日志(业务日志,访问日志等)写,实际上多数性能瓶颈最终都落到磁盘瓶颈上。

为了满足性能要求,通常我们会进行性能优化,当我们进行单系统性能调优后仍然无法满足性能要求时,我们只有分而治之的方法,于是就有了集群架构方案。

二、集群架构

集群架构中Web&App服务都可以用多台机器来进行负载分担,DB的瓶颈也可以采用分区,分库,分表的方式来缓解(分库,分区,分表的宗旨是减小遍历范围,提高响应速度)。

另外,还可以采用读写分离的方式来减轻单台服务器的IO负担,相当于增加了机器的处理能力。读写分离比较适合以读操作为主的应用,可以减轻写服务器的压力,但是读服务器会有一定的延迟。当一些热点数据过多时,我们还可以对这些热点数据进行缓存。

图片

对于负载均衡层,目前主要是在TCP/IP协议的四层与七层进行负载分发。四层负载流行的LVS(LVS集群采用IP负载均衡技术和基于内容请求分发技术,目前互联网公司大量使用此技术),F5(强大的商业交换机,好处是快,但就是贵)。七层流行的有Tengine,Nginx,Haproxy,Vanish、ATS,Squiddeng 。目前互联网企业多采用LVS+Tengine/Nginx的组合来实现负载均衡。

集群架构基本能解决多数企业的性能问题,但缺点也比较明显。多个Web服务器之间的用户请求状态需要同步(为保证高可用,如果其中一台宕机,另一台服务器能够正常处理用户请求,专业术语叫Session 黏滞),这会消耗不少的CPU资源。另外,数据库实现读写分离后,数据同步(数据一致性保证)成为一个性能问题,大量数据的同步IO会面临瓶颈。而且业务量大以后,数据的安全保障机制也会受到挑战,备份问题凸显,因此也催生了分布式架构发展。

Seesion  黏滞 

Session黏滞,也称为会话保持(Sticky Sessions)或粘滞会话(Sticky Sessions),是指在负载均衡环境中的一种机制,它确保来自同一个客户端的请求总是被路由到同一台后端服务器上处理。这种机制对于需要维护用户状态的应用程序特别重要,比如那些依赖于session信息进行用户身份验证、购物车内容保存等操作的Web应用程序。

实现Session黏滞有几种常见的方法:

基于客户端IP地址的会话保持:这是最简单的方法之一,即根据发出请求的客户端IP地址来决定将请求发送到哪一台后端服务器。例如,在Nginx中可以通过配置ip_hash来实现这一功能。

基于Cookie的会话保持:在这种模式下,负载均衡器会在客户端的第一个响应中插入一个特殊的cookie,这个cookie包含了指向特定后端服务器的信息。当客户端再次发起请求时,负载均衡器读取这个cookie并将请求定向到相应的服务器。

分布式Session管理:另一种方法是让所有参与负载均衡的服务器共享session数据,这样无论请求被发送到哪一台服务器,都可以访问到相同的session信息。这种方法可以通过使用数据库、文件系统或者内存缓存(如Memcached或Redis)来实现。

三、分布式架构

系统分层,系统服务化(SOA架构,微服务化等),服务分布式,DB分布式,缓存分布式及良好的水平扩展能力是当前分布式架构的典型特征。哪一个服务性能不佳,直接增加机器即可,性能与机器数量呈线性增长关系,从而解决前面架构遇到的问题。

图片

为什么要进行服务化?

集群架构基本上能够解决多数企业的业务性能需求,但是如果换成大厂(百度,腾讯,阿里等),以他们的QPS来说,这样的架构支撑就比较勉强了。

首先,业务复杂度变高,导致程序实现难度增加,出错率也大大增加,不利于代码的维护和管理;大量业务融合在一个系统中导致耦合度太差,运营管理也比较麻烦,业务相互影响,其中一部分出问题很可能导致另一部也会出问题。也解决这样的问题,我们自然会想到进行业务隔离,把系统中若干主要功能拆分成多个子项目,降低开发难度,更加便于维护。使用不同的war包,不同的服务器进行发布,每个服务器完成特定的业务功能,这就是服务化。

其次,我们也会遇到一些较长的业务链路,往往性能问题是某一个功能性能低下导致的,这就造成在运维及分析时都极不方便。如果把长的业务链条拆分为多个子业务,在分析时就方便了。

业务拆分后将会面临着系统间的集成。如果业务链路上有一个服务比较耗时,而请求是阻塞式,那么我们要一直等待响应结果,这样的用户体验并不好,那么我们可以使用消息机制来解藕,上游系统请求发送到消息中间件,下游系统从消息中间件获取消息后处理,解放上游系统,节省上游系统在等待时浪费的资源,从而利用这些资源来搞业务处理能力。

为什么要用缓存,缓存哪些数据?

我们知道, 从磁盘中读取数据相比从内存中读取数据慢很多,所以在实际业务中大量使用缓存,一般缓存的数据以读居多。

以Linux为例,我们用vmstat命令可以看到buff ,cache 的监控信息。

buff对块设备的读写进行缓冲来缓解CPU与块设备的速度差,因此CPU非空闲等待时间会更少。

Cache给文件做缓冲,直接把内容放在内存,因此CPU访问时更快,减少CPU的IO等待。

例如,客户信息,产品信息等,我们在应用系统中可以缓存到内存,不用每次都从DB中查询。用过Hibernate的朋友应该知道其支持二级缓存。对于缓存产品,目前流行的,成熟的有Redis,memcache等。一些秒杀场景直接使用Redis作为数据持久化介质。

另外,缓存也用来保存用户请求状态,Web服务器之间再也不用同步用户Session状态。

阅读后若有收获,不吝关注,分享,在看等操作!!!


http://www.ppmy.cn/server/167076.html

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 0基础…

Spring Boot 和Tomcat的关系

Spring Boot 和 Tomcat 之间的关系可以从多个角度来详细阐述,包括它们的作用、工作原理以及如何协同工作。以下是详细的解析: 1. Spring Boot 的简介 Spring Boot 是一个基于 Spring 框架的开发工具,它的目标是简化 Spring 应用的开发。Spr…

Linux:ELF加载_动态库

hello,各位小伙伴,本篇文章跟大家一起学习《Linux:ELF加载_动态库_进程通信》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞&…

点云配准网络

【论文笔记】点云配准网络 PCRNet: Point Cloud Registration Network using PointNet Encoding 2019_pcr-net-CSDN博客 【点云配准】【深度学习】Windows11下PCRNet代码Pytorch实现与源码讲解-CSDN博客 【点云配准】【深度学习】Windows11下GCNet代码Pytorch实现与源码讲解_…

基于HarmonyOS 3.0的智能理财APP开发方案

以下是基于HarmonyOS 3.0的智能理财APP开发方案,充分利用鸿蒙系统特性实现差异化功能: 一、架构设计 技术栈: - 开发框架:ArkUI 3.0 (声明式UI) - 数据管理:分布式数据服务 - 安全架构:TEE微内核 硬件级加…

示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

第二章:QT核心机制(二)

作业 1> 将鼠标事件和键盘事件相关代码重新实现一遍 //头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QKeyEvent> //键盘事件类 #include <QDebug> #include <QLabel> #include <QMouseEvent> …

物联网综合性应用之网关设计

最近由于项目的需要&#xff0c;设计了一款基于rv1106的物联网网关 该产品需要集合IOT功能 BLE定位 能耗监测io控制等&#xff0c;音视频通话&#xff08;基于webrtc&#xff09; 由于概念机阶段不想自己开板于是乎找到万能的淘宝相中了顶配版的luckfox pico w. 理由是 1 、…