从单服务设计看SLA保证

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

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.hqwc.cn/news/170659.html

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

相关文章

AYIT-ACM实验室发展历程

AYIT-ACM简介 ACM协会为你的梦想插上翅膀。 本院ACM协会成立于2012年 2008年开始小规模参加河南省竞赛 2014年成功实现金牌零突破 指导老师:孙高飞老师 安阳工学院计算机科学与信息工程学院ACM队是一支优秀的队伍,一支充满活力与激情的队伍&am…

网络编程 初探windows编程

目录 一、什么是Winodws编程 二、开发环境搭建以及如何学习 三、VA助手安装 四、第一个Win32程序 五、窗口类句柄/窗口类对象 六、Winodws消息循环机制 七、Windows数据类型 一、什么是Winodws编程 Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过…

加速mvn下载seatunnel相关jar包

seatunnel安装的时候,居然要使用mvnw来下载jar包,而且是从https://repo.maven.apache.org 下载,速度及其缓慢,改用自己本地的mvn下载。 修改其安装插件相关脚本,复制install-plugin.sh重命名为install-plugin-mvn.sh …

Qt执行带参sql

//准备执行的sql语句,此为带参的sql语句query.prepare("update employee set Name:Name, Gender:Gender,Height:Height,"" Birthday:Birthday, Mobile:Mobile, Province:Province,"" City:City, Department:Department, Education:Educati…

Jmeter 性能 —— 负载阶梯场景!

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格,然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100,并发数从0开始,5秒内增加10个并发数,增加10个后持续30s,…

数据结构与算法之美学习笔记:18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

目录 前言散列思想散列函数散列冲突解答开篇 前言 本节课程思维导图: Word 的单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢?其实啊,一点儿都不难。只要你学完今天的内容,…

linuxC语言缓冲区及小程序的实现

文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区 1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配,文件缓冲区用以…

从C语言到C++_40(多线程相关)C++线程接口+线程安全问题加锁(shared_ptr+STL+单例)

目录 1. C多线程 1.1 thread库 1.2 mutex库 1.3 RAII锁 1.4 atomicCAS 1.5 condition_variable 1.6 分别打印奇数和偶数 2. shared_ptr线程安全 2.1 库里面的shared_ptr使用 2.2 shared_ptr加锁代码 3. 单例模式线程安全 3.1 懒汉模式线程安全问题 3.2 懒汉模式最…

数据结构之单链表基本操作

🤷‍♀️🤷‍♀️🤷‍♀️ 今天给大家分享的是单链表的基本操作。 清风的个人主页 🎉欢迎👍点赞✍评论❤️收藏 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位…

网络层+数据链路层+物理层

一)网络层协议: 一)IP协议报头介绍: 咱们的IP协议能够在两点之间规划处一条合适的路径,什么叫做合适?那就得看咱们的TOS是怎么进行选的,比如说选择最大吞吐量,咱们就需要进行选择一个最大的带宽路径; 16位总长度:IP数据…

[Matlab]基于LSTM+NSGA2的风光火力发电策略优化

最近比较忙,好久没分享案例啦,今天简单分享一个滚动时域的多目标优化 一 模型介绍 1 风电 2 光伏 3 火电 4 储能 5 用电需求 等五个对象。 其中风电和光伏还有用电需求,用历史数据LSTM网络,训练一个预测模型;火电根据策…

c语言从入门到实战——初识指针

初识指针 前言1. 内存和地址1.1 内存1.2 究竟该如何理解编址 2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引用操作符 2.3 指针变量的大小 3. 指针变量类…