Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Dapr 结合可以提供以下价值点:
总之,Dapr和Rainbond能互相补充能力不足,Rainbond 解决了应用生命周期管理的问题,开发者不需要懂底层技术,但还是需要了解后端服务, Dapr 补足了这块能力,让开发者更加专注业务。
在 Dapr 微服务框架的业务体系中,Daprd 是整个业务的核心,应用程序通过运行时 API 发送请求给 Daprd,Daprd 负责处理这些请求,并与底层服务进行交互。Daprd 是由 Dapr Services 中的 dapr-sidecar-injector 服务进行注入的,当 Pod 满足注入条件后进行注入。同时 Dapr Services 中的 dapr-operator 会监听整个集群下的 Dapr 配置资源(CRD),当捕获到有 Dapr 配置类资源的创建后,会记录在内存中,再次注入的 Daprd 如果 Pod 声明了使用该配置,则会提供对应的能力。
dapr init -k
命令,同时解决了国外镜像拉取的问题。kubectl
有些类似但比kubectl
更易于管理。其中 Configuration 资源用于存储应用程序的配置信息,例如连接字符串、密钥、证书等,需要为 Pod 配置的 annotations
属性去声明才可使用,Rainbond 的组件视图提供对annotations
属性配置,简化了我们配置的流程。基于 Rainbond 使用 Dpar 的目标:
下面我通过部署一个发布订阅的示例,供大家快速了解并掌握 Dapr 在 Rainbond 中是如何使用的
Rainbond ServiceMesh 插件负责按照指定治理模式对应用组件进行加工调整,以满足微服务治理插件注入的基本条件。通过在平台管理->应⽤市场->开源应⽤商店->搜索 Rainbond-ServiceMesh 并进行安装
创建一个以 dapr-system 为英文名的团队,安装 Dapr Services 。通过在平台管理->应⽤市场->开源应⽤商店->搜索 Rainbond-Dapr 并进行安装
。
Dapr 支持对接多种 Component 实现,如 Redis、Mysql、Oauth等,在 Rainbond 平台中安装也非常简单,大部分实现都可以在 Rainbond 应用商店中找到,少数不支持的存储也欢迎大家参与应用制作发布到应用商店中来。本次示例我们需要安装的是 Redis 通过在平台管理->应⽤市场->开源应⽤商店->搜索 Redis 并进行安装
。安装完成后,在应用视图->k8s资源->编写 Component 资源
进行绑定。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
spec:
type: pubsub.redis
version: v1
metadata:
- name: "redisHost"
value: "YOUR_REDIS_HOST_HERE"
- name: "redisPassword"
value: "YOUR_REDIS_PASSWORD_HERE"
如果是 MySQL ,步骤是平台管理->应⽤市场->开源应⽤商店->搜索 MySQL 并进行安装
,安装完成后在 应用视图->k8s资源->编写 Component 资源
进行绑定。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name:
spec:
type: state.mysql
version: v1
metadata:
- name: connectionString
value: ""
- name: schemaName
value: ""
- name: tableName
value: ""
- name: pemPath
value: ""
4. 切换应用治理模式
将业务应用的治理模式切换至 Dapr 。通过在 应用视图->治理模式->选择 Dapr 治理模式进行切换
。其中 dapr 治理模式会为我们组件的 annotations
属性添加字段dapr.io/enabled: "true"
以及dapr.io/app-id="xxx"
其中 xxx 为组件的英文名,由于dapr.io/app-id
是Dapr 体系中的唯一标识,Rainbond 支持自行配置,如果检测到有该属性字段,则优先使用原配置。满足注入条件后,dapr-sidecar-injector 服务开始工作,为我们的业务组件注入 Daprd。
5. 部署业务
Rainbond 提供了多种方式部署你的业务,镜像、Helm、Yaml、源码等等。这里我选择使用镜像部署,具体步骤为: 应用视图->添加组件->指定镜像->填写镜像地址
。
demo镜像地址:
registry.cn-hangzhou.aliyuncs.com/zhangqihang/pubsub-node-subscriber:latest
registry.cn-hangzhou.aliyuncs.com/zhangqihang/pubsub-react-form:latest
registry.cn-hangzhou.aliyuncs.com/zhangqihang/pubsub-go-subscriber:latest
由于 Dapr 中消息队列需要为组件 annotations
属性设置 dapr.io/app-port
字段,切换治理模式的时候并没有自动生成,所以我们需要在组件视图->其他设置->Kubernetes属性->新增属性->选择 annotations->添加 dapr.io/app-port=组件端口字段
。同理其他扩展的 annotations
属性字段均在此处配置。
6. 部署最终效果
在pubsub-react-form 组件的组件视图->端口->打开对外服务
便可实现访问消息发布组件,向订阅 A、B、C中发布消息,通过观察pubsub-node-subscriber
和pubsub-go-subscriber
组件的日志可看到订阅的内容,日志位置:组件视图->日志
。
7. 通过Dapr控制台管理
访问 dapr dashboard 可以查看到我们的微服务组件在 Dapr 中的注册信息。
8.发布应用模版
Rainbond提供应用一键发布应用模版的能力,在Dapr开发应用的应用视图,点击发布
来发布应用模版,并通过应用模版在线和离线快速安装到其他环境。不过在其他环境使用时需要先安装Rainbond和Dapr基础环境。
在Rainbond上扩展Dapr
链路追踪
链路追踪是一种网络监控和故障排除技术,用于追踪数据包在网络中的路径和经过的节点,以便优化网络性能和发现问题,在 Dapr 中是通过配置Configuration资源
绑定追踪器实现进行工作的。下面是以 Zipkin 追踪器实现的Configuration
资源配置示例。更多详见 Dapr Observability。
在应用视图->k8s资源->编写 Configuration 资源
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://localhost:9411/api/v2/spans"
熔断限流
限制每秒允许的最大 HTTP 请求数,速率限制可以保护您的应用程序免受拒绝服务 (DOS) 攻击。我们需要配置component
资源作为中间件,然后通过Configuration 资源
进行绑定,然后在业务组件中配置挂载使用。
在应用视图->k8s资源->编写 Component 资源
作为中间件,设置每秒的最大请求数为 10。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: ratelimit
spec:
type: middleware.http.ratelimit
version: v1
metadata:
- name: maxRequestsPerSecond
value: 10
在应用视图->k8s资源->编写 Configuration 配置资源
绑定中间件。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
httpPipeline:
handlers:
- name: ratelimit
type: middleware.http.ratelimit
在组件视图->其他设置->Kubernetes属性->新增属性->选择annotations->添加 dapr.io/config 属性字段
绑定 Configuration 。