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

超时

程序员和女朋友约会在楼下等她的时候一般都会约定 “等你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产品,来自于多年双十一稳定性保障的经验,具有无需修改代码,全界面操作和性能稳定的特点,下面举例示意如何给云上的应用添加限流和降级的能力(传送门:如何接入应用高可用服务)

对关键接口进行限流

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

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

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

  1. 如何提高阿里云上应用的可用性(一)

    摘要: 如今,开发并上线一款应用十分方便.因为云计算提供了从最基础的计算资源如服务器网络.数据库服务.中间件PaaS平台到各种应用支撑的云管理服务,同时开源社区的迅猛发展也提供了从数据库.缓存到应用全 ...

  2. uwsgi+django+nginx (ubuntu)部署在阿里云上 — 留着自己记忆用

    步骤一:在阿里云上买服务器 步骤二:在本地写好django项目 步骤三:下载xftp,putty 步骤四:利用xftp将django拖入服务器中 步骤五:确保在服务器中下载好了,uwsgi,nginx ...

  3. 阿里云上创建Oracle RAC-静默模式

    编前语: 小编成功在阿里云上搭建Oracle RAC断断续续花了1个月的时间,中间的过程简直是痛苦,网上很多的资料都是基于图形化界面的,也有静默模式但是步骤都非常的粗略,可能是写这样的步骤太费时间了. ...

  4. 阿里云上的高性能高并发高可用架构

    云也不是全能全有的,有些东西还是要考虑. 我记得之前有个高手说,在云计算时代,传统的架构优化几板斧,包括什么负载均衡.数据缓存之类再也用不上了,因为云基本提供了一切. 果真如此吗? 云计算是一种基于互 ...

  5. PyTorch 1.3发布:能在移动端部署,支持Colab云TPU,阿里云上也能用

    本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处. 本文约2700字,建议阅读7分钟. 本文向你介绍 PyTorch1.3 的新特性. "我要转PyTorch!&q ...

  6. 在阿里云上部署生产级别Kubernetes集群

    阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群. 本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级 ...

  7. PyTorch 1.3发布!能在移动端部署,支持Colab云TPU,阿里云上也能用

    点击我爱计算机视觉标星,更快获取CVML新技术 晓查 一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI "我要转PyTorch!" 看到1.3版本的新特性之后,有开发者在 ...

  8. 云计算之路-阿里云上:在乌云中坚信蓝天

    继续向大家汇报阿里云上的天气变化情况.今天(5月8日)上午糟糕的天气(8:30~9:50,10:50~11:40)给大家逛园带来了很大的麻烦,请谅解! 早上8:30左右由于阿里云RDS出现突发故障(故 ...

  9. 个人建设网站流程解说,手把手教你如何在阿里云上搭建自己的网站

    现如今信息化时代,很多企业甚至是个人都有自己搭建网站的需求,目前建站有两方式,第一:找网络公司全程负责搭建:第二:自己建设:找网络公司建设网站市场价格不一,网络公司的实力技术也不一样,所以会有很多的建 ...

最新文章

  1. 设计磁标读写模块-STC8G1K08-HALL
  2. mysql数据库映射到内存_基于共享内存的数据库映射
  3. Java 并发编程笔记(一)
  4. 7-9将灰度转为彩色
  5. Git SSH key配置
  6. Java类class isAnnotation()方法及示例
  7. leetcode 20. 有效的括号 (python)
  8. 漏洞扫描工具AppScan下载网盘
  9. Ubuntu下VLC播放器安装配置以及VLC常用快捷键记录
  10. Redis过期删除策略
  11. Adobe illustrator 常用菜单命令和快捷键
  12. visio导出pdf只保存绘图区域以及插入符号为灰色、插入异或符号
  13. python savefig函数_python中savefig中的键事件。怎么做?
  14. win7配置计算机失败怎么办,Win7配置失败还原更新怎么回事 Win7配置update失败的解决办法...
  15. Linux 系统编程 --文件IO-write()、read()、lseek()函数
  16. iOS城市选择器-包含搜索功能
  17. 手机端获取用户详细地理位置(腾讯地图/高德)
  18. 如何用自己电脑架设服务器!自助建站将不再是梦想
  19. unity 调用外部相机拍照
  20. ajax请求-IE缓存处理

热门文章

  1. 电大计算机网考上机操作题,电大计算机上机考试模拟题及答案 (1)
  2. 以太坊服务器是什么_今日推荐 | 以太坊独立地址数破亿,持有ETH地址数达4000万意味着什么?...
  3. 开源社交系统java_JAVA 开源 SNS 社交系统 JEESNS V0.8 发布
  4. c++获取图像的长宽 opencv_【第一篇:C++与opencv】图片的读取和显示 | 学步园
  5. mysql 语句 集锦_mysql 语句集锦
  6. java insert access_java连接access时无法使用INSERT语句添加数据
  7. 通讯可以并联吗_工业控制知识:吃透RS485通讯的连接方式,接485总线就简单多了...
  8. # 定义四边形_【四边形系列专题】 特殊平行四边形之矩形
  9. 在读博士练成健身达人,女大学生在宿舍练出八块腹肌……
  10. 一个天才程序员的黑帮大佬人生