<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dapr 概念 on Dapr 文档库</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/</link><description>Recent content in Dapr 概念 on Dapr 文档库</description><generator>Hugo</generator><language>zh-hans</language><atom:link href="https://v1-18.docs.dapr.io/zh-hans/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>概述</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/overview/</guid><description>&lt;p>Dapr 是一个便于移植的事件驱动运行时，帮助开发者轻松构建在云和边缘环境中运行的弹性应用，无论是无状态还是有状态的，并支持多种编程语言和开发框架。&lt;/p>
&lt;div class="embed-responsive embed-responsive-16by9">
 &lt;iframe width="1120" height="630" src="https://www.youtube-nocookie.com/embed/9o9iDAgYBA8" title="YouTube 视频播放器" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;h2 id="支持任何语言框架和环境">支持任何语言、框架和环境&lt;/h2>
&lt;img src="https://v1-18.docs.dapr.io/images/overview.png" width=1200 style="padding-bottom:15px;">
&lt;p>随着云技术的普及，传统的 Web + 数据库应用架构（如经典的三层设计）正逐渐向微服务架构转变，这些架构本质上是分布式的。开发微服务应用不应要求您成为分布式系统的专家。&lt;/p>
&lt;p>这正是 Dapr 的优势所在。Dapr 将构建微服务应用的&lt;em>最佳实践&lt;/em>转化为开放且独立的 API，称为&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/overview/#microservice-building-blocks-for-cloud-and-edge">构建块&lt;/a>。Dapr 的构建块：&lt;/p>
&lt;ul>
&lt;li>允许您使用任意语言和框架构建可移植的应用。&lt;/li>
&lt;li>完全独立&lt;/li>
&lt;li>在应用中使用的数量没有限制&lt;/li>
&lt;/ul>
&lt;p>通过 Dapr，您可以逐步将现有应用迁移到微服务架构，采用云原生模式，如扩展/缩减、弹性和独立部署。&lt;/p>
&lt;p>Dapr 是平台无关的，这意味着您可以在以下环境中运行您的应用：&lt;/p>
&lt;ul>
&lt;li>本地&lt;/li>
&lt;li>任何 Kubernetes 集群&lt;/li>
&lt;li>虚拟或物理机器&lt;/li>
&lt;li>Dapr 集成的其他托管环境&lt;/li>
&lt;/ul>
&lt;p>这使您能够构建可以在云和边缘运行的微服务应用。&lt;/p>
&lt;h2 id="云和边缘的微服务构建块">云和边缘的微服务构建块&lt;/h2>
&lt;img src="https://v1-18.docs.dapr.io/images/building_blocks.png" width=1200 style="padding-bottom:15px;">
&lt;p>Dapr 提供分布式系统构建块，使您能够以标准方式构建微服务应用并部署到任何环境。&lt;/p>
&lt;p>每个构建块 API 都是独立的，这意味着您可以在应用中使用任意数量的它们。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>构建块&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/">&lt;strong>服务间调用&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>提供弹性的服务间调用功能，无论远程服务位于何处，都可以进行方法调用，包括重试。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-overview/">&lt;strong>发布和订阅&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>在服务之间发布事件和订阅主题，简化事件驱动架构的水平扩展并增强其故障弹性。Dapr 提供至少一次消息传递保证、消息 TTL、消费者组和其他高级功能。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/workflow/workflow-overview/">&lt;strong>工作流&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>工作流 API 可以与其他 Dapr 构建块结合使用，定义跨多个微服务的长时间运行、持久化的流程或数据流，使用 Dapr 工作流或工作流组件。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/state-management/state-management-overview/">&lt;strong>状态管理&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>通过状态管理存储和查询键/值对，您可以轻松地在应用中编写长时间运行、高可用的有状态服务和无状态服务。状态存储是可插拔的，示例包括 AWS DynamoDB、Azure Cosmos DB、Azure SQL Server、GCP Firebase、PostgreSQL 或 Redis 等。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/bindings/bindings-overview/">&lt;strong>资源绑定&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>资源绑定与触发器在事件驱动架构上进一步构建，以通过接收和发送事件到任何外部源（如数据库、队列、文件系统等）来实现扩展和弹性。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/actors-overview/">&lt;strong>Actors&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>一种用于有状态和无状态对象的模式，使并发变得简单，具有方法和状态封装。Dapr 在其 actor 运行时中提供许多功能，包括并发、状态和生命周期管理，用于 actor 激活/停用，以及定时器和提醒以唤醒 actor。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/secrets/secrets-overview/">&lt;strong>Secrets&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>秘密管理 API 与公共云和本地秘密存储集成，以检索用于应用代码的秘密。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/configuration/configuration-api-overview/">&lt;strong>Configuration&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>配置 API 使您能够从配置存储中检索和订阅应用配置项。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview/">&lt;strong>分布式锁&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>分布式锁 API 使您的应用能够获取任何资源的锁，从而在锁被应用释放或租约超时发生之前，给予其独占访问权限。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/cryptography/cryptography-overview/">&lt;strong>Cryptography&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>加密 API 提供了一个在安全基础设施（如密钥库）之上的抽象层。它包含允许您执行加密操作的 API，如加密和解密消息，而不将密钥暴露给您的应用。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/jobs/jobs-overview/">&lt;strong>Jobs&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>作业 API 使您能够在特定时间或间隔安排作业。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/conversation/conversation-overview/">&lt;strong>Conversation&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>对话 API 使您能够抽象与大型语言模型（LLM）交互的复杂性，并包括提示缓存和个人身份信息（PII）模糊化等功能。使用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/components-reference/supported-conversation/">对话组件&lt;/a>，您可以提供提示与不同的 LLM 进行对话。&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="跨领域-api">跨领域 API&lt;/h3>
&lt;p>除了其构建块，Dapr 还提供适用于您使用的所有构建块的跨领域 API。&lt;/p></description></item><item><title>构建模块</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/building-blocks-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/building-blocks-concept/</guid><description>&lt;p>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/">构建模块&lt;/a> 是一个 HTTP 或 gRPC API，可以从您的代码中调用，并使用一个或多个 Dapr 组件。Dapr 由一组 API 构建模块组成，并且可以扩展以添加新的构建模块。Dapr 的构建模块：&lt;/p>
&lt;ul>
&lt;li>解决构建弹性微服务应用程序中的常见挑战&lt;/li>
&lt;li>编码最佳实践和模式&lt;/li>
&lt;/ul>
&lt;p>下图展示了构建模块如何通过公共 API 暴露，并从您的代码中调用，使用组件来实现其功能。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/concepts-building-blocks.png" width=250>
&lt;p>Dapr 提供以下构建模块：&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/building_blocks.png" width=1200>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>构建模块&lt;/th>
 &lt;th>端点&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/">&lt;strong>服务间调用&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/invoke&lt;/code>&lt;/td>
 &lt;td>服务调用使应用程序能够通过 HTTP 或 gRPC 消息形式的已知端点相互通信。Dapr 提供一个端点，结合内置服务发现的反向代理，同时利用分布式追踪和错误处理。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-overview/">&lt;strong>发布和订阅&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/publish&lt;/code> &lt;code>/v1.0/subscribe&lt;/code>&lt;/td>
 &lt;td>发布/订阅是一种松耦合的消息传递模式，发送者（或发布者）将消息发布到主题，订阅者订阅该主题。Dapr 支持应用程序之间的发布/订阅模式。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/workflow/workflow-overview/">&lt;strong>工作流&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/workflow&lt;/code>&lt;/td>
 &lt;td>工作流 API 允许您定义长时间运行的、持久的流程或数据流，这些流程或数据流跨越多个微服务，使用 Dapr 工作流或工作流组件。工作流 API 可以与其他 Dapr API 构建模块结合使用。例如，工作流可以通过服务调用调用另一个服务或检索 secret，提供灵活性和可移植性。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/state-management/state-management-overview/">&lt;strong>状态管理&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/state&lt;/code>&lt;/td>
 &lt;td>应用程序状态是应用程序希望在单个会话之外保留的任何内容。Dapr 提供基于键/值的状态和查询 API，具有可插拔的状态存储以实现持久性。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/bindings/bindings-overview/">&lt;strong>绑定&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/bindings&lt;/code>&lt;/td>
 &lt;td>绑定提供与外部云/本地服务或系统的双向连接。Dapr 允许您通过 Dapr 绑定 API 调用外部服务，并允许您的应用程序被连接服务发送的事件触发。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/actors-overview/">&lt;strong>Actors&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/actors&lt;/code>&lt;/td>
 &lt;td>actor 是一个隔离的、独立的计算和状态单元，具有单线程执行。Dapr 提供基于虚拟 actor 模式的 actor 实现，提供单线程编程模型，并且当不使用时，actor 会被垃圾回收。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/secrets/secrets-overview/">&lt;strong>Secrets&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/secrets&lt;/code>&lt;/td>
 &lt;td>Dapr 提供一个 secret 构建模块 API，并与 secret 存储集成，如公共云存储、本地存储和 Kubernetes 来存储 secret。服务可以调用 secret API 来检索 secret，例如获取数据库的连接字符串。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/configuration/configuration-api-overview/">&lt;strong>配置&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0/configuration&lt;/code>&lt;/td>
 &lt;td>配置 API 使您能够检索和订阅支持的配置存储的应用程序配置项。这使应用程序能够在启动时或在存储中进行配置更改时检索特定的配置信息。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview/">&lt;strong>分布式锁&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0-alpha1/lock&lt;/code>&lt;/td>
 &lt;td>分布式锁 API 使您能够对资源进行锁定，以便应用程序的多个实例可以在不发生冲突的情况下访问资源，并提供一致性保证。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/cryptography/cryptography-overview/">&lt;strong>加密&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0-alpha1/crypto&lt;/code>&lt;/td>
 &lt;td>加密 API 使您能够执行加密操作，例如加密和解密消息，而不将密钥暴露给您的应用程序。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/jobs/jobs-overview/">&lt;strong>作业&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0-alpha1/jobs&lt;/code>&lt;/td>
 &lt;td>作业 API 使您能够调度和编排作业。示例场景包括：&lt;ul>&lt;li>安排批处理作业在每个工作日运行&lt;/li>&lt;li>安排各种维护脚本进行清理&lt;/li>&lt;li>安排 ETL 作业在特定时间（每小时、每天）运行以获取新数据，处理它，并使用最新信息更新数据仓库。&lt;/li>&lt;/ul>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/conversation/conversation-overview/">&lt;strong>对话&lt;/strong>&lt;/a>&lt;/td>
 &lt;td>&lt;code>/v1.0-alpha1/conversation&lt;/code>&lt;/td>
 &lt;td>对话 API 使您能够提供提示与不同的大型语言模型（LLM）进行对话，并包括提示缓存和个人身份信息（PII）模糊化等功能。&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>组件</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/components-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/components-concept/</guid><description>&lt;p>Dapr 采用模块化设计，功能以组件形式提供。每个组件都有一个接口定义。所有组件都是可互换的，因此您可以用具有相同接口的另一个组件替换掉一个组件。&lt;/p>
&lt;p>您可以通过以下方式贡献实现并扩展 Dapr 的组件接口功能：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/dapr/components-contrib">components-contrib 仓库&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/components-concept/#built-in-and-pluggable-components">可插拔组件&lt;/a>。&lt;/li>
&lt;/ul>
&lt;p>一个构建块可以使用任意组合的组件。例如，&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/actors-overview/">actors&lt;/a> 和 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/state-management/state-management-overview/">state management&lt;/a> 构建块都使用 &lt;a href="https://github.com/dapr/components-contrib/tree/master/state">state 组件&lt;/a>。&lt;/p>
&lt;p>另一个例子是，&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-overview/">pub/sub&lt;/a> 构建块使用 &lt;a href="https://github.com/dapr/components-contrib/tree/master/pubsub">pub/sub 组件&lt;/a>。&lt;/p>
&lt;p>您可以使用 &lt;code>dapr components&lt;/code> CLI 命令获取当前在托管环境中可用的组件列表。&lt;/p>


&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 对于任何向应用程序返回数据的组件，建议相应地设置 Dapr sidecar 的内存容量（进程或容器）以避免潜在的内存不足崩溃。例如，在 Docker 中使用 &lt;code>--memory&lt;/code> 选项。在 Kubernetes 中，使用 &lt;code>dapr.io/sidecar-memory-limit&lt;/code> 注释。对于进程，这取决于操作系统和/或进程编排工具。

&lt;/div>

&lt;h2 id="组件规范">组件规范&lt;/h2>
&lt;p>每个组件都有一个规范（或称为 spec）。组件在设计时通过一个 YAML 文件进行配置，该文件存储在以下位置之一：&lt;/p>
&lt;ul>
&lt;li>您解决方案中的 &lt;code>components/local&lt;/code> 文件夹，或&lt;/li>
&lt;li>在调用 &lt;code>dapr init&lt;/code> 时创建的 &lt;code>.dapr&lt;/code> 文件夹中全局存储。&lt;/li>
&lt;/ul>
&lt;p>这些 YAML 文件遵循通用的 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/resource-specs/component-schema/">Dapr 组件架构&lt;/a>，但每个文件都特定于组件规范。&lt;/p>
&lt;p>重要的是要理解组件规范值，特别是规范 &lt;code>metadata&lt;/code>，在相同组件类型的不同组件之间可能会有所不同，例如在不同的 state 存储之间，并且某些设计时规范值可以在运行时通过向组件的 API 发出请求来覆盖。因此，强烈建议查看 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/components-reference/">组件的规范&lt;/a>，特别注意用于设置与组件交互的元数据的请求示例负载。&lt;/p>
&lt;p>下图显示了每种组件类型的一些组件示例
&lt;img src="https://v1-18.docs.dapr.io/images/concepts-components.png" width=1200>&lt;/p>
&lt;h2 id="内置和可插拔组件">内置和可插拔组件&lt;/h2>
&lt;p>Dapr 具有作为运行时一部分包含的内置组件。这些是由社区开发和捐赠的公共组件，并在每个版本中可用。&lt;/p>
&lt;p>Dapr 还允许用户创建自己的私有组件，称为可插拔组件。这些组件是自托管的（进程或容器），不需要用 Go 编写，存在于 Dapr 运行时之外，并能够“插入”到 Dapr 中以利用构建块 API。&lt;/p></description></item><item><title>弹性</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/resiliency-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/resiliency-concept/</guid><description>&lt;p>分布式应用程序通常由许多微服务组成，这些微服务在底层基础设施上可以扩展到数十个甚至数百个实例。随着这些分布式解决方案的规模和复杂性增加，系统故障的可能性也随之增加。服务实例可能由于硬件故障、意外的吞吐量或应用程序生命周期事件（如扩展和重启）等多种问题而失败或无响应。因此，设计和实施能够检测、缓解和响应故障的自愈解决方案至关重要。&lt;/p>
&lt;h2 id="弹性策略">弹性策略&lt;/h2>
&lt;img src="https://v1-18.docs.dapr.io/images/resiliency_diagram.png" width="1200" alt="显示应用于Dapr API的弹性的图表">
&lt;p>Dapr允许您为应用程序定义和应用容错的弹性策略。您可以为以下弹性模式设定策略：&lt;/p>
&lt;ul>
&lt;li>超时&lt;/li>
&lt;li>重试/退避&lt;/li>
&lt;li>断路器&lt;/li>
&lt;/ul>
&lt;p>这些策略可以在调用具有&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/resiliency-overview/">弹性规范&lt;/a>的组件时应用于任何Dapr API调用。&lt;/p>
&lt;h2 id="应用健康检查">应用健康检查&lt;/h2>
&lt;img src="https://v1-18.docs.dapr.io/images/observability-app-health.webp" width="800" alt="显示应用健康功能的图表。启用应用健康运行Dapr会导致Dapr定期探测应用的健康状况">
&lt;p>应用程序可能由于多种原因变得无响应，例如过于繁忙无法接受新任务、崩溃或死锁。有时这些问题可能是暂时的，也可能是持久的。&lt;/p>
&lt;p>Dapr提供了一种通过探测来检查应用程序健康状况并对状态变化做出反应的机制。当检测到应用不健康时，Dapr会停止为该应用分配新任务。&lt;/p>
&lt;p>阅读更多关于如何将&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/">应用健康检查&lt;/a>应用于您的应用程序。&lt;/p>
&lt;h2 id="sidecar健康检查">Sidecar健康检查&lt;/h2>
&lt;img src="https://v1-18.docs.dapr.io/images/sidecar-health.png" width="800" alt="显示应用健康功能的图表。启用应用健康运行Dapr会导致Dapr定期探测应用的健康状况">
&lt;p>Dapr提供了一种通过&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/health_api/">HTTP &lt;code>/healthz&lt;/code> 端点&lt;/a>来确定其健康状况的方法。通过此端点，&lt;em>daprd&lt;/em>进程或sidecar可以：&lt;/p>
&lt;ul>
&lt;li>检查其健康状况&lt;/li>
&lt;li>确定其准备就绪状态和存活状态&lt;/li>
&lt;/ul>
&lt;p>阅读更多关于如何将&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/sidecar-health/">dapr健康检查&lt;/a>应用于您的应用程序。&lt;/p>
&lt;h2 id="下一步">下一步&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/resiliency-overview/">了解更多关于弹性&lt;/a>&lt;/li>
&lt;li>尝试其中一个弹性快速入门：
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart/">弹性：服务到服务&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/quickstarts/resiliency/resiliency-state-quickstart/">弹性：状态管理&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>应用和控制平面配置</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/configuration-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/configuration-concept/</guid><description>&lt;p>通过 Dapr 配置，您可以通过设置和策略来更改：&lt;/p>
&lt;ul>
&lt;li>单个 Dapr 应用程序的行为&lt;/li>
&lt;li>Dapr 控制平面系统服务的全局行为&lt;/li>
&lt;/ul>
&lt;p>例如，您可以在应用程序的 sidecar 配置中设置采样率策略，以指定哪些方法可以被其他应用程序调用。如果您在 Dapr 控制平面配置中设置策略，您可以调整部署到应用程序 sidecar 实例的所有证书的更新周期。&lt;/p>
&lt;p>配置以 YAML 文件的形式定义并部署。以下是一个应用程序配置示例，其中设置了一个跟踪端点，用于发送指标信息，并捕获所有的跟踪样本。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">dapr.io/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Configuration&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">daprConfig&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">tracing&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">samplingRate&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;1&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">zipkin&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">endpointAddress&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;http://localhost:9411/api/v2/spans&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上述 YAML 配置用于记录指标的跟踪。您可以通过以下方式在本地自托管模式中加载它：&lt;/p>
&lt;ul>
&lt;li>编辑 &lt;code>.dapr&lt;/code> 目录中的默认配置文件 &lt;code>config.yaml&lt;/code>，或&lt;/li>
&lt;li>使用 &lt;code>kubectl/helm&lt;/code> 将其应用到您的 Kubernetes 集群。&lt;/li>
&lt;/ul>
&lt;p>以下示例展示了在 &lt;code>dapr-system&lt;/code> 命名空间中名为 &lt;code>daprsystem&lt;/code> 的 Dapr 控制平面配置。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">dapr.io/v1alpha1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Configuration&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">daprsystem&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">dapr-system&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">mtls&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">enabled&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">workloadCertTTL&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;24h&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">allowedClockSkew&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;15m&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>默认情况下，安装 Dapr 控制平面系统服务时会有一个名为 &lt;code>daprsystem&lt;/code> 的单一配置文件。此配置文件应用全局控制平面设置，并在 Dapr 部署到 Kubernetes 时设置。&lt;/p></description></item><item><title>可观测性</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/observability-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/observability-concept/</guid><description>&lt;p>在构建应用程序时，理解系统行为是操作应用程序的重要且具有挑战性的部分，例如：&lt;/p>
&lt;ul>
&lt;li>观察应用程序的内部调用&lt;/li>
&lt;li>评估其性能&lt;/li>
&lt;li>在问题发生时立即意识到&lt;/li>
&lt;/ul>
&lt;p>对于由多个微服务组成的分布式系统来说，这尤其具有挑战性，因为一个由多个调用组成的流程可能在一个微服务中开始并在另一个微服务中继续。&lt;/p>
&lt;p>在生产环境中，应用程序的可观测性至关重要，并且在开发过程中也很有用，以便：&lt;/p>
&lt;ul>
&lt;li>理解瓶颈&lt;/li>
&lt;li>提高性能&lt;/li>
&lt;li>在微服务范围内进行基本调试&lt;/li>
&lt;/ul>
&lt;p>虽然可以从底层基础设施（如内存消耗、CPU使用率）中收集一些关于应用程序的数据点，但其他有意义的信息必须从“应用程序感知层”收集——这个层可以显示重要调用系列如何在微服务之间执行。通常，您需要添加一些代码来对应用程序进行检测，这些代码将收集的数据（如追踪和指标）发送到可观测性工具或服务，这些工具或服务可以帮助存储、可视化和分析所有这些信息。&lt;/p>
&lt;p>维护这些检测代码（它们不是应用程序核心逻辑的一部分）需要理解可观测性工具的API，使用额外的SDK等。这种检测也可能为您的应用程序带来可移植性挑战，要求根据应用程序的部署位置进行不同的检测。例如：&lt;/p>
&lt;ul>
&lt;li>不同的云提供商提供不同的可观测性工具&lt;/li>
&lt;li>本地部署可能需要自托管解决方案&lt;/li>
&lt;/ul>
&lt;h2 id="使用dapr实现应用程序的可观测性">使用Dapr实现应用程序的可观测性&lt;/h2>
&lt;p>当您利用Dapr API构建块进行服务间调用、发布/订阅消息传递和其他API时，Dapr在&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/">分布式追踪&lt;/a>方面提供了优势。由于这种服务间通信通过Dapr运行时（或“sidecar”）流动，Dapr处于一个独特的位置，可以减轻应用程序级别检测的负担。&lt;/p>
&lt;h3 id="分布式追踪">分布式追踪&lt;/h3>
&lt;p>Dapr可以使用广泛采用的&lt;a href="https://opentelemetry.io/">Open Telemetry (OTEL)&lt;/a>和&lt;a href="https://zipkin.io">Zipkin&lt;/a>协议&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/setup-tracing/">配置以发出追踪数据&lt;/a>。这使得它可以轻松集成到多个可观测性工具中。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/observability-tracing.png" width=1000 alt="使用Dapr的分布式追踪">
&lt;h3 id="自动追踪上下文生成">自动追踪上下文生成&lt;/h3>
&lt;p>Dapr使用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/">W3C追踪&lt;/a>规范作为追踪上下文的一部分，包含在Open Telemetry (OTEL)中，用于生成和传播应用程序的上下文头或传播用户提供的上下文头。这意味着您可以默认获得Dapr的追踪功能。&lt;/p>
&lt;h2 id="dapr-sidecar和控制平面的可观测性">Dapr sidecar和控制平面的可观测性&lt;/h2>
&lt;p>您还可以通过以下方式观察Dapr本身：&lt;/p>
&lt;ul>
&lt;li>生成由Dapr sidecar和Dapr控制平面服务发出的日志&lt;/li>
&lt;li>收集性能、吞吐量和延迟的指标&lt;/li>
&lt;li>使用健康端点探测来指示Dapr sidecar的健康状态&lt;/li>
&lt;/ul>
&lt;img src="https://v1-18.docs.dapr.io/images/observability-sidecar.png" width=1000 alt="Dapr sidecar的指标、日志和健康检查">
&lt;h3 id="日志记录">日志记录&lt;/h3>
&lt;p>Dapr生成&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/logging/logs/">日志&lt;/a>以：&lt;/p>
&lt;ul>
&lt;li>提供对sidecar操作的可见性&lt;/li>
&lt;li>帮助用户识别问题并进行调试&lt;/li>
&lt;/ul>
&lt;p>日志事件包含由Dapr系统服务生成的警告、错误、信息和调试消息。您还可以配置Dapr将日志发送到收集器，如&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/otel-collector/">Open Telemetry Collector&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/logging/fluentd/">Fluentd&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/logging/newrelic/">New Relic&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/metrics/azure-monitor/">Azure Monitor&lt;/a>和其他可观测性工具，以便可以搜索和分析日志以提供见解。&lt;/p>
&lt;h3 id="指标">指标&lt;/h3>
&lt;p>指标是一系列测量值和计数，随着时间的推移被收集和存储。&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/metrics/">Dapr指标&lt;/a>提供监控能力，以理解Dapr sidecar和控制平面的行为。例如，Dapr sidecar和用户应用程序之间的指标显示调用延迟、流量失败、请求错误率等。&lt;/p>
&lt;p>Dapr &lt;a href="https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics.md">控制平面指标&lt;/a>显示sidecar注入失败和控制平面服务的健康状况，包括CPU使用率、actor放置的数量等。&lt;/p>
&lt;h3 id="健康检查">健康检查&lt;/h3>
&lt;p>Dapr sidecar公开了一个HTTP端点用于&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/sidecar-health/">健康检查&lt;/a>。通过这个API，用户代码或托管环境可以探测Dapr sidecar以确定其状态并识别sidecar准备就绪的问题。&lt;/p>
&lt;p>相反，Dapr可以配置为探测&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/">您的应用程序的健康状况&lt;/a>，并对应用程序健康状况的变化做出反应，包括停止pub/sub订阅和短路服务调用。&lt;/p>
&lt;h2 id="下一步">下一步&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/">了解更多关于使用Dapr进行开发的可观测性&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/observability/tracing/">了解更多关于使用Dapr进行操作的可观测性&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>安全性</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/security-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/security-concept/</guid><description>&lt;p>安全性是Dapr的核心。本文介绍了在分布式应用中使用Dapr时的安全特性和功能。这些可以分为以下几类：&lt;/p>
&lt;ul>
&lt;li>使用service-invocation和pubsub API进行安全通信。&lt;/li>
&lt;li>通过配置应用于组件的安全策略。&lt;/li>
&lt;li>操作安全实践。&lt;/li>
&lt;li>状态安全，专注于静态数据。&lt;/li>
&lt;/ul>
&lt;p>一个示例应用程序用于说明Dapr中可用的多种安全特性。&lt;/p>
&lt;h1 id="安全通信">安全通信&lt;/h1>
&lt;p>Dapr通过service-invocation API提供端到端的安全性，支持应用程序身份验证并设置访问策略。下图展示了这一点。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/security-end-to-end-communication.png" width=1000>
&lt;h2 id="service-invocation范围访问策略">service-invocation范围访问策略&lt;/h2>
&lt;p>Dapr应用程序可以被限定在命名空间中进行部署和安全管理。您可以在不同命名空间的服务之间进行调用。阅读&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-namespaces/">跨命名空间的service-invocation&lt;/a>以获取更多信息。&lt;/p>
&lt;p>Dapr应用程序可以限制哪些操作可以被调用，包括哪些应用程序被允许（或拒绝）调用它。阅读&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/configuration/invoke-allowlist/">如何：为service-invocation应用访问控制列表配置&lt;/a>以获取更多信息。&lt;/p>
&lt;h2 id="pubsub主题范围访问策略">pubsub主题范围访问策略&lt;/h2>
&lt;p>对于pubsub组件，您可以限制哪些主题类型和应用程序被允许发布和订阅特定主题。阅读&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-scopes/">范围pubsub主题访问&lt;/a>以获取更多信息。&lt;/p>
&lt;h2 id="使用mtls加密数据">使用mTLS加密数据&lt;/h2>
&lt;p>Dapr使用的一种加密传输中数据的安全机制是&lt;a href="https://en.wikipedia.org/wiki/Mutual_authentication">双向认证TLS&lt;/a>或mTLS。mTLS为应用程序内部的网络流量提供了一些关键特性：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>双向认证&lt;/strong>，客户端和服务器相互验证身份。&lt;/li>
&lt;li>&lt;strong>加密通道&lt;/strong>，用于所有在途通信，在建立双向认证后。&lt;/li>
&lt;/ul>
&lt;p>mTLS在几乎所有场景中都很有用，尤其是对于需要遵循法规的系统，如&lt;a href="https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act">HIPAA&lt;/a>和&lt;a href="https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard">PCI&lt;/a>。&lt;/p>
&lt;h2 id="dapr之间的安全通信">Dapr之间的安全通信&lt;/h2>
&lt;p>在生产系统中，Dapr无需额外代码或复杂配置即可启用mTLS。此外，Dapr sidecar默认只允许&lt;code>localhost&lt;/code>访问，阻止其他IP地址，除非明确配置。&lt;/p>
&lt;p>Dapr包含一个“默认开启”的自动mTLS，为Dapr sidecar之间的流量提供在途加密。为实现这一点，Dapr利用一个名为&lt;code>Sentry&lt;/code>的系统服务，该服务充当证书颁发机构（CA）/身份提供者，并签署来自Dapr sidecar的工作负载（应用程序）证书请求。&lt;/p>
&lt;p>默认情况下，工作负载证书有效期为24小时，时钟偏差设置为15分钟。&lt;/p>
&lt;p>除非您提供了现有的根证书，否则Sentry服务会自动创建并持久化有效期为一年的自签名根证书。Dapr管理工作负载证书的轮换；如果您自带证书，Dapr会在不影响应用程序正常运行的情况下进行。&lt;/p>
&lt;p>当根证书被替换时（Kubernetes模式下为secret，自托管模式下为文件系统），Sentry会获取它们并重建信任链，无需重启且对Sentry无停机时间。&lt;/p>
&lt;p>当一个新的Dapr sidecar初始化时，它会检查是否启用了mTLS。如果是，则生成一个ECDSA私钥和证书签名请求，并通过gRPC接口发送给Sentry。Dapr sidecar和Sentry之间的通信使用信任链证书进行认证，该证书由Dapr Sidecar Injector系统服务注入到每个Dapr实例中。&lt;/p>
&lt;h3 id="配置mtls">配置mTLS&lt;/h3>
&lt;p>可以通过编辑Dapr部署的默认配置中的&lt;code>spec.mtls.enabled&lt;/code>字段来开启/关闭mTLS。&lt;/p>
&lt;p>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/security/mtls/">您可以在Kubernetes和自托管模式下进行此操作&lt;/a>。&lt;/p>
&lt;h4 id="自托管模式下的mtls">自托管模式下的mTLS&lt;/h4>
&lt;p>下图显示了Sentry系统服务如何根据操作员提供的或由Sentry服务生成并存储在文件中的根/颁发者证书为应用程序颁发证书。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/security-mTLS-sentry-selfhosted.png" width=1000>
&lt;h4 id="kubernetes模式下的mtls">Kubernetes模式下的mTLS&lt;/h4>
&lt;p>在Kubernetes集群中，保存根证书的secret是：&lt;/p>
&lt;ul>
&lt;li>限定在部署Dapr组件的命名空间中。&lt;/li>
&lt;li>仅由Dapr控制平面系统pod访问。&lt;/li>
&lt;/ul>
&lt;p>Dapr在Kubernetes上部署时还支持强身份验证，依赖于作为证书签名请求（CSR）一部分发送给Sentry的pod的服务账户令牌。&lt;/p>
&lt;p>下图显示了Sentry系统服务如何根据操作员提供的或由Sentry服务生成并存储为Kubernetes secret的根/颁发者证书为应用程序颁发证书。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/security-mTLS-sentry-kubernetes.png" width=1000>
&lt;h3 id="防止dapr被ip地址访问">防止Dapr被IP地址访问&lt;/h3>
&lt;p>为了防止Dapr sidecar在任何IP地址上被调用（尤其是在Kubernetes等生产环境中），Dapr将其监听IP地址限制为&lt;code>localhost&lt;/code>。如果您需要启用外部地址的访问，请使用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/arguments-annotations-overview/">dapr-listen-addresses&lt;/a>设置。&lt;/p>
&lt;h2 id="安全的dapr到应用程序通信">安全的Dapr到应用程序通信&lt;/h2>
&lt;p>Dapr sidecar通过&lt;code>localhost&lt;/code>运行在应用程序附近，建议在与应用程序相同的网络边界内运行。虽然许多现代云原生系统将pod级别（例如在Kubernetes上）视为可信的安全边界，但Dapr通过令牌为应用程序提供API级别的身份验证。此功能保证，即使在&lt;code>localhost&lt;/code>上：&lt;/p>
&lt;ul>
&lt;li>只有经过身份验证的应用程序可以调用Dapr&lt;/li>
&lt;li>应用程序可以检查Dapr是否在回调它&lt;/li>
&lt;/ul>
&lt;p>有关配置API令牌安全性的更多详细信息，请阅读：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/security/api-token/">使用API令牌对来自应用程序到Dapr的请求进行身份验证&lt;/a>。&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/security/app-api-token/">使用API令牌对来自Dapr到应用程序的请求进行身份验证&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="安全的dapr到控制平面通信">安全的Dapr到控制平面通信&lt;/h2>
&lt;p>除了Dapr sidecar之间的自动mTLS，Dapr还提供以下之间的强制mTLS：&lt;/p>
&lt;ul>
&lt;li>Dapr sidecar&lt;/li>
&lt;li>Dapr控制平面系统服务，即：
&lt;ul>
&lt;li>Sentry服务（证书颁发机构）&lt;/li>
&lt;li>Placement服务（actor放置）&lt;/li>
&lt;li>Kubernetes Operator服务&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>当启用mTLS时，Sentry将根和颁发者证书写入限定在安装控制平面的命名空间的Kubernetes secret中。在自托管模式下，Sentry将证书写入可配置的文件系统路径。&lt;/p></description></item><item><title>隔离</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/isolation-concept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/isolation-concept/</guid><description>&lt;p>Dapr 的命名空间功能提供了隔离和多租户支持，增强了安全性。通常，应用程序和组件会被部署到命名空间中，以便在特定环境中实现隔离，例如在 Kubernetes 中。&lt;/p>
&lt;p>Dapr 支持在以下场景中使用命名空间：应用程序之间的服务调用、访问组件、在消费者组中发送 pubsub 消息以及 actor 类型的部署。无论是在自托管模式还是 Kubernetes 模式下，命名空间隔离都受到支持。&lt;/p>
&lt;p>要开始使用，请先创建并配置您的命名空间。&lt;/p>






&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="自托管" aria-controls="tabs-00-00" aria-selected="true">
 自托管
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="kubernetes" aria-controls="tabs-00-01" aria-selected="false">
 Kubernetes
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-0-content">
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
 &lt;p>在自托管模式下，通过设置 &lt;code>NAMESPACE&lt;/code> 环境变量为 Dapr 实例指定命名空间。&lt;/p>

 &lt;/div>
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
 &lt;p>在 Kubernetes 上，创建并配置命名空间：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl create namespace namespaceA
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>kubectl config set-context --current --namespace&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>namespaceA
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后将您的应用程序部署到此命名空间中。&lt;/p>

 &lt;/div>
&lt;/div>

&lt;p>了解如何在 Dapr 中全面使用命名空间：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-namespaces/">服务调用命名空间&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/howto-namespace/">如何设置 pubsub 命名空间消费者组&lt;/a>&lt;/li>
&lt;li>组件：
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/components/setup-pubsub/pubsub-namespaces/">如何配置具有多个命名空间的 pubsub 组件&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/components/component-scopes/">将组件限定到一个或多个应用程序&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/namespaced-actors/">命名空间的 actor&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Dapr术语和定义</title><link>https://v1-18.docs.dapr.io/zh-hans/concepts/terminology/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/concepts/terminology/</guid><description>&lt;p>本页面详细介绍了您可能在Dapr文档中遇到的所有常见术语。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">术语&lt;/th>
 &lt;th>定义&lt;/th>
 &lt;th>更多信息&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">应用程序&lt;/td>
 &lt;td>一个正在运行的服务或程序，通常是由用户创建和运行的。&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">构件&lt;/td>
 &lt;td>Dapr为用户提供的API，帮助创建微服务和应用程序。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/building-blocks-concept/">Dapr构件&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">组件&lt;/td>
 &lt;td>模块化的功能单元，可以单独使用或与其他组件结合使用，由Dapr构件调用。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/components-concept/">Dapr组件&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">配置&lt;/td>
 &lt;td>一个YAML文件，用于声明所有Dapr边车或Dapr控制平面的设置。在这里，您可以配置控制平面的mTLS设置，或应用程序实例的跟踪和中间件设置。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/configuration-concept/">Dapr配置&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Dapr&lt;/td>
 &lt;td>分布式应用运行时。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/overview/">Dapr概述&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Dapr控制平面&lt;/td>
 &lt;td>一组服务，是在托管平台（如Kubernetes集群）上安装Dapr的一部分。这使得启用Dapr的应用程序可以在平台上运行，并处理Dapr功能，如actor放置、Dapr边车注入或证书签发/轮换。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/self-hosted/self-hosted-overview/">自托管概述&lt;/a>&lt;br />&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-overview/">Kubernetes概述&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">HTTPEndpoint&lt;/td>
 &lt;td>HTTPEndpoint是一个Dapr资源，用于识别通过服务调用API访问的非Dapr端点。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/service_invocation_api/">服务调用API&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">命名空间&lt;/td>
 &lt;td>Dapr中的命名空间提供隔离功能，从而支持多租户。&lt;/td>
 &lt;td>了解更多关于命名空间的&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/components/component-scopes/">组件&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-namespaces/">服务调用&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/components/setup-pubsub/pubsub-namespaces/">发布/订阅&lt;/a>和&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/namespaced-actors/">actors&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">自主管理&lt;/td>
 &lt;td>在Windows/macOS/Linux机器上运行应用程序的能力，使用Dapr。Dapr提供在“自主管理”模式下运行的能力。&lt;/td>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/self-hosted/self-hosted-overview/">自主管理模式&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">服务&lt;/td>
 &lt;td>一个正在运行的应用程序或程序。这可以指您的应用程序或Dapr应用程序。&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">sidecar&lt;/td>
 &lt;td>一个与您的应用程序一起运行的程序，作为一个单独的进程或容器。&lt;/td>
 &lt;td>&lt;a href="https://docs.microsoft.com/azure/architecture/patterns/sidecar">边车模式&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item></channel></rss>