在2019欧洲测试大会上,Sarah Wells演讲指出:复杂分布式系统的复杂性并非存在于代码中,而是存在于服务或功能之间;测试就是寻求如何在发现问题与交付价值间达成平衡;测试人员通常具有对系统功能的最好理解;测试人员能对可能出现问题做出很好的假设,然后非常快速地进行验证。

Wells在她的主题演讲中,探讨了系统在复杂化和分布式后所发生的变化。对于单体系统而言,虽然可能很难定位实现特定功能的代码位置,但是很容易判别请求在系统中的流转,并且大多数通信是在进程之间的。Wells认为,分布式系统的复杂性已从系统内部转移到系统之间。

使用微服务可简化代码,但会使基于http或队列实现的路由复杂化。Wells支持在路由上可能会出现更多的问题。用户常常会收到一些表示请求失败的瞬态错误,这些错误会在重复数秒后变为成功。她认为明智的做法建立一种补偿和重试机制,但采用这种做法意味着用户更难以完全掌控发生在响应请求中的情况。

Wells建议用户使用基于风险的方法,让测试工作聚焦于那些真正重要的事情上。她提出,用户需要能够快速确定发生错误的时间,尽快修复错误,并且必须要建立具备观测出错位置能力的系统。

Wells提到,对于复杂分布式系统的测试,用户需在尽早发现问题和尽早交付价值间取得平衡。其实,一些问题直到系统投入生产后才能被发现,进而做出优化以快速识别和修复这些问题,她认为用户最好能接受这一点。

InfoQ报道全程覆盖2019欧洲测试大会。在Sarah Wells主题演讲后,InfoQ就复杂分布式系统的测试问题对她做了一次专访。

InfoQ:您对于复杂分布式系统的测试有哪些建议?

Sarah Wells:我们发现,无论是开发人员还是测试人员,在着手构建复杂分布式系统时,都无法试图在本地启动完整的系统副本。用户花费了大量时间去创建很好的生产系统副本,但却从未妥善管理它们。

需强调的是,我们这里讨论的是复杂系统。如果你无法评估特定更改可能会影响到的范围,那么就得花大量的时间做回归测试,我们发现这是个瓶颈,而且往往并不能发现问题。

和许多事情一样,问题主要存在于沟通上。如果开发人员能详细阐述了他们刚完成的工作,那么通常测试人员就能准确地找出变更可能带来的最大风险。

持续交付和微服务是对此最具帮助的做法。许多变更通常非常小型,并且相互独立。微服务具有非常明确的界限。《加速,精益软件和DevOps科学:建立和扩展高绩效技术团队》一书中提及的研究表明,那些频繁发布小型单独变更的组织,通常这些变更的失败率也比较低。

我认为应在系统间建立契约。但我不确定的是,维护契约测试的成本是否会高于错误的风险。我的想法是,将目标锁定为团队间的边界,而非系统内。

InfoQ:监控和日志如何支持测试?甚至它们将如何替代测试?

Wells:分布式系统的许多问题,几乎与最新发布的代码没有关系。这些问题可能与运行代码的环境有关,或是可能是由于服务之间的依赖关系,即更改为另一个可导致意外错误的服务。服务可能属于不同的团队。用户甚至可能不知道某个服务调用了自己的API。

因此一个更改一旦投入生产系统,至少能够尽早发现问题并回滚。

可以通过类似于综合监控的手段,不断测试关键的业务功能,或者监控业务能力水平,也就是检查事件的实际完成情况。以内容发布为例,我们可以检查在我们的区域中存储的所有相关数据是否正确更新,否则就给出警告。

我们也在更底层的环境中运行测试。这些测试替代了那些十分脆弱的验收测试。当做任何变更时都要修改设置,这是件非常痛苦的事。而且很多变更是做架构类的调整。

我们所构建的系统必须提供可观测能力,以便在第一时间定位错误。

这意味着,绝对有必要将全部日志汇集于单个日志存储中,并且需要对日志做结构化以易于查询。在复杂系统中请求会经由多个服务,所需存储的日志规模可能会高于单体系统几个数量级,因此用户可能最终会对日志做抽样。在这种情况下,需要确保任一特定时间的所有日志都得到存储,并且能够通过唯一的事务标识关联所有相关日志。

用户可能还希望获取一些度量,但很容易发生过度获取的问题。用户切实需要的应是那些最高层级服务的度量,即客户呼叫、报告请求率、错误率(可能是请求率的一部分)以及请求持续时间等。这些度量通常称之为RED度量。

InfoQ:在出现错误时,测试人员的作用是什么?他们的价值何在?

Wells:根据我的经验,对系统功能具有最好理解的人,除了产品负责人(PO,product owner)就是测试人员。我已经看到很多测试人员逐渐转型为产品负责人。

这表明了两个问题。第一,测试人员对即将发生的问题具有很好的预判。

其次,测试人员将能够很快地验证假设问题。他们知悉API的调用,网站的流程。

此外,在出现问题前,测试人员也能提供大量价值。我认为,很显然混沌工程需要测试人员的参与。因为混沌工程就是开展探索。如果关闭某处系统会发生什么情况?如果密钥过期会发生什么问题?这些假设和弹性测试对于复杂分布式系统是非常重要的,也具有很大的价值。

查看英文原文: Testing Complex Distributed Systems

如何在复杂的分布式系统中做测试相关推荐

  1. 在一个成熟的分布式系统中 如何下手做高可用?

    对于企业来说,随着规模越来越大,整个系统中存在越来越多的子系统,每个子系统又被多个其他子系统依赖或者依赖于其他子系统.大部分系统在走到这一步的过程中,大概率会发生这样的场景:作为某个子系统的负责人或者 ...

  2. 编写程序计算交错序列_外文翻译 | FlyMC:高度可扩展地测试分布式系统中的复杂交错...

    作者:Jeffrey F. Lukman, Huan Ke, Cesar A. Stuardo等 日期:2019年3月25日 原文链接: https://ucare.cs.uchicago.edu/p ...

  3. 机器学习中qa测试_机器学习项目测试怎么做?(看实例)

    机器学习交付项目通常包含两部分产物,一部分是机器学习模型,另一部分是机器学习应用系统.机器学习模型是嫁接在应用之上产生价值的.比如:一款预测雷雨天气的APP,它的雷雨预测功能就是由机器学习模型完成的. ...

  4. 分布式系统中只有两个难题

    分布式系统抽象 讨论编程语言时,我们使用通用术语并用函数.运算符.类.变量和指针来定义我们的程序.通用的词汇可以帮助我们避免每次都为了描述某些东西而发明新词.我们的定义越精确.越没有歧异,听众也就越容 ...

  5. 构建一个分布式操作系统的简单方案—答陈硕的“分布式系统中的进程标识”一文...

    对分布式系统中的进程标识"一文的疑问 刚才看到陈硕先生的一篇blog:"分布式系统中的进程标识",地址:http://www.cnblogs.com/Solstice/a ...

  6. 分布式系统中处理参数配置的 4 种方案

    一个系统中包含有各种各样的配置信息,如一个日志文件需要配置以下几个信息. 日志文件生成主目录 日志文件名称,不同的日志级别对应不同的文件 当前日志级别 还有其他各种业务参数.系统参数等,大多单一系统是 ...

  7. 一篇搞定,分布式系统中唯一主键生成

    简介: 分布式系统中最关键的一个问题,ID生成,本文,一篇带你掌握 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要 ...

  8. 【分布式】Zookeeper在大型分布式系统中的应用

    一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...

  9. id长度 雪花算法_分布式系统中唯一ID算法之雪花算法

    背景 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种 ...

最新文章

  1. 域名无法加入域解决方法
  2. T^TOJ - 1251 - 。◕‿◕。TMD - 欧拉函数 - 质因数分解
  3. 用GO把你想说的话写到比特币链上
  4. 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel
  5. 字节输出流写多个字节的方法
  6. 微信小程序如何发送 http 请求
  7. Scrapy+ Selenium处理广告
  8. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线 1
  9. ccsa安学网小程序_【大检修】“CCSA安学网”掀起指尖上的学习热潮,助力1#大检修...
  10. PostgreSQL pg中的截取补齐lpad函数怎么用?
  11. ko学习二,绑定语法
  12. 文本前后空格去除工具
  13. php寻仙记,【网站搭建】寻仙记+天空之城两款文字游戏PHP源码
  14. 微信小程序开发文档-萧然 8.28
  15. 每个英文名字背后的寓意,你也来起一个吧
  16. 计算机编程画图步骤,计算机CAD绘图基础教程
  17. FLASH闪存编程原理与步骤
  18. 【Jquery练习】tab栏切换
  19. PS中去掉图片周围的无用白色区域
  20. #2阴阳师首页模块模拟

热门文章

  1. 【多视图几何】TUM 课程 第6章 多视图重建
  2. 性能测试之二——性能测试的流程
  3. python为什么那么多人点赞_python为何会火遍全球?它究竟是什么呢?阿里大佬告诉你答案...
  4. python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)
  5. python发微信工资条_帮公司财务妹子写了个“群发工资条”的Python脚本!
  6. 初学者应该怎么学习前端?web前端的学习路线大剖析
  7. 8年web前端开程序媛,告诉你如何零基础学习web前端
  8. 落魄前端,整理给自己的前端知识体系复习大纲(下篇)
  9. 7-5 sdut-验证“哥德巴赫猜想” (10 分)(优化素数判断)
  10. D - 区间覆盖问题