反应式 、 流 和 NoSQL 是现如今的重要概念,它们非常有用,但是,在阅读网文时, Vaughn Vernon 有时候会有这样的感觉,就是如果公司要想获得 云原生 应用程序的全部好处,就必须使用这些概念。他在一篇博文中强调,这不是真的,并且指出,不把所有的东西重新构建,也是很有可能从云中受益的。
Vernon是《 实现域驱动设计 》和《 基于Actor模型的反应式消息传递模式 》一书的作者。在试图阐明有关云原生和反应式的技术现状时,他回应了自己读过而又特别在意的六种言论。
在Vernon看来,当你需要快速响应业务变化时,流数据是一种非常有用的技术,目前,它是实时处理数据的最佳方式。不过,他指出,数据总是在云中流动的说法并不准确。大多数业务系统仍然使用静止的持久化状态数据。
他还指出,在处理流时,有一些智能解决方案可以帮助解析流数据,并且对缺少这类工具的技术栈发出了警告。
Vernon强调,可以把富有经验的开发人员的技巧用在反应式架构中。公司不用因为采用新的技术栈就用新人替换现有的开发人员和架构师,那样会把核心业务置于风险之中。
Vernon指出,为了帮助开发人员提高,应该给他们提供现代化的工具,比如支持并发和并行的硬件,这是现如今非常有用的东西。
Vernon认为那不是真的;数据是持久化的,就像几十年来一直在做的那样。如果出现中断,而数据没有持久化,那么公司最有价值的资产就会丢失。通常,对于流而言,情况就是如此。当然,有一些例外。有时候,只需要对流中的数据进行抽样,在这种情况下,流中的部分数据可以丢失,而且没有任何影响。
当情况需要时,你不能认为使用RDBMS低级。在某些情况下,RDBMS可能无法满足特定应用场景的扩展性需求。另外有些时候,它并不是当前任务的最佳选择,而随意忽略这样一种技术选择会导致许多不必要的复杂性。
在Vernon看来,重要的是要理解何时需要持久化,他还指出,大多数专家和开发人员都可以推断出来,做出可靠的决策。
就流本身而言,是这样的,但通常,数据流可以进入允许使用SQL进行查询的存储。查询实时流数据的其中一个例子是被称为 连续查询 的技术,Vernon指出,这项技术已经推出很长时间了。
包括单体应用程序无法从云中获益在内,这些言论对于Vernon而言都很常见,但是错误的,他提到了一项称为“ lift and shift ”的技术,可以在保留遗留系统的同时从云中获益。在Vernon看来,一个恰当模块化的单体比一大堆强耦合的微服务要强多了。相反,问题来自脆弱的架构和糟糕的模块化,那通常会导致 大泥球模式 。
Vernon建议,当不同业务域的变化速率存在明显的差别时,考虑一下微服务,并且指出,知道在什么情况下优先选择应用程序微服务架构或单体架构非常重要。
Vernon认为,Java或另外一门JVM语言非常适合创建反应式应用程序以及实现实时、流式、数据驱动的场景。他还认为,Java有一个光明的未来,并 援引了Bjarne Stroustrup的话 :
只有两种[编程]语言:人们抱怨的语言和没人用的语言。
为了帮助构建Java原生、反应式应用程序,Vernon已经开始致力于开源平台 vlingo 的开发,旨在从反应式、 事件驱动的微服务 架构中获益。该平台以 领域驱动设计 和 角色模型 的思想为基础,现在已经提供 下载 。
查看英文原文: Vaughn Vernon: The Reality of Being Cloud-Native and Reactive