【弹力设计篇】聊聊隔离设计

news2024/11/18 1:21:55

为什么需要隔离设计

隔离其实就是Bulkheads,隔板。在生活中隔板的应用主要在船舱中进行设计,目的是为了避免因一处漏水导致整个船都沉下去。可以将故障减少在一定的范围内,而不是整个船体。
在这里插入图片描述
从架构演变来说的话,大多数系统都是从一个系统进行拆分出多个子系统,每个子系统之间通过异步通信、HTTP、RPC等方式去完成请求。当系统较多的时候,本身就可以利用这种隔离机制去避免因一个功能导致整个系统的不可用,避免出现多米诺骨牌效应。
具体的方式,一是通过按照服务的种类来分离,二是通过用户类别分离。

按服务的种类来做分离

类比一个互联网金融平台来说,就可以划分成用户、订单、支付、三方系统、风控系统、大数据平台等。
在这里插入图片描述
而每个系统基本都会做服务冗余,一般的话都是至少3台服务,这样才可以做成高可用系统。这种从服务到数据库层面就可以完全隔离开。接入层,应用层,存储层。也禁止直接访问其他上下游系统的数据库进行数据的读取。最好是通过API的方式提供相关的数据。

虽然好处可以直接隔离开来,但是如果想要获取多个数据的话,需要访问多个系统进行获取,响应时间会增加,但是整体的吞吐量会提升。
并且多个系统之间的通讯不一定完全都是HTTP请求,可能HTTP、RPC、MQ多种方式进行通信。所以梳理起来比较杂乱。

我实际的经验就是每个公司的落地方案都是不一样的,基本都受限于早起的架构设计,然后在此基础上进行迭代。

在这里插入图片描述
大多数公司都是基于这种服务种类进行隔离

按用户请求来做分离

在这里插入图片描述
对于付费类型APP,比如视频网站,电商网站 可以根据不同的用户进行提供服务,比如VIP,普通用户。VIP专属于特别通道,而普通用户则直接进行共享同一套系统服务,即使出现网站不可用,也不会导致全部用户服务不可用。这种其实就是多租户模式。
对于多租户架构来说,会引入一些系统设计的复杂度,完全隔离,资源比较浪费,如果共享,程序设计上会比较复杂。
实现方式的话,其实就是服务是否共享,数据是否共享。

  • 1.完全独立的设计,服务独立,数据独立。
  • 2.数据独立,服务共享。
  • 3.服务共享,数据也共享。
    在这里插入图片描述
    可以看到,如果服务和数据都独立,那么隔离度和实现复杂度比较好,但是占用成本和资源共享度比较高。如果是共享的话,隔离度和共享低。开发难度比较高。
    所以一般采用折中的方案,采用服务共享,数据分区。而今天可以采用虚拟化技术来实现物理隔离来降低成本。

隔离设计的重点

隔离设计需要考虑以下问题

  • **业务层面:**我们需要对业务足够了解之后,按照一定的拆分粒度进行设计系统,系统过大或者过小都不好。
  • **复杂度层面:**无论是系统板块还是多租户的隔离,都需要考虑系统的复杂度、成本、性能、资源使用的问题,找到一个权衡的方案,确定哪些不要,哪些需要。
  • **高可用设计层面:**隔离也需要配置一些高可用设计方案,比如 重试&幂等,限流&排队,降级&熔断,异步&隔离等配套使用
  • **运维层面:**分布式系统的引入,虽然提升的整体的性能和稳定性,但是也因此带来了更多的问题,比如系统间通讯、运维层面。因此需要配置自动化运维工具,可以使用容器来管理。
  • 监控系统,好的系统一定有一双眼睛可以实时监控系统的所有重要指标。这里多说一句,有些人只关注系统的业务数据指标是否正常,我觉得这并不够,而要从系统的各个层面去观测。比如系统层面(CPU、内存、磁盘、网络)中间件层(MySQL、MQ、Redis)应用层(JVM)日志层面,监控报警等多个角度去观测。

总结

好了,今天主要介绍了弹力设计中,隔离设计,所谓隔离也不过是通过将系统间进行按照一定粒度拆分,故障不会蔓延开来。然后聊了两种方式一种是系统板块,另一种多租户方式。最后说了下隔离设计的重点。

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

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

相关文章

兵兵数码:网络机顶盒哪个好?2023最新网络机顶盒排名

网络机顶盒让电视机重生,解决卡顿、资源少、广告多等问题,我们每年都会进行网络机顶盒测评,今年已经测评过17款,通过多角度对比筛选了五款表现最佳的产品整理成网络机顶盒排名,近期想买网络机顶盒不知道网络机顶盒哪个…

工具篇-Mysql 性能优化

文章目录 前言一、Mysql 性能问题:1.1 一条sql 的执行流程:1.2 MySQL 可能出现的性能问题: 二、优化:2.1 硬件层面:2.2 软件层面:2.2 .1 mysql 参数配置优化:2.2.1.1 mysql 服务端连接优化&…

【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

文章目录 前言struct tags 的使用使用反引号避免使用空格避免重复使用标准化的 tag 名称多个 tag 值 struct tags 的原理struct tags 的优势常用的 struct tags参考文章: 前言 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂…

【MMdetection3d】Step1:环境搭建

Step1:环境搭建 1.创建并激活虚拟环境1.1 用官方Pytorch指令安装!1.2 用官方mmcv指令安装! 2 安装MMDetection3 克隆编译mmdetection3d4 环境测试5 测试demo 在Conda虚拟环境中搭建MMdetection3d环境 1.创建并激活虚拟环境 conda create -n mm3d python…

JavaEE简单示例——在使用Tomcat的时候可能出现的一些报错

简单介绍: 在我们之前使用Tomcat的时候,经常会出现在启动的时候因为一些报错导致项目无法正常的启动,我们就对一些比较常见的报错来看一下可能导致的原因,以及出现报错之后如何去解决。 严重: Failed to initialize end point a…

Spring中最简单的过滤器和监听器

1. 过滤器概念引入 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功…

一文看完智能视频监控系统的工作原理及场景应用

智能视频监控系统的原理是利用摄像机采集视频信号,并通过相关的AI模型算法实时分析视频内容,提取出有用信息,如人脸、车牌号码、移动物体等,并进行识别及特征提取,最终形成监控报警、实时监控、历史录像回放等应用。 智…

【JAVA】 String 类简述笔记

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言String类创建一个String类 常用方法字符串长度 length() 方法连接字符串 concat() 方法创建格式化字符串 format()功能 前言 string是C、java、VB等编程语言中的字符串&…

项目报错clone2.weekday is not a fuction

ant-design-vue中的dayjs版本和我项目中的dayjs版本不一样 项目中的dayjs版本号 ant-design-vue中的dayjs版本号"dayjs": “^1.11.9” 解决方法: 将项目中的版本号更新"dayjs": “^1.11.9” yarn add dayjs^1.11.9

lc162.寻找峰值

由于题目假设nums[-1]和nums[n]等于负无穷 如果nums[i]>nums[i1]&#xff0c;即nums[-1]<nums[i]>nums[i1]&#xff0c;那么在[0,i]区间内一定存在峰值 如果nums[i]<nums[i1]&#xff0c;即nums[i]<nums[i1]>nums[n]&#xff0c;那么在[i1,n-1]区间内一定存…

dubbo原理框架设计

dubbo原理框架设计 &#xff08;1&#xff09;config 配置层&#xff1a;对外配置接口&#xff0c;以 ServiceConfig, ReferenceConfig 为中心&#xff0c;可以直接初始化配置类&#xff0c;也可以通过 spring 解析配置生成配置类。 &#xff08;2&#xff09;proxy 服务代理…

如何使用postman判断返回结果是否正确

针对一个接口&#xff0c;我们在知道参数以及参数对应的结果时&#xff0c;可以通过postman进行判断&#xff0c;验证返回数据是否与预期数据相等。这样可以使我们的接口测试更加的方便简洁。 1、准备数据。 postman可以接受的文件格式如图所示&#xff0c;一般来说可以将我们…

mysql(五)主从配置

目录 前言 一、MySQL Replication概述 二、MySQL复制类型 三、部署MySQL主从异步复制 总结 前言 为了实现MySQL的读写分离&#xff0c;可以使用MySQL官方提供的工具和技术&#xff0c;如MySQL Replication&#xff08;复制&#xff09;、MySQL Group Replication&#xff08;组…

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

PP-YOLOE: An evolved version of YOLO Abstract 在本报告中&#xff0c;我们介绍了PP-YOLOE&#xff0c;一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化&#xff0c;采用无锚模式&#xff0c;更强大的骨干和颈部配备CSPRepResSt…

【C语言数据结构】模拟·顺序表·总项目实现

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

文件系统总结

《本文件系统默认linux文件系统》 一、文件系统基本概念 文件系统是操作系统中负责存取和管理信息的模块&#xff0c;它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护&#xff0c;并为用户提供一整套方便有效的文件使用和操作方法文件系统是操作系统中管理文…

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中&#xff0c;通信系统的有效性用带宽来衡量&#xff0c;带宽定义为每秒传输的比特数&#xff0c;单位 b/s&#xff0c;或 bps。在 DDR3 接口的产品设计中&#xff0c;DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…

JAVA基础多线程-模拟线程死锁以及预防和避免死锁

引言 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 一&#xff0c;模拟死锁 示例代码&#xff1a; public class LockT1 {Object o …

最全面的msvcp110.dll丢失修复方法分享,快速修复msvcp110.dll文件

今天主要给大家详细的介绍一下msvcp110.dll丢失修复的方法&#xff0c;因为在网上看到很多人因为这个问题而烦恼&#xff0c;其实这个问题不难解决的&#xff0c;下面就给大家分享多种方法&#xff0c;一起来看看吧。 一. 修复msvcp110.dll丢失的方法 重新安装相关程序 首先&…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…