如何提高阿里云上应用的可用性(二)

在单体应用时代,最大的问题是如何解决数据库瓶颈,而微服务之下,一个大应用被拆分成了几十个甚至上百个微服务,数据访问的压力被传导到了服务之间的网络,服务强弱依赖,服务雪崩等各种问题随之而来,那么如何保障服务的可用性以及整个应用的健壮性呢?常见的做法包括:

超时

程序员和女朋友约会在楼下等她的时候一般都会约定 “等你30分钟啊”, 这就是一种超时约定,如果等了半小时女朋友还没有下来,该怎么办?一般有服务治理意识的程序员都会选择超时退出及时止损(不知道这是不是程序员没有女朋友的原因之一)

在应用设计中,为避免集群雪崩或资源耗尽,一切调用都应该设置超时时间,包括RPC/DB/缓存,服务端超时是必选配置。在实际的电商实际场景中,一般服务级别的超时时间通常会设置在100ms~300ms之间。

超时的设定需要注意一个问题就是超时的传递问题, 假设服务A调用服务B,A的超时设定为100ms,B为300ms,那么这个设定就是有问题,因为一旦B的调用时间超过了100ms,A无论如何都会超时,而B的继续调用就会成为一种资源浪费,而在特别复杂的服务依赖关系中,超时的设定一定要考虑传递的问题

重试

当程序员给喜欢的女孩子表白被拒绝了怎么办,一般可以做出万分痛苦状接一句“要不要再考虑一下”,这就是一种重试,在服务调用中,重试就是当对服务端的调用出现异常或者错误时,自动的再次发起调用请求,可见这种方式在服务端出现偶发性抖动或者网络出现抖动的时候可以比较好的提高服务调用的成功率,但同时,如果服务端处在出现故障的边缘时,也有可能成为压垮骆驼的最后一根稻草,所以在生产环境中一定要慎用

熔断

家里面使用的保险丝就是一种典型的熔断,一旦电流过大的时候,就是断开以保护整个电路,在程序设计中,一旦服务端的调用的异常或者错误比例超过一定的阈值时,就停止对此服务的调用,此时处于close状态,经过一段时间的熔断期后会尝试重新发起调用,此时处于close-open状态,如果调用成功则放开调用,切换到open状态,否则继续回到close状态

隔离

远洋大船的内部都会设计多个水密仓,这样一旦事故出现船体破损,也可以把影响控制在水密仓级别而不至于整个船沉默,这就是一种隔离策略,在程序设计中,为了达到资源隔离和故障隔离,通常有两种做法,一种是通过线程池来进行隔离,对于不同类型资源新建不同的线程池,然后通过设置线程池的大小和超时时间来起到隔离资源使用的效果,但是这种方式由于需要新建线程池,对于资源开销比较大,另外一种方式就是通过观察线程的信号量也就是同类型资源的线程数,当超过相应的阈值时快速拒绝新的资源请求。

限流和流控

本质上这两种方式都是对于超出服务提供能力的请求进行限制,区别是限流的话是立刻拒绝,而流控是让请求进行排队,这种方式对于流量的削峰填谷有着比较好的效果

以上的这些能力一般都会在微服务框架中集成提供,如阿里的Dubbo以及Spring Cloud的Hystrix,通过引入jar包在代码中需要增强的地方加入添加相应的高可用代码,需要在应用系统设计之初就充分考虑进去, 后期业务新增或变更时也需及时维护

接下来随之而来的一个问题就是如何测试验证这些高可用措施是有效的?阈值的设置是否合理?

常用的做法有两个:

压测

通过在云端模拟大量的用户请求来测试应用系统面对突发流量的能力和进行容量规划,这里介绍一款阿里云的PTS产品,可以在云端模拟百万并发,以此可以检测各链路是否有限流降级的措施,是否设置合理-传送门。

故障演练

故障演练是一种比较新的高可用测试的方式,通过软件层面模拟各种可能出现的故障,观察应用系统对于故障的隔离和降级能力。 这一专门的领域称之为Chaos engineering, 在阿里内部,通过故障演练平台,每天都在进行着各种类型的故障演练,这些故障包括操作系统层面的故障如进程意外退出,CPU内存飚高, 也包括网络层面的故障如网络延迟丢包,DNS解析错误, 还包括了应用服务层面的故障如服务接口延迟,异常返回等。通过这种方式可以比较有效的验证应用的高可用能力,找到潜在风险问题。

当然对于种种原因没有集成高可用框架,也没有自己搭建故障演练平台的各位同学,阿里云推出了应用高可用服务这一业界首款快速提高应用高可用能力的SaaS产品,来自于多年双十一稳定性保障的经验,具有无需修改代码,全界面操作和性能稳定的特点,下面举例示意如何给云上的应用添加限流和降级的能力(传送门:如何接入应用高可用服务)

对关键接口进行限流

 

 

 

 

 

 

对非关键业务进行降级处理

 

 

 

 

 

 

 

 

 

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

双11终于来了,你盖楼了吗?

戳蓝字“CSDN云计算”关注我们哦!作者 | CDA数据分析师责编 | 阿秃双11就要到了,今天就带大家解读一下,在这场全面购物节背后都有哪些意想不到的有趣数据。一年一度的购物狂欢节双11又要到了,从2009年双11的诞生到今年&#xff0c…

怎样修改当前分支最新一次提交的message信息?

怎样修改当前分支最新一次提交的message信息? git commit --amend esc :wq

汉字转html实体符号js_html实体编码遇上js代码

单双引号在js代码中在js中单、双引号引起来的是字符串,如果我们要在字符串中使用单、双引号,需要反斜杠进行转义let struser\s name;// orlet str" users name";// orlet str"she said:\"...\".";如果在字符串中输出反斜杠…

Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本

Sentinel 阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。 近日,阿里中间件开源组件Sentinel 发布首个官方推荐可生…

服务器系统功能描述,Hadoop mapreduce核心功能描述

在任务执行期间,应用程序在写文件时可以利用这个特性,比如 通过 FileOutputFormat.getWorkOutputPath()获得${mapred.work.output.dir}目录, 并在其下创建任意任务执行时所需的side-file,框架在任务尝试成功时会马上移动这些文件&…

怎样修改老旧commit的message信息?

找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i <父commitid> 只修该提交信息用把pick更新为r&#xff0c;然后在git弹出的命令窗口中&#xff0c; 修改提交记录信息&#xff0c;最后保存退出即可

腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比

产业数字化转型过程中产生着比过去任何一个时代都多的数据。在这样的背景下&#xff0c;数据存储技术应该怎么发展&#xff1f;11月7日&#xff0c;在腾讯Techo开发者大会上&#xff0c;来自科研领域的专家和腾讯云存储业务的工程师们共同揭开了云存储的发展趋势。 据IDC预测&…

python中imread导入失败_ImportError:无法导入加载图像文件所需的Python Imaging Library(PIL)...

我正在尝试在facemorpher 1.0.1 python包中运行average.py程序.我创建了一个虚拟环境,该环境中安装了带有自制软件的openCV,安装在自制软件中的python 2.7和可执行框架python,它们在虚拟环境cv中构建了python的框架.运行平均程序当前给我这个输出.(cv) Francess-MacBook-Pro-2:…

java 计算机开始时间,关于计算Java程序运行时间

第一种是以毫秒为单位计算的。Java代码//伪代码long startTimeSystem.currentTimeMillis(); //获取开始时间doSomeThing(); //测试的代码段long endTimeSystem.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间&#xff1a; "(end-start)&qu…

2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量

双11快乐&#xff0c;该买的应该都已经买到了吧&#xff1f; 跟大家说个暖心事儿&#xff1a;今天&#xff0c;阿里云以天猫双11之子派大星星星l的名义&#xff0c;在公安部打拐办团圆项目、缘梦基金、宝贝回家等公益组织的鼎力支持下&#xff0c;将失踪儿童的信息放在这个网页…

怎样把连续的多个commit整理成1个?

怎样把连续的多个commit整理成1个&#xff1f;前提是&#xff1a;此分支尚未推送至远程&#xff0c;只修该提交记录&#xff0c;对提交文件内容不做修改 找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i ac5e973 1.找到像合并的那几个提交信息…

重磅!云+X 案例征集正式启动啦!

云计算的概念已经悄然走过十余年&#xff0c;尽管我们对于它的关注&#xff0c;没有像人工智能、物联网、区块链那么密切&#xff0c;但是云服务在我们的生活与工作中早已无处不在。越来越多的新兴技术高调出现在大众的面前&#xff0c;唯有云计算仍以最低调的态度做着最实用的…

Nacos 发布0.3.0版本,迄今为止最好看的版本

近日&#xff0c;Nacos 0.3.0 正式发布&#xff0c;该版本旨在增强对服务列表&#xff0c;健康状态管理&#xff0c;服务治理&#xff0c;分布式配置管理等方面的管控能力&#xff0c;以便进一步帮助用户降低管理微服务应用架构的成本&#xff0c;在第一版的 UI 功能规划中&…

定义快捷代码_nodepad++代码编辑器替代工具整理

概述代码编辑工具选择Visual Studio CodeVS vode特点&#xff1a;开源&#xff0c;免费&#xff1b;自定义配置集成git智能提示强大支持各种文件格式(html/jade/css/less/sass/xml)调试功能强大各种方便的快捷键强大的插件扩展EditPlus默认支持HTML、CSS、PHP、ASP、Perl、C/C、…

王者荣耀转移完成会显示我的服务器吗,王者荣耀账号多久能转移完

4月29日&#xff0c;王者荣耀已经发布跨系统角色转移测试名额&#xff0c;每日限量&#xff0c;各位召唤师也都蠢蠢欲动&#xff0c;期待已久的功能终于上线啦&#xff0c;感兴趣的小伙伴快跟着超分手游网的小编一起去了解一下吧&#xff01;王者荣耀账号多久能转移完申请提交后…

怎样把间隔的几个commit整理成1个呢?

怎样把间隔的几个commit整理成1个呢&#xff1f; 前提是&#xff1a;此分支尚未推送至远程&#xff0c;只修该提交记录&#xff0c;对提交文件内容不做修改 找到操作提交记录的父提交id&#xff0c;也可以理解为上一次提交记录 git rebase -i ac5e973 1.找到像合并的那几个提交…

华为双11发 20 亿奖金!?

戳蓝字“CSDN云计算”关注我们哦&#xff01;11 月 11 日当天&#xff0c;有华为员工在社交网络上爆料称&#xff0c;华为双 11 发放两份特别奖金&#xff0c;一份是阳关普照奖&#xff0c;另外一份是 20 亿奖金。该爆料称&#xff1a;“双 11&#xff0c;华为发放两份特别奖金…

python语言是编译性语音_最强编程语言 Java 和最受欢迎之 Python 的巅峰对决

作为程序员们的看家利器之编程语言&#xff0c;倘若技术开发者对其掌握得越深则对自身职业生涯越有益处&#xff0c;然随着技术的更新变革&#xff0c;我们在日常使用不单单只会用到一门编程语言&#xff0c;那么究竟该如何选择一门新的语言来上手&#xff1f;本文中&#xff0…

ajax结合java,ajax技术应用详细分析(后端java与客户端请求的结合)

Ajax 技术应用先回看 模态框的使用js比较薄弱如上 比如这部分加粗样式如下 是BOM窗口对象**js最薄弱 建议在浏览器练习** confirm方法跳转练习新疑问:怎么分辨js,jQuery和jsp代码 与其实现应用插入小点**延申说法 client客户端发送请求 (客户端层面)是client前端页面层****重要…

MySQL的未来在哪?

阿里云 MySQL&MariaDB 数据库产品结合开源社区&#xff0c;提供了稳定、可靠、便捷、弹性的在线数据库服务&#xff0c;帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化&#xff0c;从Sun到Oracle&#xff0c;发展也经过了几个阶段。MySQL从5.7版本开始走上了代…