使用Rainbond打包业务模块,实现业务积木式拼装

简介: 每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计模式到微服务架构,近几年大家觉得微服务架构是模块化的银弹,都朝微服务架构改造,但实际效果不仅没有很好模块化,反而陷入应用部署和运维的泥潭里。本文将讲讲Rainbond解决应用架构解耦和模块化的一些新思路。

背景

每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计模式到微服务架构,近几年大家觉得微服务架构是模块化的银弹,都朝微服务架构改造,但实际效果不仅没有很好模块化,反而陷入应用部署和运维的泥潭里。本文将讲讲Rainbond解决应用架构解耦和模块化的一些新思路。

当前业务模块化和解耦的问题

  • 架构耦合度还是太高,解耦的不彻底 。比如通过微服务架构拆解的微服务,受开发语言和微服务框架限制,跨开发语言不能调用,跨框架也无法使用,还受限于部署环境,换个环境需要重新解决部署问题。
  • 从开发者角度定义模块,而不是从使用者角度定义模块,导致使用体验不好 。现在我们定义的模块通常都是开发定义的,由于开发离实际使用场景比较远,主观的认为模块拆的细和小,不管有什么场景需求我的模块都能复用和满足,但从使用者角度,模块拆分的越小越细,学习和使用的成本就越高,甚至根本使用不起来,很多模块化是过度的拆解和过度的设计。
  • 模块化发布复杂,维护和升级成本高 。现在的模块化本身是一个开发过程,定义和打包过程都需要开发参与,导致成本高。

基于Rainbond应用模型的解耦和实现思路

Rainbond是一个云原生应用管理平台,可以管理应用全生命周期。下面我们详细讲解一下Rainbond如何解决上述问题。

Rainbond的核心抽象和定义了一套应用模型,通过应用模型从架构上解决解耦问题,应用模型将应用、运维特性和底层基础设施彻底解耦,应用又由多个业务组件拼装而成,每个业务组件可以是不同开发语言和不同构建方式,只要符合业务契约就可以拼装。通过以上解耦方式,彻底将业务组件、运维能力和部署环境解耦,业务组件只需要专注纯业务,不再关心由于使用场景差异需要匹配不同开发框架、服务治理功能、运维工具和部署环境,业务组件、运维能力和部署环境实现根据使用场景自由组合和拼装。

基于业务组件的拼装场景:

  • 从业务功能开发上,业务组件提供的是基于业务协议的服务,不受框架和开发语言限制,可以供其他业务场景复用;
  • 从运维管理上,在开发测试环境不需要开启运维的特性,在生产环境对业务的治理、监控、性能、稳定性和安全性有更高的要求,按需开启通过插件机制实现的运维特性;
  • 从部署环境上,应用模型底层实现对接标准k8s API,所有符合k8s 标准API的基础设施都可以实现对接和部署,也就实现了业务组件不需要改动就可以部署到公有云、私有云和边缘设备上。

16423962815678.png

解耦不仅能提高各种场景的灵活性,还能让业务组件、运维插件和基础设施复用率大幅度提高,当积累的可复用的能力越多,我们面对不同场景、不同用户和不同市场的响应能力也越强。

Rainbond 应用模型遵循“以应用为中心”的设计理念,将应用无关的底层复杂技术封装,简化理解和使用体验。应用模型可以以应用模版的形式展现和存储,以上可复用的能力通过应用模版发布到应用市场,供其他人使用,从而实现模块复用。通常我们实现模块化主要考虑开发者,而应用模版更多考虑使用者,从使用者角度抽象定义,让使用者能用起来,从而拉动应用模版的生产。从使用体验上,应用模版可以一键安装和一键升级,通过“拖拉拽”的方式实现业务拼装。应用模版有很强灵活性,应用模版支持不同颗粒度大小,模版和模版能拼装出新的模版,新的模版还可以持续拼装,颗粒的大小由使用者决定,由使用者赋予它意义。

应用模版具备可打包业务的能力,有四个特点:

  1. 模块化,可以形成可复用的能力单元,按需拼装使用场景。
  2. 自治,自给自足,可以独立安装、升级和管理,确保组合的灵活性。
  3. 可编排,模版和模版可以拼装出新模版,具备无限拼装能力。
  4. 可发现,通过内部服务和外部服务两种方式体现,可供业务和技术、开发者和其他应用访问。

应用模版的定义和实现内容:

  • 应用基本的元数据
  • 名称
  • 时间戳
  • 版本号和别称
  • 资源占用情况
  • 应用治理模式( k8s service模式、Service Mesh内置和Istio)
  • 应用网关信息
  • 对外端口
  • 域名和证书
  • 发布策略
  • 应用全局配置
  • 一个或多个业务组件
  • 业务组件的依赖关系
  • 业务组件类型(源码、镜像、Helm和第三方API)
  • 组件的构建方式
  • 组件的存储方式
  • 组件的配置方式
  • 组件的运行方式
  • 业务组件的插件
  • 组件端口和协议
  • 组件环境变量

模块发布和拼装流程

16423963768590.png

在Rainbond中应用模版是模块的表现形式,模块发布和拼装流程就是应用模版的发布和拼装过程。模块建设是一个长期过程,强调积累,更多是在实践过程中的沉淀,同时需要根据反馈来持续迭代。 这个过程分四步:

第一步: 模块以应用模版的形式一键发布,所见即所得

发布业务组件首先需要从业务角度定义颗粒度和业务接口,然后将要发布的组件在Rainbond构建,Rainbond支持各种构建源,构建的同时也在定义应用模版,只要构建成功,就可以一键发布成应用模版,也就意味着任何在使用平台的开发者都具备发布应用模版的能力,发布的门槛低有利于知识和经验的分享。

16423964110669.png

第二步: 通过应用市场存放不同颗粒度的模块

应用模版支持不同颗粒度,针对不同使用场景包装不同颗粒度:

  • 面向内部研发场景,主要积累技术模版,模版颗粒度相对较小,为了提高开发效率。
  • 面向客户交付场景,主要积累业务模版,模版颗粒度较大,通过模版可以快速拼装客户解决方案,提高交付效率。
  • 面向销售场景,主要积累可以销售的产品模版,颗粒度最大,能帮助销售快速演示、使用和整体交付。

16423964507692.png

第三步:通过应用模版实现模块化拼装

从应用市场一键安装需要拼装的模块(应用模版),通过“拖拉拽”将多个模块拼装成需要场景,拼装后原模块发布新版本,在拼装好的场景里按需升级。新拼装好的场景发布成应用模版,可以是更大的模块支持更大场景的拼装,也通过应用模版实现后续客户交付流程。

16423964820219.png

第四步:在真实应用场景中,持续积累和迭代

模块的建设过程,要避免过度设计和提前过度拆解,模块提早拆解或拆解的粒度太小,会导致模块开发和维护成本高,使用体验不好。所以,模块前期设计和开发只能占少部分,大部分模块在真实场景中才能看到它的价值,这时候再发布成可复用的模块,更加具备实用性。同时,模块的边界和功能在真实场景中才有意义,需要根据实际需求不断迭代。

使用场景

可拼装的业务模块,提高开发效率和客户交付速度

对于软件公司的研发和客户交付场景,通过可拼装的业务模块,在新项目研发和新客户交付过程中复用,减少重复性开发,能大幅度提高效率。

行业业务中台,实现行业能力积累和复用

对于行业用户,实现数字化的过程,会建设很多套系统,这些系统有很多能力是通用的,把这些能力积累下来,后续建设过程直接复用,不仅减少了建设周期,复用成熟的能力还能提高系统成熟度。另外,需要业务融合和数据融场景,可以通过业务编排,实现系统之间的互联互通。

2B软件公司的产品化包装和模块化销售

对于2B软件公司,会面对项目个性化和产品标准化的矛盾,要解决这对矛盾有两个解决方案:一个是让个性化的项目也能快速沉淀出产品,这个过程通过发布应用模版能快速实现;另一个是将个性化的项目按模块化拆解,不同客户选择不同模块,实现根据客户需求个性化销售;这两个方案可以进一步融合,在早期,个性化项目是驱动力,项目的模版可以作为给其他客户演示和交付的产品基础,在不断的交付客户过程中,发现和拆解可复用的模块和个性化的模块,等交付客户越多,积累的可复用模块也就越多,也知道哪些模块有商业价值,模块化成为产品的基础,更好服务销售和交付,产品化也就越成熟。

相关文章
|
设计模式 机器学习/深度学习 SQL
软考高级系统架构设计师通关经验分享
为什么考系统架构设计师是国家设立的计算机技术与软件专业技术资格考试(简称软考)中的一个高级科目,属于工程师高级职称系列,具有一定含金量。浙江省每年通过软考高级的人数约为1000+人,其中系统架构设计师科目的通过人数约为200+人。从学习角度来说,通过准备系统架构设计师的考试的过程,可以查漏补缺,并且了解一些系统架构设计相关的基础知识,实现一定程度上的自我提升;从目的性的角度来说,通过考试,可以在一
14663 4
软考高级系统架构设计师通关经验分享
|
存储 数据采集 分布式计算
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
|
SQL 关系型数据库 MySQL
|
缓存
Centos7.3修改yum源为阿里云yum源
Centos7.3修改yum源为阿里云yum源
9302 0
Centos7.3修改yum源为阿里云yum源
|
12月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
1771 5
|
存储 安全 数据管理
磁盘分区全解:快速搞定硬盘分区
本文介绍了磁盘分区的重要性和好处,如数据管理、性能提升和安全增强,并为初学者提供了Windows系统下的磁盘分区指南。文章提到了三种磁盘分区工具:磁盘管理器、Diskpart命令行工具和第三方软件DiskGenius。同时,详细阐述了如何在磁盘管理器中创建新分区、使用DiskGenius一键重新分区、拆分现有分区以及通过Diskpart命令创建分区的步骤。最后,文章强调了磁盘分区在数据管理和系统优化中的价值。
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
1572 0
|
12月前
|
存储 安全 云计算
云计算核心概念与关键技术简介
本文介绍了云计算的基本概念、技术基础、服务模式(IaaS、PaaS、SaaS)及其关键技术,如虚拟化、容器技术、云存储和多租户管理等。云计算通过按需付费、灵活扩展、高可用性等特点,显著降低了企业的IT成本,加速了业务创新,推动了各行各业的智能化转型。
3222 0
|
缓存
Microsoft Store微软商店更新失败/无法更新应用解决方法
Microsoft Store微软商店更新失败/无法更新应用解决方法
10860 0
|
SQL Apache 流计算
Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
【2月更文挑战第25天】Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
1315 3