想成功转向SOA,请摒弃单体系统开发习惯
极客时间编辑部
讲述:丁婵大小:7.90M时长:05:45
你好,欢迎收听极客视点。
在面向服务架构也就是 SOA 的世界里,沟通方式、团队、运营、部署和流程与单体架构世界是不一样的。你开发单体系统使用的工具与开发面向服务系统使用的工具也不一定都一样。作为开发人员(或企业),想要成功转向 SOA,那么旧工具和开发习惯也需要被新的工具和开发习惯所取代。最近,软件开发人员塔哈·马利克(Talha Malik)就发文分享了他的方法,InfoQ 对其进行了翻译,供你参考。
本地开发
在开发单体系统时,是在本地机器运行大部分的基础设施。开发人员或多或少都会遇到“它无法在我的机器上运行”的问题。企业会提供引导解决方案来避免这个问题,让开发人员尽快恢复开发工作。大多数解决方案的目标是让基础设施更容易在本地机器上运行。
在开发面向服务的系统时,在本地机器上运行所有的东西将会遇到伸缩性问题。
在大多数情况下,开发机配置不高,无法在开发期间运行必需的服务。你的机器可能可以运行少量的大型服务,但总有一天配置会跟不上。
要在本地运行服务,开发人员必须知道如何运行(或者部署)不是他们开发的服务。
在本地运行多个服务的解决方案是一种单体思维,以这种方式来开发面向服务的系统可能会变成分布式单体。一些公司提供了本地服务开发解决方案,它们通常是这样的:
通过依赖注入和客户端开发库来模拟与其他服务的交互;
在云端运行一部分基础设施,在本地运行一部分基础设施,并将本地的基础设施与云端集成在一起。
端到端测试
端到端测试有两种形式:
自动化测试,通常会借助 CI/CD 管道;
手动测试,这是开发人员在提交代码之前和在进行代码评审时所做的工作。
单体代码库的端到端测试比较容易。在准备好适当的数据之后,就可以在本地机器上执行测试。
有时候,虽然你已经进行了单元和集成测试,让测试人员在本地机器上进行端到端手动测试会进一步提升你的信心。随着服务生态系统的发展,服务会越来越多,想要在本地测试所有东西是不可能的事情:
准备数据可能需要很长时间;
难以模拟系统(如消息代理、异步作业队列等)交互;
开发机无法运行所需的基础设施。
SOA 架构的端到端测试则不太一样。进行本地端到端测试的成本非常高,而且不具备伸缩性。
SOA 之所以流行,是因为它可以加快迭代速度。如果你花了大量时间在本地测试上,那就无法利用 SOA 的优势。你需要放弃在本地测试一切的想法。
你的测试策略取决于你将要采用的本地开发解决方案。下面是一些无需进行本地测试就可以发布代码的方法:
启用功能开关,在将功能发布给所有用户之前就可以在生产环境中进行测试;
金丝雀部署、影子部署、红黑部署,等等;
在发布到生产环境之前对变更进行压力测试。
当然,虽然你放弃了本地测试,但仍然可以通过以下这些途径来提升信心:
成熟的可观测性;
警报、工作簿和回滚过程,可在发生故障时进行回滚。
调试
如果测试策略发生了变化,那么调试策略也需要做出改变。
在单体系统中,一个堆栈跟踪信息就足以让你着手诊断问题。堆栈跟踪信息为你指明了方向,你层层深入,直到找到问题根源。堆栈跟踪信息和传统的调试工具通常也可以用来调试 SOA 架构中出现的问题,但对某些问题是毫无用处的:
临时的网络错误;
多个服务之间的数据同步问题;
不正确的配置,连接超时、读写超时、工作进程数量、伸缩配置等等。
除了看代码找问题,你的调试工具箱中也需要包括这些:
用于下载和筛选访问日志的脚本;
分布式跟踪,帮你了解用户请求的生命周期;
带有 CPU、内存和 P99 指标的仪表盘,用于捕获没有抛出堆栈跟踪信息的问题;
用于模拟生产环境负载的策略。
结论
总的来说,在采用 SOA 架构时很容易把系统开发成分布式单体。你要避免将单体系统的开发习惯带到 SOA 架构中。单体系统并不是坏东西。很多公司为了转向 SOA 而大肆投入资源,但却没有意识到,在某些情况下,单体可能更适合它们。无论你是坚持使用单体还是采用 SOA,都要避免把系统变成分布式单体,因为这才是最糟糕的。
以上就是今天的内容,希望对你有所帮助。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论