TW洞见 | 周哲武:开发过程中的第三方依赖

“聪明”的本地模拟服务

现在,越来越多的应用都开始面向服务架构,这意味这更好的重用性;一个设计良好的服务,不仅可以被网站使用,也可以被各种移动应用使用。但是世界上没有免费的午餐,在网站的开发过程中,如果依赖于第三方服务,很可能存在这样的问题:另一个团队正在开发这些第三方服务,他们也在不断的部署这些服务,服务经常不可达。

这会导致两个问题,首先功能测试失败,build失败,代码无法提交;其次,很多前端的功能需要依赖数据,这些服务不可达,就意味着没有数据,那么前端的功能开发也被阻塞了。

这种情况下,一般的做法是在项目中构建一些假的服务(以下统称本地模拟服务),直接返回静态的数据,稳定可靠;

然后,所有的测试都依赖于本地模拟服务, 不稳定的第三方服务就被隔绝了,程序员们就可以无忧无虑的提交代码,但好景不长,随着时间的推移,新的问题又来了。

前面我们已经假定,第三方服务也在开发中,在不断的变化中,一段时间后,那些本地模拟服务返回的数据已经失效。无奈地程序员们手动的更新了本地的静态数据,没过多久随着第三方服务的变更,这些静态数据有失效了。

写到这里,大家肯定在想,如果本地的静态数据能能够随着第三方服务的变更而更新,就不会向上面那样痛苦了,也就是说,我们需要的不是简单的静态数据,而是一种更加“聪明”本地模拟服务,它能够:

  1. 在第三方服务失效的时,返回本地静态数据。
  2. 如果第三方服务可用,它就变成代理,负责转发请求和响应;然后更新本地的静态数据。

这样“聪明”的本地模拟服务,不仅能够有效的隔离真实服务的不稳定,还能够依据这些不断变化的第三方服务,自动的更新本地静态数据。

部署

使用了这样的“聪明”的本地模拟服务,貌似一切都完美了。它完美的隔离了第三方服务,但是,有个新的问题来了,怎么知道第三方服务真的不可达了,很多情况下,我们需要及时的得知第三方服务的状态,以便于尽快的通知其他团队来修复这些问题。在我们的项目里,我们专门这对这些第三方服务创建了集成测试,这些继承测试在build阶段不跑,而是在build跑完以后触发,这样一旦功能测试过了,也就是build是好的,但是集成测试失败了,我们就能立即得出结论,第三方服务不可达了,关于部署和pipeline,将在接下来的文章中描述,这里先挖个坑:)。

实现

事实上,早就有 VCR ,能够用来缓存http请求和应答,以key-value的方式存储,key是request.

受VCR的影响,在java的世界里,有 Betamax, 通过annotation的方式来缓存http交互。基于Betamax,我们只需要少量的代码,就实现了上面的“聪明”的本地模拟服务。

原文发布于微信公众号 - 思特沃克(ThoughtWorks)

原文发表时间:2015-01-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王硕

原 PostgreSQL知识树

19640
来自专栏阿凯的Excel

Excel插件大放送~

当你面对姓名电话拆分电话的时候,你会怎么做? 是Right函数? ? 还是智能填充? ? 抑或这样? ? 或者这样? ? 当你想要把人员信息按照部门进行拆...

53160
来自专栏流柯技术学院

LR--Controller的Pacing设置(不容忽视的设置)

笔者:很多人在使用LR时会忽略此选项,但对LR有深入理解的人,会经常使用该配置。测试场景:100个并发用户达到100TPS的处理能力,重点验证并发用户,也就是每...

18820
来自专栏WeTest质量开放平台团队的专栏

大道至“简”——腾讯WeTest压测简单模式上线!

逢年过节如果坐高铁回家的话一定要上12306来刷票,然而代表中国处理最高并发用户复杂请求的12306也经常会承受不住巨大的请求量。 ? 为了买票,我们只能忍了...

12420
来自专栏后端技术探索

一步步构建大型网站

今天我们来谈谈一个网站一般是如何一步步来构建起系统架构的,虽然我们希望网站一开始就能有一个很好的架构,但马克思告诉我们事物是在发展中不断前进的,网站架构也...

10620
来自专栏云计算D1net

混合云和多云管理不再难:基础架构即代码来帮忙

随着运维流程变得越来越灵活,IT团队面临着越来越大的复杂度。当应用动态改变时,可以使用敏捷或者持续应用开发。但是当IT资源本身动态变化的时候怎么办呢多云和混合云...

41770
来自专栏情醉中国风

基于云安全环境的最佳实践

无论您是打算使用托管服务来处理你们组织的云安全,还是决定创建管理自己的安全项目,至少,将所需的所有信息汇总起来就可能是一项复杂的任务了。为了解决这个问题,我们想...

24290
来自专栏企鹅号快讯

Python的web框架-Bottle

近日除了日常的工作复习(没错,KIM 是个准备裸考的考研狗),就是尝试着Python的web框架的一点点东西,今日特地搬出来跟大家分享下。 Python常见的文...

233100
来自专栏IT大咖说

Web持续集成工作实践

摘要 如果团队开发成员经常集成他们的工作,每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建来验证,从而尽快地发现集成错误。...

43660
来自专栏嵌入式程序猿

这只电子狗跑哪里去了,快找

最新新换了批电脑,所有的开发软件都要重装,其中在IAR安装完,license激活后,打开软件时总是提示找不到dongle,导致项目无法编译,我用的是8.20版本...

11320

扫码关注云+社区

领取腾讯云代金券