写点什么

应用云平台的可用性——从新浪 SAE 看云平台设计

  • 2012-02-09
  • 本文字数:3636 字

    阅读完需:约 12 分钟

一、可用性如何定义

  • 可用性 (availability) 是关于系统可供使用时间的表述,以不可用的时间为衡量指标。不可用时间越短,可用性越高。通常用 n 个 9 来描述。比如 4 个 9 的可用性,则是指一年中不可用时间在 52 分钟内,平均每周不可用时间在 1 分钟。
  • 可靠性 (reliablity) 是关于系统无故障时间间隔的描述,以发生故障的次数为衡量指标,故障次数越少,可靠性越高
  • 可维护性 (maintainability) 系统发生故障后,恢复的时间来描述。时间越短,可维护性越高。

从上面三者关系看出,服务的可靠性、可维护性越高,可用性就越高。这就要求我们在服务开发和管理中做到:提高服务系统的稳定性、改善软件的可管理性和可维护性。

对于 SAE 云计算平台而言,可用性包含三个方面:SAE 自身服务可用性、网络可用性、SAE 平台上数据可用性。

二、如何打造高可用的平台

1、软件设计和系统架构

软件是互联网服务的载体。良好的软件对于服务的可用性至关重要。从可用性定义来看,我们在软件设计时,既要考虑可靠性,又要考虑可维护性。

可靠性:这主要体现在软件本身的稳定性和容错性上。软件的稳定性很大程度上取决于代码质量,设计再优良的系统都有可能在实现上质量控制不好而导致失败。软件的容错则主要体现在两个方面:避免单点的高可用设计和自治独立原则。软件系统要做到足够健壮, 在发生一些硬件或网络故障时就需要能够做到冗余,继续提供服务。即发生故障的次数足够低

比如某个服务,可能有 3 个系统单元。每个单元都不应该存在单点,某个服务器宕机不应当导致服务不可用。由于 IDC 故障的频繁,现在越来越多的设计在考虑当某个 IDC 不可用时,服务要能够继续提高服务,即跨 IDC 机房的高可用。另外软件设计时要求足够自治独立,不可过多依赖网络和其他服务单元,对于互联网服务,阻塞是最大的敌人,在一个系统中由于一个微不足道的连接阻塞,而导致整个系统服务不可用,这样的例子实在是太多,所以对于互联网服务,需要牢记:服务要足够自治独立,避免阻塞。

下图简单说明了 SAE 平台的负载均衡服务是如何避免单点故障的。

可维护性:软件要易于管理维护,能够和现有的运维系统整合,比如说配置管理、日志管理等,避免自立规范。软件的管理维护简单,对于发生故障时缩短恢复时长是有重要帮助的。

2、服务实施时引入破坏测试

好的软件设计开发完成后,在部署环节,一定要实际测试在设计时定下来的目标,比如说避免单点,就需要部署时,实际去破坏。对其他各种容错的处理是否真的到位。我们常见的做法是关机测试、重启检验服务自恢复能力、拔网线等测试,同时观察软件系统是否运行正常。这主要仍然是围绕服务可靠性进行测试。

3、实时的、立体的、可视化监控

一个服务,除了自身软件外,还包含了监控,监控应当视为服务的一部分。服务上线一定是包含了监控。监控是最好的质量保证措施。SAE 平台在 Alpha 版上线时就有了各种监控,监控是平台不可分离的一部分。对于监控,我们积累了一些经验.

实时:要能够及时发现问题、抢在用户的前面发现问题

立体:这要求我们的监控是多层次的立体式的,立体监控最大的好处是快速定位故障原因,有助于快速解决问题。毕竟同样的现象,背后可能有很多种可能。我们的监控包含:系统监控 (负载, 磁盘 IO 等)、网络 TCP 三次握手监控 (只要节点之间发生网络关系的都需要监控)、服务自身可用性监控、错误日志趋势监控 (当服务的错误数量突然增加时可以捕捉到)

可视化:这是从监控工具的易用性而言。可视化更加有利于发现和分析问题。

自我恢复:这主要体现在服务监控里。服务的监控包含两个部分,首先是根据服务所承诺的各项功能的黑盒测试,这主要是模拟用户发起。其次是服务所在的节点上有部署自我检查自我修复的程序,当自我诊断认为有故障时,程序会尝试多种恢复方法。这极大降低了故障服务时长,有效提高了服务可用的时间。SAE 平台底层有这样一套系统在不间断地运行。

报警:监控是为了更快发现问题,能够自动处理的让机器自动完成,不能自动完成的就需要人工处理,这就需要有报警机制。SAE 内部开发了一个叫“报警网关”的系统,所有的监控都是直接对接该报警网关。网关的优点是可以做分析、排重,并且是有上下文的报警。我们报警的原则:过犹不及。当运维人员收到过多报警,并且包含了大量的误报时,这样的报警时没有价值的,要坚决抵制。

故障响应:相关人员接到报警后,根据故障级别进行响应。

严重故障,影响到平台的稳定运行,白天要求 5 分钟内响应,夜间 15 分钟响应。

次级故障,不影响应用的运行,但可能影响到用户的管理和使用白天要求 15 分钟响应,夜间要求 2 小时响应

警告级别故障,这种报警不影响服务,不影响使用,但需要提示有隐患。白天要求 1 小时,夜间不要求响应,但要求早晨立刻处理,避免故障升级。

快速的故障发现、自我修复和故障响应,是在故障一旦发生后,缩短服务恢复时长,提高服务的可维护性角度而言的,从而间接提高了服务的可用性。对于互联网服务而言,强大的运维团队是服务可用性的重要保障之一!

下图是 SAE 平台访问量和访问用户的实时监测图表。

4、针对频繁的系统变更、软件迭代升级

我们知道服务如果没有变更,出问题的概率一般就很低。但是互联网服务变更恰恰是很频繁的,这恰好体现了她的生命力。所以如何在不断变更升级的条件下保证平台的稳定可用显得更为迫切。SAE 每周的各种变更升级在十次以上。SAE 为更好地保证平台稳定性,我们引入了旁路系统和灰度发布机制。

旁路系统:用户的请求进入负载均衡后,除了会走正常流程外,同时会引导到另外一个环境,该环境和生产环境非常相近,除了规模外。我们引入旁路系统的原因在于配置变更、软件升级等很频繁,在生产环节每一个变更不管多么简单都是有风险的。其次是系统级别的软件更新升级等,为了尽可能多尽可能早地发现一些隐藏的很深的 bug,旁路系统是一个不错的方案。因为旁路系统足够真实。并且还可以在旁路环境进行一些压力测试,毕竟线上做压力测试危险太大,线下做测试,测试数据不够真实。在旁路系统变更完成后,如何判断变更是安全的,是一件相对比较有挑战的事情。我们的经验往往是观察变更涉及的服务,错误日志比例是不是有明显上升。如果变更后服务无法使用或者挂了,问题就更加明显。

灰度发布:旁路系统虽然足够真实,但毕竟不是完全真实的生产环境,变更有没有对应用造成影响,有时需要用户反馈来配合。尽管旁路系统可以发现 99% 的问题,但不可否认仍然有可能有隐藏的很深的我们无法发现。这就需要引入灰度发布。所谓灰度发布,就是在升级时,只引导部分应用来使用,通过逐步增加使用的应用数量同时观察用户的反馈,来验证变更是否存在问题。但是对于有状态的服务,灰度发布实施比较困难。

旁路系统和灰度发布都是从提高平台服务可靠性角度出发,对变更做好风险控制,尽量降低故障发生的次数。

5、数据可用性

数据可用性主要体现在数据冗余上。SAE 平台数据类的服务包括 MySQL、KVDB 和 Storage,服务都提供有热备和冷备,并可以从冷备中恢复 14 天内的数据。数据自助恢复功能目前正在开发中,目前可以提供收费的人工数据恢复服务。

6、多线路接入保证网络访问质量

由于南北电信互联互通问题,用户一旦跨网访问,往往不可到达或由于电信运营商网络故障或 IDC 级别的故障,用户到 IDC 之间的网络不可到达,或丢包率很高。

网络可用性更多的会依赖电信运营商的服务能力。但对于互联网服务而言,必须要解决这样的困难才可以真正提供好的服务。

目前 SAE 网络接入支持电信、联通、教育、移动等,真正实现了国内大的运营商网络的覆盖,这在国内是很罕见的。用户不须操心网络接入的复杂问题,并且在某些链路访问质量出现问题时,SAE 平台通过云监控能够及时发现,并会做出调整。最大限度保证全国范围内的用户的网络可到达。

下图展示了 SAE 是如何保证多路访问质量的。

三、对于云计算的用户的建议

尽管国外云计算的使用已经非常普及,但不可否认,国内的云计算市场尚处于起步阶段。这固然和国内企业和开发者的认知和接受度有关,但也和国内云计算发展不够务实,不贴近用户需求脱离不了干系。

客户在选择是否使用云计算时,往往有很多担忧,总觉得没有放在自己的手里放心。但我们从实践中也发现,大部分企业的网站,其可用性可到达率都不算高,虽然没有专业机构提供的中国网站可用性这样的报告。如果完全自己去实现自己的系统,上面遇到的大部分可用性挑战,相信都会遇到,而且未必能做得更好。所以如果云计算足够成熟,建议采用云计算,让您的企业更“轻”点,服务更可靠点。

SAE 平台目前的可用性已经可以达到 99.95%,我们正在朝 99.99% 的目标努力,SAE 对于更高可用性的追求是没有止境的。

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。以后有机会再谈谈云计算可用性设计有哪些特别的地方。


感谢金明对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-02-09 00:0011882

评论

发布
暂无评论
发现更多内容

华秋这场技术研讨邀请了哪些重磅嘉宾?

华秋电子

代码混淆的原理是什么?常见代码混淆方法介绍

雪奈椰子

更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!

天翼云开发者社区

云计算 云原生

从商业增长到自然增长,OPPO广告联盟为开发者开辟增长新路径

Geek_2d6073

赛车竞速游戏:art of rally拉力赛车 for Mac 1.5.0中文版

繁星

赛车竞速游戏 Art of Rally

体验函数计算 FC 3.0,写测评赢取索尼头戴式耳机

Serverless Devs

云计算 Serverless AIGC

LED显示屏防护等级知识讲解

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家 等级

任福继院士:基于交叉学科的研究将成主流,算力平台和计算人才是自主创新关键

Geek_2d6073

更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!

Geek_2d6073

Mybatis和其他主流框架的整合使用

不在线第一只蜗牛

开源 mybatis 项目开发

万界星空科技云MES管理系统和ERP的对接

万界星空科技

数字化转型 mes 云mes 万界星空科技 万界星空科技mes

巴适得板!这次我们和四川一起加“数”前行!

天翼云开发者社区

云计算 大数据

助力开发者健康长效增长 OPPO 开启应用和服务生态新篇章

Geek_2d6073

最新前端技术趋势——菜鸟必看

秃头小帅oi

前端

StoneDB顺利通过中科院软件所 2023 开源之夏 结项审核

StoneDB

MySQL 数据库 HTAP StoneDB

华为云GaussDB助力工商银行、华夏银行斩获“十佳卓越实践奖”

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

苹果Mac动态壁纸:Dynamic Wallpaper 16.7中文版

繁星

动态壁纸 Dynamic Wallpaper

云主机CPU和内存配比:优化资源分配的关键

天翼云开发者社区

云计算 cpu 云主机

本地MQTT协议消息服务远程连接教程介绍

EquatorCoco

Linux 本地化 mqtt 协议解析

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

编程猫

为何选择独立服务器?稳定、高效、安全等优势一览

一只扑棱蛾子

独立服务器

Gitlab配置mirrorRepository 镜像仓库

javaNice

Java gitlab

外包的鄙视链,背后原因是什么

老张

外包 竞争力 核心竞争力

KiCon Asia 2023完美落幕,助力Kicad生态繁荣,华秋在行动

华秋电子

kicad

使用 PPO 算法进行 RLHF 的 N 步实现细节

EquatorCoco

算法 ppo算法

欢迎提报 | 2023年龙蜥社区优秀贡献者评选正式启动

OpenAnolis小助手

开源 操作系统 龙蜥社区 最佳案例 突出贡献

CodeWhisperer--手把手教你使用一个十分强大的工具

亚马逊云科技 (Amazon Web Services)

Python 人工智能 云上探索实验室 Amazon CodeWhisperer Amazon Cloud9

应用云平台的可用性——从新浪SAE看云平台设计_服务革新_王利俊_InfoQ精选文章