InfoQ趋势报告:
架构和设计领域技术演变详解
本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式、技术框架模式的实现,以及软件架构师必须掌握的设计流程和技能。
关键要点
我们看到了“演化式架构”设计需求的增长,这种架构建立在可替换性设计和关注“胶水”组件的基础之上。演化式架构支持功能性和跨功能性需求和约束的未来变化。
“微服务”架构可能会进入晚期大众阶段,但与“正确设计分布式系统”相关的主题以及反应式和容错式设计将越来越靠近采用曲线。
我们预测有些架构主题永远不会转移到早期大众或晚期大众阶段,但它们当中有一些高效的针对特定用例的模式,如基于事件溯源/CQRS或基于Actor模型的系统。
我们看到“架构师”这个角色越来越多地偏向于技术领导力、架构模式识别和框架意识以及横切关注点设计。
虽然我们认为“serverless”这个术语有点含糊不清,但我们很欣赏serverless将重点放在设计事件驱动的系统以及自动消除某些平台问题的可能性上。
InfoQ和QCon都关注处于“创新者、早期采用者和早期大众阶”段的主题。我们尝试找出符合Geoffrey Moore所谓的早期市场的想法。早期市场“客户群由技术爱好者和有远见的人组成,他们希望走在机遇前面,解决迫在眉睫的问题”。我们也在寻找可能会“跨越鸿沟”以便得到更广泛采用的想法。值得一提的是,技术在采用曲线上的确切位置可能会有所不同。例如,湾区公司目前广泛采用微服务架构,但在其他地方可能不是这种情况,而且对他们来说采用微服务也许不太合适。
本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式、技术框架模式的实现,以及软件架构师必须掌握的设计流程和技能。
从上次评审这个主题以来发生的显著变化是“微服务”已进入到后期大众。同时,根据我们内部的讨论,与“正确设计分布式系统”相关的主题以及反应式和容错式设计离采用曲线已经不远了。在Gartner炒作周期中,微服务可能正在接近“幻灭低谷”的底部。
我们预测,有些架构主题永远不会沿着采用曲线走向早期大众或晚期大众,但它们当中包含了几种高效的架构模式——例如基于事件溯源/CQRS或基于Actor模型的系统——可以为某些组织和业务问题提供高效的解决方案。
虽然我们认为“serverless”这个术语有点含糊不清,但我们很欣赏serverless将重点放在设计模块化、事件驱动的系统以及自动化一些底层操作平台的可能性上。我们还看到了围绕演化式架构的讨论,演化式架构将为需求和约束的未来变化提供支持。
除了技术技能(如架构模式识别和框架意识)和处理横切关注点设计的能力,我们看到“架构师”这个角色正在变得更加专注于软技能,例如技术领导力。
下图是2018年下半年的趋势图,2019版位于文章的开头。
以下是InfoQ的三位架构和设计(AD)主题编辑之间的内部聊天记录(内容经过轻微的编辑),为图中的技术定位提供了更多相关信息。
Daniel Bryant,独立技术顾问、Datawire产品架构师、InfoQ新闻经理:
我认为HTTP2将进入早期采用者阶段,而HTTP3则进入创新者阶段。GraphQL(可能也包括gRPC)可能会进入早期采用者阶段(或创新者?)。我认为混沌工程应该加入DevOps的行列。微服务进入晚期大众,BDD、DDD和TDD也是。
我很想看到“演化式架构”出现在某个地方——可能是早期采用者?那么“架构师即技术领导者”(强调角色的非技术演变)呢?
我很想听听你们的想法,我们是否需要移动、添加或删除某些主题?
Jan Stenberg, IT顾问,在.Net/C#和JVM/Java方面拥有超过25年的经验:
我认为AD在某种程度上与InfoQ报道的其他主题不同。
在AD方面,我们没有新的或更新的架构常规基础。相反,由于新的工具、框架或智能架构的出现,已有的想法会再次流行起来,并且可能被包装和品牌化。
有一些领域可以被纳入到两个队列中。从高层面来看,它们可以被纳入到AD中,而技术性部分则应该被纳入到另一个队列。我认为serverless就是这样的一个例子,从高层面来看,它是AD的一个重要领域,而技术性部分则属于云队列。微前端和类似的技术则是另外一个例子,它应该属于AD还是HTML5和JavaScript?
我认为有一些领域或架构永远不会出现在早期大众或晚期大众阶段,但它们当中却有一些我最喜欢的架构,比如基于事件溯源/CQRS或基于Actor模型的系统。我认为,在可预见的未来,它们将是少数人使用的利基架构。我不确定我们应该如何看待这些主题,或许当架构师和开发人员不再谈论它们时,它们就会消失?
以下是我对AD未来的看法(或许我希望这样):
• serverless。去年我听过这方面的演讲,它们给我的印象是这一领域将越来越自动化,底层基础设施的工作量将越来越少。
• 工作流平台(如Camunda)。我认为它们对于具有复杂业务逻辑的微服务或分布式系统来说非常重要。
• 事件溯源/CQRS。我希望它会变得更加主流,可能会进入早期采用者或早期大众阶段。
• 事件驱动的架构,进入早期采用者或早期大众阶段。
• Actor模型/反应式。去年我和Vaughn Vernon讨论了这件事,他认为有一天它们会成为主流,但我对此持怀疑态度。
• 演化式架构很有趣,我认为它进入早期采用者阶段是对的。
• 混沌工程。是的,它应该属于DevOps,从AD角度讨论这个主题可能是一个例外。
• GraphQL和类似的工具应该属于创新者或早期采用者,它将取代REST。
架构师即技术领导者。我在家中与各种各样的架构师会面,他们大部分人的主要工作是让商业/政府领域专家了解他们自己的领域,所以架构师更应该被纳入到敏捷队列中?
微服务进入晚期大众。我认为微服务很快将成为“今天的SOA”。很多人用对了,也有很多人将它实现成了分布式单体。
DDD进入晚期大众,但我希望它仍然会是InfoQ的一个有趣的主题。
BDD进入晚期大众,或“晚期少数派”。
关于TDD,仍然或多或少会有一些讨论。单元测试或黑盒测试或者其他,但至少会进入晚期大众。
当我在日常生活中(不是在技术大会和类似的活动中)遇到架构师、开发人员和领域专家时,我意识到,我们在这里讨论的很多概念对于他们来说是未知或非常弥散的,这也使得他们很难看到InfoQ的好处。大约两年前,我在开发者大会(应该是在加拿大)上听过一个演讲,Vaughn Vernon问有多少人对DDD有所了解,大约有一半的观众举起了手。
当我开始成为InfoQ编辑时,我写了一些有关框架和库的文章,我认为这些框架和库新增的功能可能会影响架构,但随着时间的推移,我写的东西越来越关注有趣的博文和演示文稿上,只有一小部分是关于与特定架构密切相关的框架,如Axon、Akka。
在QCon大会期间进行这种讨论会很棒。
Charles Humble, InfoQ主编:
我和Vaughn Vernon都认为Actor模型很可能会成为主流——无论是直接地还是通过消息传递来实现。在JVM领域,Akka在这方面做得很好,而在金融领域,基于消息传递的系统长期以来一直是实现Actor模型的一种流行的方式。
Actor似乎很容易掌握和理解,也是处理大规模并行工作的一种很好的方法。我希望看到在Pony之上构建基于Actor模型的现代系统,并成为一个榜样,但我不得不说,我个人认为这不太可能。
关于演化式架构,Martin Fowler去年在播客上谈到了这个问题。我很期待Thoughtworks的这本书。
Thomas Betts, IHS Markit首席工程师和InfoQ Architecture Queue负责人:
从高层面来看,我同意Daniel的大部分观点。Jan是对的,一些架构模式顺着图中的趋势自然演进,而其他一些则可能永远不会超过早期采用者阶段,因为它们并不会被广泛采用。
有时候,我会对AD与InfoQ其他主题之间的重叠部分感到困惑,尤其是文化与方法论(CM)。我想这与康威定律有关。架构的很多内容都归结为通信——进入和离开系统的外部通信点是什么?内部服务是如何相互通信的?如何保存和访问数据?
在很多方面,公司解决这些问题的方式以及他们可以选择的选项将基于它们在AD和CM采用生命周期曲线上的位置。我认为AD是这个等式的技术端,而CM是非技术端,但这样的比喻似乎过于简单化了。此外,技术实现可能应该属于开发和/或语言队列。AD处于两者之间的软弱处,处理横切面关注点,为如何实现系统提供指导。
我想添加一些具体的讨论点。
serverless——虽然我个人不喜欢这个术语,因为它似乎没有任何特定的含义,它或许应该在早期采用者阶段。
反应式——可能应该属于早期采用者。我认为反应式架构会变得更加普遍,因为开发人员越来越熟悉反应式编程,特别是在使用JavaScript时。
DDD——虽然DDD本身可能会进入晚期大众,但仍然会有很多与DDD密切相关的衍生想法,这些想法会在创新者或早期采用者中。例如,事件溯源可以进入早期采用者或早期大众。但是,我不认为很多子主题应该被包含在AD主题图中。
微服务——与“serverless”一样,它是一个容易被滥用或误解的术语。我认为随着它被广泛采用,将进入晚期大众,但可能在分布式架构方面处于早期采用者阶段。
分布式系统——我认为把它放在主题图中并不合适,因为这个概念太宽泛了。但我希望我们在谈论系统设计时可以考虑到分布式。像反应式和容错这样的想法对于构建健壮的分布式系统来说至关重要,而它们在单体系统中可能没有那么重要。这就是为什么要在AD主题图中加入混沌工程。
我完全支持在QCon大会上讨论这些话题!
关于作者
Thomas Betts是IHS Markit的首席软件工程师,拥有20年的专业软件开发经验。他一直致力于提供令客户满意的软件解决方案。他曾在多个行业工作,包括零售、金融、医疗、国防和旅游。Thomas与妻子和儿子住在丹佛,他们喜欢徒步旅行,也喜欢探索美丽的科罗拉多州。
Daniel Bryant正在引领组织和技术变革。他目前的工作包括通过引入更好的需求收集和规划技术来实现组织敏捷性,重点关注敏捷开发中的架构相关性,以及促进持续集成/交付。Daniel目前专注于“DevOps”工具、云/容器平台和微服务实现。他还是伦敦Java社区(LJC)的负责人,为多个开源项目做出贡献,为InfoQ、DZone和Voxxed等知名技术网站撰写文章,并定期出席QCon、JavaOne和Devoxx等国际性会议。
Charles Humble于2014年3月接任InfoQ.com的主编,指导我们的内容创作,包括新闻、文章、书籍、视频演示和访谈。在担任InfoQ的全职工作之前,Charles负责我们的Java报道,并担任PRPi咨询公司的首席技术官,PRPi咨询公司是一家名誉研究公司,于2012年7月被普华永道收购。他全面负责PRPi公司内部使用的定制软件的开发。他在企业软件领域工作了大约20年,曾经是开发人员、架构师和开发经理。在业余时间,他为Twofish创作音乐,首张专辑于2014年2月发行,并尽可能多地与妻子和孩子在一起度过。
Jan Stenberg在瑞典北部的一名IT顾问,工作超过25年,在.Net/C#和JVM/Java方面有着丰富的经验。他的经验范围从大型分布式和基于服务的系统到基于Web和富客户端应用程序,再到硬件相关的软件。