使用Radius和Dapr构建云无关应用程序

文摘   2024-07-18 10:12   中国香港  

作者:Jonathan Smith

多云使用模式

如今,大多数企业都使用来自多个供应商的公有云,如亚马逊 AWS 和微软 Azure,或计划在不久的将来这样做。原因因公司和行业而异。金融服务提供商面临的监管约束可能只能通过不同地理区域的多家云提供商来解决。许多企业拥有各种团队,每个团队都有特定的技能、偏好和技术要求,汇总起来就需要使用多种云。其他企业则简单地希望避免被特定供应商锁定。虽然具体场景和需求各不相同,但使用多家供应商云的趋势正在增长。在与众多企业讨论 Radius 时,我们发现了多云使用中的三种主要模式:

  1. 多云企业:这些企业在一家云提供商上部署某些应用,在另一家云提供商上部署其他应用。
  2. 云无关应用程序:这些企业将相同的应用部署到不同的云提供商上。
  3. 多云应用:这些企业有一个分布在多个云上的单一应用。

第三种情况,即一个跨多个云运行的单一应用,我们发现极其罕见。尝试过多云应用的企业几乎无一例外地提到了操作、安全性和性能管理方面的巨大挑战。虽然 Radius 可以帮助处理这类应用,但支持这类应用并不是 Radius 的设计目标。Radius 旨在满足前两种多云使用需求。如果给定的应用程序设计为完全云无关,则它同时满足上述两种情况的要求。本文重点介绍如何结合使用 Radius 和 Dapr 来交付完全云无关的应用程序。

Radius 和 Dapr 如何提供帮助

交付云无关应用程序极具挑战性,需要解决两个基本问题:

  1. 你的运行时应用程序代码本身必须是云无关的,即你的应用程序不能调用特定于某个专有云的 API。Dapr(分布式应用运行时)旨在解决这个问题。
  2. 你的应用程序和基础设施部署必须是云无关的,即你的部署不能假设特定于某个云的基础设施和配置。Radius 旨在解决这个问题。

由于 Radius 原生支持 Dapr,你可以结合两者来构建真正云无关的应用程序。本文将展示如何简单地结合使用 Dapr 和 Radius。(后续文章将专注于如何使用 Radius 结合 Redis 等开源技术,这样的组合同样能够实现完全云无关的应用。)

Dapr 的价值在于提供了使构建分布式、云原生应用更简单的云无关 API 构建块。这些 API 构建块抽象了状态管理、密钥管理或发布/订阅系统等服务。开发者可以使用 Dapr SDK 编写应用,平台工程团队可以使用 Radius 为基于 Dapr 的应用提供底层基础设施。例如,使用 Dapr 持久化状态的应用可以根据托管应用的云提供商选择使用 Azure Blob 存储或 Amazon DynamoDB 作为底层状态存储。以下是 Dapr 堆栈的概述。

本文剩余部分假设你已经使用过 Dapr,并通过至少完成Radius 入门指南[1]对 Radius 的基础有所了解。如果你想复习 Radius 或 Dapr,请查阅Radius 文档[2]Dapr 文档[3]

工作原理

Dapr 和 Radius 作为独立解决方案都很有价值,但结合使用效果更佳,如上所述。下面我们将看看一位已经在使用 Dapr 并希望通过使用 Radius 的 Dapr 集成来创建真正云无关应用的开发者的体验。假设你是一位采用 Dapr 以期使应用成为云无关的开发者。你已经构建并容器化了使用 Dapr 状态存储的应用,并在本地开发环境上运行良好。现在,你想测试将其部署到 AWS 和 Azure 上。不幸的是,你仍然面临大量的挑战性工作,需要熟悉两家云的具体细节,并为每个云设置独特的基础设施和配置。换句话说,你的应用程序运行时通过 Dapr 实现了云无关,但其依赖的基础设施并非如此。

这时,Radius 和 Dapr 之间的紧密集成就派上了用场。Radius 支持三种最流行的 Dapr 资源类型:状态存储、密钥存储、发布/订阅代理。因此,你可以轻松地在 Radius 中定义现状应用并引用 Dapr 状态存储构建块。一旦在 Radius 中描述了你的应用,就可以无需进一步修改 Radius 应用定义,也不必了解每个公有云的复杂细节,将其部署到私有云和你选择的公有云上。

在 Radius 中描述 Dapr 应用只需三个步骤:

  1. 添加 Dapr 边车
  2. 声明应用使用的构建块
  3. 声明从应用容器到构建块的连接

操作流程如下。我们从这个简单的 Radius 应用开始,其中包含一个你将启用 Dapr 的容器。

import radius as radius

@description('The ID of your Radius Application. Automatically injected by the rad CLI.')
param application string

resource demo 'Applications.Core/containers@2023-10-01-preview' = {
  name: 'demo'
  properties: {
    application: application
    container: {
      image: 'ghcr.io/radius-project/samples/demo:latest'
    }
  }
}

要为该容器添加边车,你添加一个类型为 daprSidecar 的扩展。这将在该容器内启用 Dapr:

resource demo 'Applications.Core/containers@2023-10-01-preview' = {
 name: 'demo'
 properties: {
   application: application
   container: {
     image: 'ghcr.io/radius-project/samples/demo:latest'
   }
   extensions: [
     {
       kind: 'daprSidecar'
       appId: 'demo'
       appPort: 3000
     }
   ]
 }
}

在容器中启用 Dapr 后,你声明对应用所使用的状态存储构建块的引用:

resource stateStore 'Applications.Dapr/stateStores@2023-10-01-preview' = {
 name: 'statestore'
 properties: {
   environment: environment
   application: application
 }
}

最后,你将声明 Dapr 已启用的容器与状态存储构建块之间的连接:

resource demo 'Applications.Core/containers@2023-10-01-preview' = {
  name: 'demo'
  properties: {
    application: application
    container: {
      image: 'ghcr.io/radius-project/samples/demo:latest'
      ports: {
        web: {
          containerPort: 3000
        }
      }
    }
    extensions: [
      {
        kind: 'daprSidecar'
        appId: 'demo'
        appPort: 3000
      }
    ]
    connections: {
      statestore: {
        source: stateStore.id
      }
    }
  }
}

此时,你可以使用命令 rad run 或 rad deploy 将应用部署到 AWS 和 Azure 上。作为部署的一部分,Radius 会自动运行 Radius Recipe[4],创建轻量级 Redis 容器(Dapr 状态存储的默认后端存储)以及 Dapr 组件配置。因此,你甚至不必在任一云上设置和配置 Dapr 或状态存储。Radius 为你处理这一切。

替代方法

希望以上信息和示例清楚地展示了使用 Radius 和 Dapr 构建云无关应用程序的力量和简洁性。为了进一步强化这一观点,让我们考虑使用其他技术使应用程序成为云无关的体验。例如,许多开发者会使用 Helm chart 将 Dapr 应用打包并部署到 Kubernetes 上,并使用 Terraform 部署应用依赖的云基础设施。在很多情况下,即使是简单应用的部署也可能需要 Bash 脚本来执行命令。

使用 Helm chart 和 Terraform 涉及 Radius 自动化处理的多个手动步骤。通常,你首先会创建多个 Helm chart 来部署带有 Dapr 边车、Dapr 状态存储和安全管理的云提供商凭证的应用容器。然后,你会使用 Terraform 在 AWS 和/或 Azure 上配置和管理基础设施资源,从而管理更多的配置和工具。此外,由于 Helm 和 Terraform 不像 Radius 和 Dapr 那样是一个集成解决方案,你还需要创建一些 Bash 脚本来完成各种临时任务,作为整合“粘合剂”,使所有这些协同工作。例如,要自动化 Helm、Dapr 和 Terraform 之间的命令执行就需要 Bash 脚本。其他基础任务,如将 Terraform 的输出转移到 Kubernetes 上,也需要脚本,所有这些都只是增加了更多复杂性,需要管理更多文件并保持同步。相比之下,Radius 通过简单的应用描述和使用 rad deploy 部署应用简化了整个过程,如上所示。

了解更多并参与贡献

有关结合使用 Dapr 和 Radius 的更多信息,有以下几种资源:

视频

这些 Open at Microsoft 视频提供了很好的入门内容:

  • Dapr 简介[5]
  • Radius 简介[6]
  • 使用 Dapr 和 Radius 创建真正的可移植应用[7]

教程和操作指南

教程[8]提供了将 Dapr 状态存储添加到 Radius 应用中,然后部署和测试该应用的动手端到端体验。

这些操作指南引导你完成使用 Dapr 与 Radius 时经常会完成的目标明确的常见步骤。

  • Dapr 概览[9]
  • 在你的 Radius 应用中的容器添加 Dapr 边车[10]
  • 在你的 Radius 应用添加 Dapr 构建块[11]

其他社区资源

Radius 维护者很高兴能继续与开源社区合作,扩展其功能集,并欢迎社区的所有贡献。我们期待你的加入!要开始使用 Radius,请参见:

  • 文档[12]中了解更多。
  • 探索开源代码仓库[13]
  • 社区[14]互动
参考资料
[1]

Radius 入门指南: https://docs.radapp.io/getting-started

[2]

Radius 文档: https://radapp.io/

[3]

Dapr 文档: https://dapr.io/

[4]

Recipe: https://docs.radapp.io/guides/recipes/overview/

[5]

Dapr 简介: https://learn.microsoft.com/en-us/shows/open-at-microsoft/introduction-to-dapr

[6]

Radius 简介: https://www.youtube.com/watch?v=mT_NWFnYn0A

[7]

使用 Dapr 和 Radius 创建真正的可移植应用: https://learn.microsoft.com/en-us/shows/open-at-microsoft/create-truly-portable-applications-with-dapr-and-radius

[8]

教程: https://docs.radapp.io/tutorials/dapr/

[9]

Dapr 概览: https://docs.radapp.io/guides/author-apps/dapr/overview/

[10]

在你的 Radius 应用中的容器添加 Dapr 边车: https://docs.radapp.io/guides/author-apps/dapr/how-to-dapr-sidecar/

[11]

在你的 Radius 应用添加 Dapr 构建块: https://docs.radapp.io/guides/author-apps/dapr/how-to-dapr-building-block/

[12]

文档: https://radapp.io/

[13]

代码仓库: https://github.com/radius-project

[14]

社区: https://aka.ms/radius/discord


点击【阅读原文】阅读网站原文


文章转载自CNCF点击这里阅读原文了解更多

联系Linux Foundation APAC




Linux基金会是非营利性组织,是技术生态系统的重要组成部分。

Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。请关注LFAPAC(Linux Foundation APAC)微信公众号。

LFAPAC
Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。
 最新文章