微服务可用性之隔离

摘要

​ 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况,动静隔离、读写隔离、热点隔离、资源隔离等场景。

为什么要隔离

​ 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用,不至于系统陷入整体性瘫痪,记得左耳朵耗子大佬就曾在他的文章里面说过饿了吗在做多活之前就经常会有服务整体崩溃的情况,直到做了多活情况才有所好转,这是一个经典集群隔离场景。

隔离的类型

动静隔离

​ 图片、视频等静态资源往往占用大量的带宽,我司曾经就因为一次配错静态资源的链接导致流量没有打到CDN上导致带宽打满的问题,所以一定要把静态资源放到CDN这种边缘计算结点上。

核心隔离

​ 将核心功能拆分出来单独部署成一个服务,避免因为非核心功能的故障导致系统整体不可用

热点隔离

​ 比如我们有一张数据表,有一个 text 或大varchar类型的字段,由于innodb读取数据是基于数据页进行读取,所以字段长度过大的话会导致数据页存储的数据过少从而导致innodb缓存命中率降低。我们可以考虑将这些大字段和不经常使用的单独拆分到一张扩展表里面从而提高数据库的读写性能。

读写隔离

数据库:业务发展到一定程度,数据库往往都是一主一从或一主多从的架构模式,读从库写主库,当然也有特殊场景,由于数据库我们一般配置的都是异步复制模式(数据库可以配置异步、半同步、组复制模式),所以会有读延迟问题,在支付等数据一致性要求高的场景我们通常是采取强制读取主库的方案(即核心业务读取主库,非核心业务读从库)

​ 缓存:将缓存的读写放到不同的集群当中,写集群出现故障读集群依然可用,读集群出现故障还可以重试到其它集群。
经典数据库架构图

进程隔离

​ 服务拆分:通过对单体服务进行垂直拆分,将业务部署到不同的资源上,避免服务间互相干扰,比如OOM导致的服务整体不可用

​ 容器化:容器化化部署从而更好的对服务的 CPU、内存等资源进行隔离

线程隔离

​ 通过对线程进行池化避免由于大量的慢操作导致全部线程不可用从而导致服务整体不可用,因此可以把线程池分为快慢池,确保满操作不会影响所有正常的请求。

集群隔离

​ 我们有些的服务可能都是部署在一个集群当中,流量等异常可能会由于一组服务实例影响了其他服务,因此我们可以将一些重要服务单独部署到一个集群避免被非核心服务影响。

机房隔离

​ 随着流量的增长对服务可用性要求会越来越高,通常会进行多机房部署。每个机房都有完整的服务分组,从性能考虑本机房的服务通常只调用本机房的服务分组。当机房出现故障时可通过负载均衡或者服务端自动重试到另一个机房。

总结

​ 在我们服务的开发过程中一定要多想想,资源、服务之间会不会产生相互影响。比如大促就要考虑做核心服务集群的隔离,视频转码服务就要考虑大视频和短视频的快慢隔离(大、小视频分别投递到不同队列进行处理)。总之要站在全局视角多想想,希望大家都能变的更强。

Reference
  1. https://cloud.tencent.com/developer/article/1789752

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推特热帖:大语言模型自荐能够替代的20种人类工作!快来看你是否需要转行!

最近推特上有一个例子引起了广泛的讨论,事情的起因是这样的:网友让 GPT-4o 预测一下自己未来将会替代人类哪些工作? 这听起来很有趣!GPT-4o会给出什么样的预测呢? 3.5研究测试:hujiaoai.cn 4研究测试&…

TypeScript学习日志-第三十二天(infer关键字)

infer关键字 一、作用与使用 infer 的作用就是推导泛型参数,infer 声明只能出现在 extends 子语句中,使用如下: 可以看出 已经推导出类型是 User 了 二、协变 infer 的 协变会返回联合类型,如图: 三、逆变 infer…

Redis - 优惠卷秒杀

场景分析 为了避免对数据库造成压力,我们在新增优惠卷的时候,可以将优惠卷的信息储存在Redis中,这样用户抢购的时候访问优惠卷信息,通过Redis读取信息。 抢购流程: 业务分析 既然在新增优惠卷的时候,我…

【数据结构与算法】之堆的应用——堆排序及Top_K问题!

目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、堆排序 对一个无序的数组…

安卓开发--安卓使用Echatrs绘制折线图

安卓开发--安卓使用Echatrs绘制折线图 前期资料安卓使用Echarts绘制折线图1.1 下载 Echarts 安卓资源1.2 新建assets文件1.3 新建布局文件1.4 在布局文件中布局WebView1.5 在活动文件中调用 最终效果 前期资料 Echarts 官网样式预览: https://echarts.apache.org/examples/zh/…

Java开发者必知的时间处理工具:SimpleDateFormat类详解

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

【论文阅读】 YOLOv10: Real-Time End-to-End Object Detection

文章目录 AbstractIntroductionRelated WorkMethodologyConsistent Dual Assignments for NMS-free Training (无NMS训练的一致性双重任务分配)Holistic Efficiency-Accuracy Driven Model Design (效率-精度驱动的整体模型设计) …

ABB 任务 模块 程序

1,任务由模块组成 , 2,模块分为程序模块和系统模块 3,可以通过新建程序模块和删除程序模块 4.可以在程序模块中构建程序 5,系统模块不能够被删除 6,main 程序主要体现在自动运行中

C++—— set、map、multiset、multimap的介绍及使用

目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库(STL)中的关联…

【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…

Mysql插入中文内容报错解决及其Mysql常用的存储引擎说明

一、问题描述 我们在Mysql数据库的表中插入带有中文内容时报错,提示【1366 - Incorrect string value: \xE5\x8C\x97\xE4\xBA\xAC... for column UserDealer at row 1】,如下图所示: 二、问题分析 一般来说插入中文内容有问题我们首先想到的就是编码问题;我们可以查看该表使…

C语言之指针进阶(3),函数指针

目录 前言: 一、函数指针变量的概念 二、函数指针变量的创建 三、函数指针变量的使用 四、两段特殊代码的理解 五、typedef 六、函数指针数组 总结: 前言: 本文主要讲述C语言指针中的函数指针,包括函数指针变量的概念、创建…

git分支策略(github-flow VS git flow,如何选择)

一. 结论 Github flow:最简单 小型项目,持续部署,自动化测试程度高,发布流程简单 Git flow:复杂但最常用 大型项目,发布周期长,需要同时维护多个版本,发布流程复杂 表格提供了不…

【算法设计与分析】基于Go语言实现动态规划法解决TSP问题

本文针对于最近正在学习的Go语言,以及算法课实验所需内容进行Coding,一举两得! 一、前言 由于这个实验不要求向之前的实验一样做到那种连线的可视化,故可以用图形界面不那么好实现的语言进行编写,考虑到Go语言的…

2、xss-labs之level2

1、打开页面 2、传入xss代码 payload&#xff1a;<script>alert(xss)</script>&#xff0c;发现返回<script>alert(xss)</script> 3、分析原因 打开f12&#xff0c;没什么发现 看后端源码&#xff0c;在这form表单通过get获取keyword的值赋给$str&am…

下雨!大水蚁引发的水文!看比赛咯,曼联VS曼城——早读(逆天打工人爬取热门微信文章解读)

唠唠嗑 水一水 引言Python 代码结尾 引言 今天星期六 大小周 一个等了很久的双休 昨天晚上真的是吓到我了 漫天的小飞虫 我一开始还以为是一两只 没想到那些小飞虫 从阳台不断飞进来 在山卡拉下面租房子 也是太恐怖了 来个特写 他们也就一个晚上的时间 成虫 天气合适 长翅…

使用docker commit创建新镜像

前言 我们知道&#xff0c;从docker-hub上拉取的镜像所创建的容器是最小版本的&#xff0c;比如ubuntu内部是没有vim编辑器的&#xff0c;我们需要自己手动安装&#xff0c;但是当我们安装后假如有人把我们的容器误删了&#xff0c;那么我们再次根据原始镜像创建的容器就没有了…

优先级队列(堆)的实现

1.什么是优先级队列 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比如&#x…

Drone+Gitee自动执行构建、测试和发布工作流

拉取Drone:(至于版本&#xff0c;你可以下载最新的) sudo docker pull drone/drone:2 拉取runner&#xff1a; sudo docker pull drone/drone-runner-docker 在Gitee中添加第三方应用&#xff1a; 进入个人主页&#xff0c;点击设置&#xff1a; 往下翻&#xff0c;找到数…

2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针

import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {int nsc.nextInt();//数组长度int tsc.nextInt();//操作次数int arr[]new int[n];char arr1[] new char[t];int arr2[] new int[t];int vis…