应用云平台的可用性——从新浪SAE看云平台设计
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
该内容已经被标记书签!
标记书签错误,请重试!

作者 胡凯 发布于 2010年7月2日
我曾经服务于这样的客户,开发团队由于需求不明晰,验收条件缺乏,导致返工严重;知识分享的缺乏,导致人员间不能相互替换,工作无法合理分配,进度缓慢;架构划分的不合理,又没有频繁的在各团队间进行集成,导致发布难度大,周期长。内忧外患下,团队领导人却仅对于测试覆盖率表现出异乎寻常的热情,与之形成鲜明对比的是对于其它的问题冷漠和麻木。人们似乎很容易犯这样的错误,由于不确定应该做什么,或者不知道如何去做最重要的事情,最终将注意力放在了易于提升的次等重要的事情上。
很多团队的领袖不遗余力地提升测试覆盖率,以至于患上了“测试覆盖率大于90强迫症”,89.99%的测试覆盖率也会让他们寝食难安,并发明了自动化测试覆盖率检查工具(当测试覆盖率达不到90%,测试便会失败)来减轻自己的症状。在我看来,这一强迫症的病因在于对项目控制的力不从心引发的压力无法排除,加强对于测试覆盖率(或者项目其它生命体征)的要求从技术决策变成了心理上的减压渠道。面对可能的项目失败,他蛮可以说:“技术职位上我尽了最大的努力,看看测试覆盖率!项目的失败应归罪于愚蠢的合同(销售),不清晰的需求(业务分析师),又或者是不切实际的进度安排(项目管理者)。”
抛开管理因素不谈, 从技术上讲,高测试覆盖率和高质量的软件能够被等同起来么?看看下面的例子:
public class Calculator {
public static Decimal Divide(Decimal operand1, Decimal operand2) {
operand1.Divide(operand2)
}
}
[Test]
public void two_divide_one_should_return_two() {
Assert.AreEqual(2, Calculator.Divid(2, 1));
}
NCover会告诉我们测试已经完全覆盖了功能(测试覆盖率100%)。可事实果真如此么?现有的测试至少不能回答系统在如下情况下对于“除法”这个功能的期待是什么?
测试覆盖率仅仅能够告诉团队什么没有被测试,根本就回答不了软件是否经过了有效测试!
舌苔厚重反映的是消化问题,治疗方案当然不是刷刷舌头这么简单,同样,测试覆盖率低的病灶常常是:
相对于提升测试覆盖率,这些问题解决起来就要复杂的多,也棘手的多。我不确定特定环境上述问题的解决问题是什么,但是我很确定补测试不是良方,它往往会催生出没有Assert的畸形测试以及大量针对getter/setter的无用测试。
检查覆盖率得到好的结果可以增强团队信心,巩固测试实践;而得到坏的结果则需要综合分析,找到原因,制定改进方案。这是团队积累经验,提升能力的一种有效途径,单纯要求提高覆盖率则是头疼医头,脚疼医脚的可笑方法。测试不是为了代码需要被测试的需求而存在,它存在的原因是市场需要以低成本生产高质量软件。补测试无法满足测试实践的内在需求。在我看来,利用覆盖率的分析结果在团队中引发一个话题,讨论系统模型的可测试性、设计的合理性,并藉此改善产品才是更加可取的做法,单纯追求覆盖率常常反映出团队将流程和目标混淆起来,甚至误将流程当作了目标。
如果不再要求所有的组件必须被覆盖,我们就必须回答一个新的问题:“哪些组件应该被覆盖? 多少覆盖率比较合适?”。以我的经验,在考虑测试策略时至少需要参考业务价值,功能变化趋势以及缺陷率这三个因素:业务价值是核心,讨论清楚业务流程和价值,优先针对高业务价值的功能分析和设计测试。其次是根据组件的变化趋势有重点的投资测试。系统中一定存在常常变化的组件,对于这些组件多投入一些测试有助于减少破坏已完成功能的风险,并进而提高团队的信心。Bug则是另一个风向标,向我们指明系统的哪些部分比较薄弱。对Bug进行一下分类整理,我们就能很容易的发现系统的这些薄弱区域;在这些区域添加测试、修补有缺陷的功能,将有助于提高产品的质量。
去解决数据掩盖之下的问题难度更大也更令人恐惧,没人清楚我们可以走多远,但重要的是我们已经出发。恐惧和无所适从是因为我们所面对的新领域再没有绝对的对错,再没有容易做出的决策,我们需要更多经验,承担更多的风险,它迫使我们驶出了心理舒适区,开始在心理学习区锻炼自我,挑战自我,只有这样数据强迫症才会被清除治愈。
胡凯,ThoughtWorks公司的敏捷咨询师,官方认证的Spring Framework讲师,近2年一直从事持续集成工具Cruise以 及CruiseControl的设计开发工作。 创造和参与了开源测试框架junit-ext,网格测试工具test-load-balancer以及用于分析CruiseControl构建的报表工具iAnalyse, 对于Web开发,敏捷实践,开源软件与社区活动有浓厚的兴趣,可以访问他的个人博客进行更多的了解。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
测试覆盖率是一个"量化" 的指标,当复杂度把人(所有的项目参与者)打败的时候,就只能依靠这些所谓量化的指标,也就很难避免这些“畸形”的行为。
看到“他蛮可以说:...”这段,用温伯格的系统方法分析一下,头痛医头只不过是短暂缓解压力的自欺欺人的花招而已,压力会像飞去来器一样在远方盘旋一次,再次飞回来击中大家的脑袋。 这时候大家的缓解压力的办法可能会成为“这个(敏捷)方法论是个狗屎。”
可惜大多数的团队都没有直面问题的勇气,不敢提意见,不能实施有效的沟通,这样的团队实施敏捷只是空谈。
要提高测试覆盖率,必须提高测试用例的覆盖率,单单只是通过哪些地方测了,哪些地方没有测试,这个不是正确的覆盖率统计方法
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。
随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。
4 条回复
关注此讨论 回复