利用 OAM 和 Dapr 的云原生应用的未来

本文介绍了基于 OAM 和 Dapr 的云原生应用的未来。

作者 Hugo Barona 译者 宋净超(Jimmy Song) 发表于 2020年1月26日

本文译自 The Future of Cloud Native Applications With OAM and Dapr

在2019年11月4日至8日于佛罗里达州奥兰多举办的2019年微软Ignite大会上,Azure首席技术官Mark Russinovich介绍了微软开发的两个创新和革命性的项目,旨在解决当今IT专业人士和开发人员在试图构建基于微服务的应用程序时的一系列现有问题。这场会议被命名为《基于开放应用模型(OAM)和分布式应用运行时(Dapr)的云原生应用的未来》。

开放式应用模型(OAM)

因此,其中一个项目与开放应用模型(OAM)有关。它代表了一个开放的标准,允许我们建立云原生应用程序,与平台无关,并遵循关注点分离的原则,通过将应用程序的定义与应用程序的部署和托管基础设施的细节分离,为我们提供一些好处。

将应用程序的定义与操作细节分开,使应用程序开发人员能够专注于其应用程序的关键要素,并将其从部署地点和方式的操作细节中抽象出来。另外,关注点的分离允许平台架构师开发可重复使用的组件,而应用开发者则专注于将这些组件与他们的代码集成,以快速、轻松地构建可靠的应用。在所有这些方面,OAM在那些有不同角色的场景中特别有用,比如在下面的图片中,构建和管理应用程序,因为它允许你有一个关注点的分离,所以开发和管理你的应用程序的不同角色可以专注于他们任务的关键因素。

应用程序开发和部署生命周期中的角色

OAM引入了几个概念,组成了你的应用程序。其中一个概念是代表你的应用程序的Component(组件)。这些组件可能是服务,如SQL数据库或带有相应负载均衡器的.NET WebAPI。开发人员可以创建代码,将其打包成一个组件,然后创建清单,描述不同组件和其他应用程序之间的关系。有了这个,你就把组件的实现和这些组件如何在一个完整的分布式应用架构中结合起来的描述分开了。

为了将这些组件转化为具体的应用程序,应用程序运维使用这些组件的配置来形成一个可以被部署的应用程序的具体实例。配置资源是使应用程序运维能够从开发人员提供的组件中运行一个真正的应用程序。

最后一个概念是Trait(特征),而你使用它们的集合来描述你的应用环境的特征和它的能力,如自动扩展和入口等等。这些特征允许你根据要求和背景,将你的应用程序部署到具有不同特征的不同环境。然后,这些特征可以由基础设施运维进行配置,以满足其环境的独特操作要求。

最后但同样重要的是,该规范在设计上是可扩展的。同样,OAM使平台提供者能够通过Trait(特征)系统公开其平台的独特特征,这种方式使应用开发者能够在支持必要特征的地方建立跨平台的应用。

分布式应用程序运行时(Dapr)

Dapr是一个可移植的、事件驱动的运行时,它使开发人员能够轻松地建立弹性的、无状态和有状态的微服务应用程序,并在云和边缘上运行,并拥抱语言和开发人员框架的多样性。它遵循Sidecar架构,所以它使用一个连接到你的每个组件的Sidecar节点,所以它可以扩展和增强你的应用程序的功能,如服务发现、负载均衡、流量管理等。

使用这种编程模型,开发人员能够创建微服务应用程序,而不需要携带那么多在构建分布式应用程序过程中引入复杂性的因素,如弹性、可扩展性、服务身份和发现、负载均衡、状态管理等等。Dapr将这些复杂的因素从开发人员那里抽象出来,这样他们就可以专注于他们正在编写的代码。

Dapr的另一个重要方面是与托管我们应用程序的平台有关。Dapr使我们能够在云端、企业内部、甚至是边缘的多种环境中运行我们的应用程序,包括任何可用于托管应用程序的Kubernetes集群。

最后,同样重要的是,Dapr允许你利用你最喜欢的编程语言来构建你的分布式应用,并克服你在现今的一些服务中可能面临的编程语言和版本的限制,以构建基于微服务的应用。

下面的图片提供了一个使用Dapr的微服务应用架构的概述。基本上,你使用你喜欢的编程语言或框架,如Java、Node.js、Python、.NET Core等,构建构成你的应用程序的服务,然后你的服务使用其可用的标准API,并使用HTTP或gRPC协议与Dapr通信。

使用 Dapr 的微服务应用架构

总结

因此,我们有OAM,它代表了一种规范,允许你定义和建立跨平台的应用程序,在云和边缘上运行,为你提供关注点的分离,让你的团队专注于他们任务和责任的关键要素。

然后,我们把Dapr作为一个运行时,通过提供关注点的分离和促进一些影响构建这种应用的复杂性的因素,降低了构建基于微服务的分布式应用的复杂性。此外,Dapr允许应用程序在 “云和边缘 “计算基础设施之间进行移植,并克服目前开发人员在构建此类应用程序时面临的移植问题。

如果你想获得与这些项目有关的更多细节,请看以下资源。