背景

Dapr 是一个开源的分布式应用运行时,帮助开发者构建松耦合的分布式应用程序,具有良好的可扩展性和可维护性。Rainbond 是一款企业级的云原生应用管理平台,提供了丰富的功能和工具,方便开发者管理和部署应用。Rainbond 和 Dapr 结合可以提供以下价值点:

  1. 为Dapr扩展云原生支持:Rainbond 提供了一套完整的云原生应用支持方案,包括应用开发、应用编排、应用交付、应用运维等应用全生命周期管理能力,而 Dapr 只是应用开发框架,包括应用开发模型、服务发现、事件驱动等功能。将 Rainbond 和 Dapr 结合起来可以提供更完整的云原生应用支持,帮助开发人员更快地构建和部署应用。
  2. 让Dapr应用可移植性增强:Rainbond提供应用模版能力,Dapr开发的应用以模版的方式打包,可以方便交付和迁移到其他平台运行。
  3. 为Rainbond扩充服务治理能力:Rainbond 支持通过插件扩展服务治理能力,和 Dapr结合,可以通过Dapr的方式实现服务治理。将二者结合起来,可以提供更完整的服务治理功能,帮助开发人员更好地管理和控制应用中的服务。
  4. 为Rainbond增加BaaS能力:在Rainbond上开发软件,需要自己安装后端数据库和中间件,而Dapr将后端能力以API的方式对外提供,开发者只需要通过API统一访问后端能力,实现了BaaS体验。

总之,Dapr和Rainbond能互相补充能力不足,Rainbond 解决了应用生命周期管理的问题,开发者不需要懂底层技术,但还是需要了解后端服务, Dapr 补足了这块能力,让开发者更加专注业务。

Rainbond和Dapr的整合思路

在 Dapr 微服务框架的业务体系中,Daprd 是整个业务的核心,应用程序通过运行时 API 发送请求给 Daprd,Daprd 负责处理这些请求,并与底层服务进行交互。Daprd 是由 Dapr Services 中的 dapr-sidecar-injector 服务进行注入的,当 Pod 满足注入条件后进行注入。同时 Dapr Services 中的 dapr-operator 会监听整个集群下的 Dapr 配置资源(CRD),当捕获到有 Dapr 配置类资源的创建后,会记录在内存中,再次注入的 Daprd 如果 Pod 声明了使用该配置,则会提供对应的能力。

  • Dapr Service 的安装:Rainbond 将 Dapr Services 资源进行了整合,作为一个插件应用上架到了应用商店,通过安装便可以快速让我们的集群具备 dapr 微服务架构能力,避免了集群中执行 dapr init -k命令,同时解决了国外镜像拉取的问题。
  • DaprD注入:传统注入方式我们需要手动添加注入条件字段,费时费力且不易维护还容易出错;Rainbond 支持通过切换应用的治理模式的方式,为我们的 Pod 添加不同属性字段以满足不同微服务架构的注入条件,从而达到批量注入,快速使用、便于管理的效果。
  • Dapr配置:Dapr 提供了四种配置 Daprd 的资源来扩展我们的服务治理能力,分别为Configuration、Component、Resiliency、Subscription,我们需要通过编写 Yaml 的形式在集群中创建这些资源供业务组件使用,Rainbond 平台在应用的 k8s 资源的管理入口,其效果与kubectl有些类似但比kubectl更易于管理。其中 Configuration 资源用于存储应用程序的配置信息,例如连接字符串、密钥、证书等,需要为 Pod 配置的 annotations属性去声明才可使用,Rainbond 的组件视图提供对annotations属性配置,简化了我们配置的流程。
  • Dapr Component安装和对接:Rainbond 的应用商店已经有很多后端实现,如 MySQL、Redis等,在Rainbond里可以一键安装便可使用。在Dapr应用的K8s资源管理里配置Component的yaml,绑定后端服务的地址。
  • **Dapr应用开发:**Dapr开发的应用可以用源码、镜像、yaml部署到Rainbond平台上,然后根据Dapr的API规范访问后端服务,Rainbond提供对Dapr应用的持续集成、持续交付、环境管理、配置管理、日志和性能监控、访问网关、应用运维等能力,辅助Dapr应用的开发和管理。

部署和使用流程

基于 Rainbond 使用 Dpar 的目标:

  • 一键部署 Dapr Service,让集群具备 Dapr 微服务架构能力。
  • 自动为业务组件注入 Daprd。
  • 可视化管理 Dapr 配置。
  • 简化 Daprd 属性参数配置流程。
  • 多种方式交付你的 Dapr 业务。

下面我通过部署一个发布订阅的示例,供大家快速了解并掌握 Dapr 在 Rainbond 中是如何使用的

前提条件

  1. Rainbond 版本大于 v5.13。
  2. Rainbond 已经对接过开源应用商店并拥有推送权限。

实践步骤

1. 安装 Rainbond Service Mesh 插件

Rainbond ServiceMesh 插件负责按照指定治理模式对应用组件进行加工调整,以满足微服务治理插件注入的基本条件。通过在平台管理->应⽤市场->开源应⽤商店->搜索 Rainbond-ServiceMesh 并进行安装

2. 安装Dapr 应用插件

创建一个以 dapr-system 为英文名的团队,安装 Dapr Services 。通过在平台管理->应⽤市场->开源应⽤商店->搜索 Rainbond-Dapr 并进行安装

3. 绑定 Component

Dapr 支持对接多种 Component 实现,如 Redis、Mysql、Oauth等,在 Rainbond 平台中安装也非常简单,大部分实现都可以在 Rainbond 应用商店中找到,少数不支持的存储也欢迎大家参与应用制作发布到应用商店中来。本次示例我们需要安装的是 Redis 通过在平台管理->应⽤市场->开源应⽤商店->搜索 Redis 并进行安装。安装完成后,在应用视图->k8s资源->编写 Component 资源进行绑定。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: pubsub
spec:type: pubsub.redisversion: v1metadata:- 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: <NAME>
spec:type: state.mysqlversion: v1metadata:- name: connectionStringvalue: "<CONNECTION STRING>"- name: schemaNamevalue: "<SCHEMA NAME>"- name: tableNamevalue: "<TABLE NAME>"- name: pemPathvalue: "<PEM PATH>"

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-subscriberpubsub-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: daprConfignamespace: 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.ratelimitversion: v1metadata:- name: maxRequestsPerSecondvalue: 10

应用视图->k8s资源->编写 Configuration 配置资源绑定中间件。

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:name: appconfig
spec:httpPipeline:handlers:- name: ratelimittype: middleware.http.ratelimit

组件视图->其他设置->Kubernetes属性->新增属性->选择annotations->添加 dapr.io/config 属性字段绑定 Configuration 。

Dapr和Rainbond集成,实现云原生BaaS和模块化微服务开发相关推荐

  1. 腾讯开源业界首个云原生标准的一站式微服务管理框架Femas

    作者 | Femas开源技术团队 责编 | 梦依丹 企业数字化向云原生演进过程面临诸多痛点,微服务框架不统一.协议多样化.语言异构,纷繁复杂的微服务技术栈,基础组件之间像一座座孤岛,各个基础组件的控制 ...

  2. 一键部署dns服务_OpenShift : 通往云原生、DevOps、微服务和Serverless的大门

    新书速递 查尔斯·狄更斯的<双城记>中有句耳熟能详的名言:"这是一个最好的时代,也是一个最坏的时代."作为技术从业者,在这个数字化浪潮和技术变革接连发生的时代,我对这句 ...

  3. 云原生架构下的微服务选型和演进

    作者:彦林 本文整理自阿里云智能高级技术专家彦林的线上直播分享<云原生微服务最佳实践>.视频回放地址:https://yqh.aliyun.com/live/detail/28454 随着 ...

  4. 云原生架构重要组成部分之微服务

    前言 近几年来,云计算与微服务架构非常火,运用广泛.各大厂商公司都运用了该技术架构,随着技术与理念的升级迭代,云原生概念应世而起,现在火的一塌糊涂.做为新时代的程序员,我们要抓住云原生的浪潮. 这篇文 ...

  5. 【云原生】docker+k8微服务容器化实战

    博主昵称:跳楼梯企鹅 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各 ...

  6. 云原生除了K8S、微服务,还有...?

    来源 | 无敌码农 责编 | 寇雪芹 头图 | 下载于视觉中国 云原生(Cloud Native)是最近技术圈一个比较火的名词,相信大家或多或少都听说过.不过对于大多数普通研发朋友来说,"云 ...

  7. 云原生时代下,微服务体系与 Serverless 架构的发展、治理与融合

    微服务和 Serverless 正在成为一对最佳拍档. 云计算时代,容器和 K8s 的出现让微服务架构开始发挥更大的效能,如今云应用正朝着无服务器(Serverless)的方向发展,Serverles ...

  8. Spring Cloud与微服务学习总结(13)——云原生趋势下,微服务的拆分粒度如何把握?

    前言 微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会.在做微服务的路 ...

  9. 秒云获得阿里云首批产品生态集成认证,携手阿里云共建云原生智能运维生态服务

    近日,成都元来云志科技有限公司(以下简称"秒云")的云原生智能运维中台产品与阿里云计算有限公司(以下简称"阿里云")的阿里云容器服务 ACK 经过严格测试程序, ...

最新文章

  1. C++开源代码项目汇总
  2. 454. 4Sum II
  3. IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐(自用,真的超级牛逼)
  4. [我的1024开源程序]100元写的单词本说明书
  5. 定义并调用函数输出 fibonacci 序列_科学网—Zmn-0351 薛问天:再谈数学概念的定义,评新华先生《0345》...
  6. 在浏览器中运行java applet
  7. 美团取消支付宝支付引关注,称饿了么也不支持微信支付,饿了么回应绝了
  8. 【转】 Pro Android学习笔记(九一):了解Handler(5):组件生命
  9. 学计算机专业选择设计为类需要艺考,想学设计必须参加艺考吗?设计学类专业,新高考选科怎么选?...
  10. 拉普拉斯变换的matlab仿真,拉普拉斯变换及Simulink仿真.doc
  11. 游戏网页制作 仿英雄联盟网页设计作业 HTML CSS游戏官网网页模板 大学生游戏介绍网站毕业设计 DW游戏主题网页模板下载 游戏娱乐网页成品代码 英雄联盟网页作品下载
  12. 使用图片验证码进行登录验证
  13. 什么是性能测试,性能测试的目的
  14. 《程序员之禅》一一1.1 我如何学习打坐
  15. 如何批量发送邮件?小白问百度,大神秀操作,网友惊呼:666
  16. 用户登录页面以及后台方法、拦截器
  17. redis缓存与数据库一致性问题解决
  18. 全网最全斗音短视频新老账号起号技巧
  19. 信息熵——与一枚硬币的故事
  20. 你的饿了么订单又超时啦!

热门文章

  1. 科软-实习招聘-笔试面试感悟(2019.03.24~2019.05.12)
  2. jar hell问题以及解决方案
  3. python中 什么意思_python中rc1什么意思
  4. 《Oracle编程自学与面试指南》17-03:多列子查询
  5. vue + router 权限管理 不同角色显示不同路由
  6. 微信私域流量池运营:您是否错失了将粉丝转变为客户的机会?电商宝提供一站式客户运营转化服务!...
  7. 记录一些博客写作心得
  8. AutoCAD Electrical 2022—元件的绘制
  9. 有哪些因素会导致香港服务器出现网络波动?
  10. 神经网络训练不稳定问题(loss和accuracy波动大)的一种原因及解决方案