从单服务设计看SLA保证

news2025/1/11 15:09:13

文章首发公众号:海天二路搬砖工

0. 引言

在微服务架构中,谈到SLA保证,我们更多是从宏观的角度来需求解决方案。比如,通过合理服务拆分来增加系统整体的可维护性;通过多实例部署来保证系统的灾备。但是单个服务是可靠性、性能其实也是保证系统SLA的重要一环。

本文将介绍提升单体服务SLA的一些设计原则/方法

1. 开关可控

开关可控是指通过在系统中加入一些控制开关,以便在运行时或配置时对某些功能进行开启或关闭,从而满足不同的业务需求。它实现了让系统的部分部分功能"可插拔"的效果,方便业务人员快速调整系统功能。

开关可控通常应用于以下场景:

  • 定制化需求处理:某一个定制化需要,可以通过在系统中加入一个开关进行开启或关闭,方便快速处理定制化需求并减少业务人员的开发成本。
  • 测试平稳迭代:通过开关独立控制系统的某个功能,将其独立于其他阶段进行功能测试和性能监控,这样就可以高效地完成系统的迭代和测试,同时降低了对整个系统的影响。
  • 功能开发:通过对功能进行开关控制,可以逐步向用户推导新功能和服务,以紧密配合用户的需求,同时避免过度或不必要地浪费预算和时间。

2. 故障隔离

微服务架构下的单个服务设计而言,故障隔离是指当服务的内部某些逻辑异常、或者外部依赖项发生故障时,服务能够将其隔离,使用替代服务,或者提供柔性服务。

在具体的实现过程中,编码时需要加入对各种错误和异常情况的处理逻辑。例如,当程序出现空指针引用、参数错误、数组越界等情况时,应该抛出相应的异常或记录错误信息,防止程序崩溃,对整个系统造成影响。

3. 必要缓存

现在系统,尤其是对性能有要求的系统,使用缓存可以提高系统的性能和可扩展性,是不可或缺的一部分。

缓存给系统带来的好处至少包含以下几方面:

  1. 提升响应速度: 缓存可以在不重新生成结果的情况下,直接返回已经计算出来的结果。这可以减少前端或后端服务的负载,提高系统性能和响应速度。
  2. 减少冗余计算: 当相同的计算或数据需要多次访问时,可以使用缓存来避免多次冗余计算。这可以减少CPU和I / O使用,并提高服务的响应速度。
  3. 提高可扩展性: 通过使用缓存,可以将计算和数据缓存到多个服务器上,这可以有效减轻单个服务器的负载,并使系统能够更好地扩展和容错。

4. 接口无状态

接口无状态(Stateless)是指在HTTP或其他协议通信中的请求、响应过程中,服务器不保存客户端请求的任何状态信息。接口无状态是保证系统SLA的基本要求。

当接口有状态时,就必须在服务器端维护状态信息。如果客户端在多个服务器之间切换,那么维护这些状态信息将会变得非常困难。而接口无状态允许服务器更方便地扩展,因为它可以在请求处理完毕后立即释放状态信息,从而在更多的服务器上分配负载并更易于水平扩展。

5. 单一职责

  • 在微服务架构中,一个微服务的职责是单一的
  • 在单个服务中,各个模块的职责是单一的。

在单个服务的设计中,服务中的每个模块负责不同的任务,从而使得系统更加容易维护、扩展和测试。

6. 异常监控

异常监控是指对单体服务运行过程中系统出现异常情况的监控、记录和及时响应的机制。

异常监控的具体实现可以采用以下几种方式:

  1. 设计良好的监控机制:需要在服务中添加针对各种异常情况的监控机制,以便能够及时发现和记录异常情况。例如,通过添加合适的日志记录功能、性能指标监测和警报机制、信号处理和控制反馈机制等。
  2. 应用异常监控工具:可以使用大量的开源或商用工具来监控单体服务,如Zabbix和Grafana等。这些工具可以帮助监控各种异常情况,并快速对异常进行反馈和处理。
  3. 应用自动化工具:可以使用自动化工具,如Puppet、Chef、Ansible等,来自动监控服务和异常情况,快速响应服务出现的问题,提升安全性和可靠性。

我的公众号

在这里插入图片描述

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

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

相关文章

2023NewStarCTF

目录 一、阳光开朗大男孩 二、大怨种 三、2-分析 四、键盘侠 五、滴滴滴 六、Include? 七、medium_sql 八、POP Gadget 九、OtenkiGirl 一、阳光开朗大男孩 1.题目给出了secret.txt和flag.txt两个文件,secret.txt内容如下: 法治自由公正爱国…

【JVM】类加载器 Bootstrap、Extension、Application、User Define 以及 双亲委派

以下环境为 jdk1.8 两大类 分类成员语言继承关系引导类加载器bootstrap 引导类加载器C/C无自定义类加载器extension 拓展类加载器、application 系统/应用类加载器、user define 用户自定义类加载器Java继承于 java.lang.ClassLoader 四小类 Bootstrap 引导类加载器 负责加…

故障演练 | 微服务架构下如何做好故障演练

前言 微服务架构场景中,应用系统复杂切分散。长期运行时,局部出现故障时不可避免的。如果发生故障时不能进行有效反应,系统的可用性将极大地降低。 什么是故障演练 故障演练是指模拟生产环境中可能出现的故障,测试系统或应用在…

软考网络工程师知识点总结(二)

目录 21、海明码--差错控制 22、CRC循环冗余校验码 23、网络时延的计算 24、根据距离选择传输介质 25、多模光纤和单模光纤的区别 26、CSMA/CD协议 27、以太网帧结构 28、以太网类型及传输介质的选择 29、交换式以太网(交换机) 30、VLAN虚拟局…

Rust编程中的线程间通信

1.消息传递 为了实现消息传递并发,Rust 标准库提供了一个 信道(channel)实现。信道是一个通用编程概念,表示数据从一个线程发送到另一个线程。 可以将编程中的信道想象为一个水流的渠道,比如河流或小溪。如果你将诸如…

【C++ 学习 ㊱】- 智能指针详解

目录 一、为什么需要智能指针? 二、智能指针的原理及使用 三、auto_ptr 3.1 - 基本使用 3.2 - 模拟实现 四、unique_ptr 4.1 - 基本使用 4.2 - 模拟实现 五、shared_ptr 5.1 - 基本使用 5.2 - 模拟实现 六、weak_ptr 6.1 - shared_ptr 的循环引用问题 …

【Python小程序】求解2 * 2矩阵的逆矩阵

一、内容简介 使用Python求解2 * 2矩阵的逆矩阵。 二、求解方法 我们使用邻接矩阵法来求解2 * 2矩阵的逆矩阵。 det(A): 矩阵A的行列式 adj(A): 矩阵A的邻接矩阵 对于2*2矩阵A 我们有 三、Python代码 基于上述求解方法,我们可以写出Python代码如下&#xff…

行情分析——加密货币市场大盘走势(11.13)

大饼上涨太快,又开始震荡,但上不去,所以目前来看差不多要做回踩动作,入场空单性价比较高。而且从MACD日线来看,也是进入空头趋势,RSI(14)也是进入了超买区间,值得入手空单…

乡镇村污水处理智慧水务智能监管平台,助力污水监管智慧化、高效化

一、背景与需求 随着城市化进程的加速,排放的污水量也日益增加,导致水污染严重。深入打好污染防治攻坚战的重要抓手,对于改善城镇人居环境,推进城市治理体系和治理能力现代化,加快生态文明建设,推动高质量…

拼多多商品详情API接口接入流程如下:

拼多多商品详情API接口可以用于获取拼多多商品的具体信息,包括商品ID、商品名称、价格、销量、评价等。以下是使用拼多多商品详情API接口的步骤: 进入拼多多开放平台,注册并登录账号。在开放平台页面中,找到“商品详情”或“商品…

基于SSM+Vue的电子商城的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

基因检测技术的发展与创新:安全文件数据传输的重要作用

基因是生命的密码,它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展,我们可以通过对基因进行测序、分析和解读,更深入地认识自己,预防和治疗各种遗传性疾病,甚至实现个性化医疗和精准健康管…

动态调整学习率Lr

动态调整学习率Lr 0 引入1 代码例程1.1 工作方式解释 2 动态调整学习率的几种方法2.1 lr_scheduler.LambdaLR2.2 lr_scheduler.StepLR2.3 lr_scheduler.MultiStepLR2.4 lr_scheduler.ExponentialLR2.2.5 lr_scheduler.CosineAnnealingLR2.6 lr_scheduler.ReduceLROnPlateau2.7 …

ASK、PSK、FSK的调制与解调

ASK、PSK、FSK的调制与解调 本文主要涉及数字信号的调制与解调,内容包括:2ASK、2PSK、2FSK的调制与解调以及频谱分析 关于通信原理还有其他文章可参考: 1、信息量、码元、比特、码元速率、信息速率详细解析——实例分析 2、模拟系统的AM信号的…

2023最新版JavaSE教程——第6天:面向对象编程(基础)

目录 一、面向对象编程概述(了解)1.1 程序设计的思路1.2 由实际问题考虑如何设计程序1.3 如何掌握这种思想? 二、Java语言的基本元素:类和对象2.1 引入2.2 类和对象概述2.3 类的成员概述2.4 面向对象完成功能的三步骤(重要)2.4.1 步骤1:类的定…

数据分类分级方法及典型应用场景

1 2021-09-29 来源:数据学堂 [打印本稿][字号 大 中小] 《数据安全法》的第二十一条明确规定了由国家建立数据分类分级保护制度,根据数据在经济社会发展中的重要程度,以及一旦遭到篡改、破坏、泄露或者非法获取、非法利用,对国…

Flutter实践二:repository模式

1.repository 几乎所有的APP,从简单的到最复杂的,在它们的架构里几乎都包括状态管理和数据源这两部分。状态管理常见的有Bloc、Cubit、Provider、ViewModel等,数据源则是一些直接和数据库或者网络客户端进行交互,取得相应的数据&…

【开源】基于Vue和SpringBoot的智能停车场管理系统

项目编号: S 005 ,文末获取源码。 \color{red}{项目编号:S005,文末获取源码。} 项目编号:S005,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系…

智能井盖传感器具有什么效果?

智能井盖传感器与智慧城市之间有着密切的关联,两者之间属于相辅相成的状态,对于城市的现代化和城市生命线建设有助力作用。智能井盖传感器是其中一个重要的组成环节,它们帮助城市改变原有的生活和生态环境,为政府部门完善城市基础…

Linux(命令)——结合实际场景的命令 查找Java安装位置命令

前言 在内卷的时代,作为开发的程序员也需要懂一些Linux相关命令。 本篇博客结合实际应用常见,记录Linux命令相关的使用,持续更新,希望对你有帮助。 目录 前言引出一、查找Java安装位置命令1、使用which命令2、使用find命令3、查…