如何保证系统的高并发,高性能,高可用

三高理论图
三高架构图

构建弹性伸缩架构、实现负载均衡和自动扩展

采用分布式+微服务+集群的架构,将系统拆分成多个独立的模块,每个模块可以独立部署,独立拓展,每个模块可以部署多个实例。
做好负载均衡,将流量合理地分发到多个服务器上,从而减少单个服务器的压力,避免单点过载导致服务中断。
实现自动扩展机制,在流量高峰期自动给流量大的服务增加新的服务器实例,流量低谷时期自动减少实例,从而支持大规模并发访问,且节省成本。
上面的数据是给服务加机器,在提前预知大流量情况下,可以提前配置性能更好的服务器。

ps:集群是一个服务部署多份,分布式是系统部署在不同的物理机上,微服务是将系统拆分成多个子系统

优化数据库性能

为了提升数据库的性能,可以考虑采用分库分表+读写分离的策略来降低单数据库单表的压力。常见的根据业务去分库,根据时间范围或者哈希去分表;主流的读写分离是基于主从架构,主库写,从库读。
同时建立合理的索引,提升数据库查询效率。
可以考虑使用缓存技术来缓存热点数据,减少服务对数据库的直接访问。

系统监控和预警

使用监控工具实时监控系统的健康状态,如服务器的性能指标、网络流量、数据库响应时间、CPU等。
设置告警线,当指标达到某个值时,系统便发出预警(如发短信,告警群通知),便于技术人员定位和解决问题。

限流

通过令牌桶算法或者漏桶算法来控制系统访问量,防止系统因过载而崩溃,确保系统在可承受的范围内运行,保证服务的可用性。
限制的系统访问量一般通过提前测试服务的各种指标以及服务可接受的延迟来确定。
常见的限流策略:

令牌桶算法:系统以恒定速率向令牌桶中添加令牌,请求需要消耗令牌才能被处理。当令牌桶为空时,新的请求将被拒绝或延迟处理。

漏桶算法:请求像水一样流入漏桶,漏桶以恒定速率漏水(即处理请求)。当漏桶满时,新的请求将被丢弃或排队等待。
令牌桶算法在灵活度上比漏桶算法更好,并且在处理偶发的大流量时效果更好。并且漏桶算法还有一个重要的缺陷,不能灵活应对后端动态扩容,接口QPS提升。
.
不过令牌桶在设计上,好像也无法完全适配系统的性能。例如系统某接口同时能处理100个请求,处理请求需要3S。假如令牌桶大小设置为100,那么在极限情况下,可能100个请求是同时进来的,这样在接下来的时间里,系统内的请求数会超过100,因为令牌桶还会一直往桶里发放令牌。另一种极端情况是100个请求同时进来,到第三秒的时候全部都完成了,第四秒开始其实又可以接受大流量进来,但按照令牌桶算法它还是只能根据发放令牌的速率放请求进来,并不能很好地发挥系统的性能。
因而把令牌桶换成令牌滚筒或许会更好。设置令牌滚轮的最大令牌数量,这就是系统内当前有的令牌数,每次请求进来就获取一个令牌,请求处理完成就将令牌放回滚筒,这样可以保证接口内最多只有设置的最大请求数任务在跑,也能更好地利用系统性能。

参考博客

服务降级

必要情况下,可以给服务设计服务降级。在系统遇到故障或过载情况时,可以通过牺牲一些功能或性能来保证核心功能的正常运行。
服务降级策略应根据系统的业务场景和优先级进行制定和调整,以确保在故障或过载情况下能够迅速响应并保护核心功能。
常见的服务降级策略:

优雅降级:根据系统的负载情况,自动关闭一些非核心功能或服务,以保证核心功能的正常运行。
限流降级:当系统达到限流阈值时,自动关闭一些非核心功能或服务,以减轻系统负载。
手动降级:在特定情况下,运维人员可以手动关闭一些非核心功能或服务,以应对紧急情况。

服务熔断

必要情况下,可以给系统设置熔断机制。防止由于服务故障导致的连锁故障。当某个服务出现故障时,熔断器会暂时切断与该服务的连接,从而避免故障的蔓延。一旦服务恢复正常,熔断器会自动恢复与该服务的连接。
熔断机制应根据系统的实际情况和业务需求进行选择和调整,以确保既能有效防止连锁故障的发生,又能提供足够的灵活性以应对各种情况。
常见的熔断策略:

自动熔断:当服务的错误率或响应时间超过设定阈值时,熔断器会自动触发熔断操作。
手动熔断:在特定情况下,运维人员可以手动触发熔断操作以应对紧急情况。
半熔断:在熔断器触发后,可以允许部分请求通过以测试服务的恢复情况。如果服务恢复正常,则逐渐放开熔断限制;如果服务仍然存在问题,则继续保持熔断状态。

加强系统安全防护

流量大的服务影响大,更需要做好安全防护,防止恶意攻击。特别是区分哪些是真实的请求,哪些是攻击请求。

安全策略与审计:实施严格的安全策略,定期进行安全审计,确保系统的安全性。
防火墙与入侵检测系统:使用防火墙和入侵检测系统来防范外部攻击和内部威胁。
数据加密:对敏感数据的存储和传输采用加密技术,确保数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

to_sql报错not all arguments converted during string formatting

报错: DatabaseError: Execution failed on sql SELECT name FROM sqlite_master WHERE typetable AND name?;: not all arguments converted during string formattingb 报错的代码如下: import pymysql import pandas as pd con pymysql.connect(…

双向循环带头链表

双向循环带头链表是一种复杂的数据结构。 带头链表是指在链表的最前端有一个额外的节点(头节点),这个头节点不存储实际的数据,主要用于方便链表的操作,比如在表头插入或删除节点时不用特殊处理空链表的情况。 双向…

Linux基础命令(入门)

linux 用户 root 用户 一个特殊的管理帐户 也被称为超级用户 root已接近完整的系统控制 对系统损害几乎有无限的能力 除非必要,不要登录为 root 普通( 非特权 ) 用户权限有限 造成损害的能力比较有限 linux的哲学思想(优点&#xf…

DCS项目调试踩坑记录

最近在调试一个DCS项目(集散控制系统),实际上就是一个新建厂区的控制系统。PLC用的是西门子1500,控制画面使用组态王7.5。 在调试过程中,发现给西门子DB块的变量转移到组态王太难了,因此记录一下&#xff0…

#{}和${}

总结: #{}:先编译sql语句,再给占位符传值,底层是PreparedStatement实现。可以防止sql注入,比较常用。 ${}:先进行sql语句拼接,然后再编译sql语句,底层是Statement实现。存在sql注入…

pthread_create

pthread_create 是 POSIX 线程&#xff08;Pthreads&#xff09;库中的一个函数&#xff0c;用于创建一个新的线程。这个函数允许程序在运行时并发执行多个线程&#xff0c;从而提高程序的效率和响应能力。 函数原型 #include <pthread.h>int pthread_create(pthread_t…

【设计模式-我的思考】套餐模式

imom排故下线-订单状态集查询功能实现(套餐模式) 需求描述 排故下线状态 不排故&#xff1a;未启用排故下线确认配置&订单状态参数值&#xff01;&#xff08;170、180、190&#xff09; 待排故&#xff1a;启用排故下线确认配置&排故下线确认未执行&订单状态参数…

Spire.PDF for .NET【页面设置】演示:在 C# 中应用 PDF 页面转换

当您在导出为 PDF 格式的文档中翻页时&#xff0c;页面过渡会显示装饰效果&#xff0c;例如溶解或擦除。当您以 PDF 格式创建幻灯片时&#xff0c;页面过渡特别有用。Spire.PDF是一款专为开发人员设计的强大 .NET 组件&#xff0c;可让您将页面过渡应用于 PDF 文件。 这里介绍…

vue3学习记录-组件通信

vue3学习记录-组件通信 1.父子组件通信2.兄弟组件传值2.1 以父组件为媒介2.2 发布订阅模式2.3 使用mitt2.3.1 全局使用2.3.2 局部使用 1.父子组件通信 父组件&#xff1a; <template>父组件原有的title:{{ title }}<p>---</p><com :title"title&qu…

MyBatis入门之一对一关联关系(示例)

【图书介绍】《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)&#xff08;第3版&#xff09;》(杨章伟&#xff0c;刘祥淼)【摘要 书评 试读】- 京东图书 …

RK3576 安卓SDK编译环境搭建

编译 Android14 对机器的配置要求较高: 建议预留500G存储 多分配CPU和内存 建议使用 Ubuntu 20.04 操作系统或更高版本 sudo apt-get updatesudo apt-get install git gnupg flex bison gperf libsdl1.2-dev \ libesd-java libwxgtk3.0-dev squashfs-tools build-essential …

软考-软件设计师(11)-专题强化-算法设计与分析-算法特性、算法表示、算法时间复杂度、算法分类、C语言程序设计

场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…

FreeRTOS实时操作系统(1)

前言&#xff1a;FreeRTOS内容较多&#xff0c;分篇发布&#xff0c;较为基础&#xff0c;旨在梳理知识&#xff0c;适合入门的同学 &#xff08;基于正点原子STM32F103开发板V2&#xff09; &#xff08;对于本篇&#xff0c;若有疑问&#xff0c;欢迎在评论区留言&#…

Wooden UI(木头UI纹理按钮边框 背景图标 带PNG素材)

资源包包含以下元素&#xff1a;按钮、图标、框架、复选框等&#xff0c;提供分层的 PSD 文件。 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

橡皮鸭调试法(Rubber Duck Debugging)

橡皮鸭调试法&#xff08;Rubber Duck Debugging&#xff09;是一种编程中的调试技巧&#xff0c;名字来源于一本书《The Pragmatic Programmer》&#xff0c;其中提到程序员可以把问题讲给一只橡皮鸭听&#xff0c;以便在讲解的过程中梳理思路并找到问题的根源。 基本原理&am…

微服务基础架构(图)

微服务基础架构是一种现代化的软件架构模式&#xff0c;旨在将大型复杂的应用程序拆分为多个小型、独立的服务。每个微服务专注于特定的业务功能&#xff0c;可独立开发、部署和扩展。 在微服务基础架构中&#xff0c;通常会使用轻量级的通信机制&#xff0c;如 RESTful API 或…

RISC-V笔记——RVWMO基本体

1. 前言 RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering)&#xff0c;它是Release Consistency的扩展&#xff0c;因此&#xff0c;RVWMO的基本特性类似于RC模型。 2. RC模型 Release consistency(RC)的提出是基于一个观察&#xff1a;将所有同步操作用FENCE围在一…

升级Unity后产生的Objects内存泄露现象

1&#xff09;升级Unity后产生的Objects内存泄露现象 2&#xff09;能否使用OnDemandRendering API来显示帧率 3&#xff09;Unity闪退问题 4&#xff09;配置表堆内存如何优化 这是第405篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答…

PHP 8.1.0-dev后门远程命令执行漏洞

#简介 PHP verion 8.1.0-dev于2021年3月28日与后门一起发布&#xff0c;但是后门很快被发现并删除。 #漏洞概述 PHP verion 8.1.0-dev的PHP在服务器上运行&#xff0c;则攻击者可以通过发送User-Agentt标头执行任意代码。 #影响版本 PHP 8.1.0-dev #环境搭建 新建docker…

CentOS 7 安装gcc编译环境

有时需要使用源码安装某个应用程序&#xff0c;有时还需要对源码进行一定程度的修改和定制才能满足业务需求&#xff0c;有时需要在linux环境下开发某个特定功能的c程序&#xff0c;此时都需要用到gcc编译环境&#xff0c;此时就需要安装gcc编译环境。 在 CentOS 7 上安装 C 编…