toB应用私有化交付发展历程、技术对比和选型
由于数据隐私和网络安全的考虑,大多数toB场景的客户需要私有化应用交付,也就是需要交付到客户的环境里,这样的客户有政府、金融、军工、公安、大型企业、特色行业等,这些私有化场景限制很多,如何提高私有化应用交付的效率是个难题,本文将介绍,私有化应用交付有哪些技术?他们都各自有什么特点?私有化应用交付的发展历程。
toB应用私有化交付的困难点
环境网络限制,影响交付效率
- 交付实施过程中不能方便查找资料;
- 在交付过程中,交付人员需要跟公司的开发进行沟通,网络限制会影响协作工具的使用,有些客户环境甚至不能带手机,会影响解决问题的效率,环境越复杂影响越大;
- 在离线环境内,安装软件包也没办法直接下载,我们需要将安装文件或配置文件打包成离线包,在客户环境导入。由于业务的复杂性会导致镜像很多且很大,只能有交付人员带移动硬盘到客户现场导入,导致在导入离线包就会花费较多时间。甚至有些环境只能刻录光盘在客户环境导入,光盘本身存不了太大的包,只能分多个光盘刻录;
客户基础设施差异,需要适配过程
- 在私有化场景,不同客户的安装环境也不一样,有些使用物理服务器,有些使用虚拟机,不同的虚拟机厂商也有差异。操作系统也各有不同,例如常见的操作系统有 CentOS/Debian/Ubuntu/Redhat,当前还有很多国产化操作系统。CPU 架构也可能不同,有 X86、ARM 等;
- 资源准备周期长,需要审批流程;
- 交付的应用需要很重的适配过程,要么在公司适配,要么在客户现场适配;
- 由于环境差异很大,应用交付完需要完整测试和验证,需要大量的人力和时间投入;
交付人员的技术门槛高
- 交付人员需要懂底层硬件和网络;
- 交付人员需要懂操作系统和系统运维,需要懂服务治理、高可用、安全、性能分析、备份恢复、交付开发等等;
- 交付人员要能独立排查交付应用的问题,需要很强的技术基础;
定制化交付迭代效率低
- 在定制化交付场景,客户会参与到开发过程中,客户需要看到效果后反馈问题,再持续迭代,直到客户满意,过程中需要频繁升级产品;
- 如果开发人员在公司定制开发,升级过程复杂,沟通低效;
- 如果开发人员在客户现场,没有好的开发工具和环境,开发效率低,人力投入大;
后期维护难度大
- 应用交付完成后,后期需要保障应用运行的稳定性,离线环境远程没办法运维,报警没办法发出来,运维的难度大;
- 产品有Bug、一些预期内的变更或产品升级都需要出差客户现场,支持的成本比较高;
传统应用交付
传统的应用交付是直接交付二进制的可执行文件或软件包:
- 二进制的可执行文件: Java 的 Jar,Linux 的可执行文件,Windows的 EXE 等。
- 软件包: CentOS 使用 RPM 包,Debian 使用 DEB 包,Java Web 使用 WAR 包。
安装他们都需要先安装依赖的环境和基础软件,YUM 和 DEB 有自己的管理依赖的软件源,但离线环境用不了,如果客户的操作系统不同,还需要另外想办法解决,运行这类服务为了解决启动和自动重启的问题,还需要通过 Systemd 或 Supervisor 的方式来管理。如果交付单体架构的应用传统应用交付方式还能胜任,但如果是复杂的微服务架构,传统应用交付方式将难以胜任。
在传统应用交付过程中,管理这些运行环境和操作系统差异是一个痛点,容器的出现解决了这个问题。
当前云原生技术应用交付
云原生应用交付主要使用的容器和 Kubernetes 相关技术。
Docker 镜像交付
Docker 将业务和依赖的库一起打包成 Docker 镜像,在这个镜像中包含所有环境和应用,这样就可以达成一处打包、到处使用,我们可以将该镜像在任何支持 Docker 的操作系统上运行。Docker 的特性的确解决了很多开发、交付以及其他许多问题,因此 Docker 容器概念迅速的被普及。
在微服务架构场景,需要多个服务或应用一起交付,服务之间有依赖,还有复杂的配置,DockerCompose 解决了这个问题。
Docker-Compose应用交付
DockerCompose 将多个服务或应用使用 YAML 的方式管理,可以利用 DockerCompose 命令安装部署和管理,对于一个微服务架构的应用,利用 DockerCompose 命令就可以在任何操作系统实现一键安装和运行,当然前提是需要安装好 Docker 和 DockerCompose。
对于单机场景 DockerCompose 可以适用,当应用需要高可用或多节点分布式部署,DockerCompose 就不能胜任,Kubernetes 的出现解决了容器的高可用和分布式调度问题。
Kubernetes YAML应用交付
在 Kubernetes 中部署业务我们需要定义 Deployment Statefulset Service 等资源类型,通过调整副本的方式 Kubernetes 会自动调度到多个节点实现业务高可用,在交付时我们只需要将这些 YAML 资源和 Image 导出,在客户的 Kubernetes 环境中部署并交付给客户。这种交付方式需要客户环境有 Kubernetes 或在客户环境安装 Kubernetes。
当我们将 Kubernetes YAML 交付很多客户的时候,就需要参数配置、版本管理和简单的安装和升级,Helm 在 Kubernetes YAML 的基础上解决了上述问题。
Helm 应用交付
Helm 是 Kubernetes 资源的包管理器,它可以将一组资源定义成 Helm Chart 模版,提供了基于 Helm Chart 模块的安装和升级,安装时可以配置不同的参数。Helm 同样也是在 Kubernetes 交付中大多数人选择的工具。
Helm 最大的问题是需要开发者学习容器和 Kubernetes 整个技术栈,而且客户环境必须要有 Kubernetes,学习和使用的门槛太高。抽象的应用模型是一个解决方案。
面向未来的云原生应用模型交付
应用模型强调以应用为中心的理念,让开发者专注在业务本身,在应用级抽象和包装底层复杂的技术,应用模型跟底层基础设施完全解耦,根据对接和交付的基础设施不同,自动转换和适配,真正实现一次开发,处处自动化部署。
基于OAM的KubeVela应用交付
OAM(Open Application Model) 是一个描述应用的标准规范。有了这个规范,应用描述就可以彻底与基础设施部署和管理应用的细节分开。通过将应用定义与集群的运维能力分离,可以让应用开发者更专注于应用本身,而不是”应用部署在哪“这样的运维细节。KubeVela 基于 OAM 实现了应用跨云、跨环境持续交付。当前 KubeVela 对离线场景的应用交付支持较弱。
基于RAM的Rainbond应用交付
Rainbond 是一个云原生应用多云管理平台,Rainbond 遵循以应用为中心的核心理念,统一封装容器、Kubernetes 等复杂技术,将 Kubernetes 资源统一抽象成 RAM(Rainbond Application Model)应用模型,使用户能非常简单的使用 Kubernetes,降低用户使用的门槛,使用户专注于应用开发、应用交付和应用运维。
在对于离线交付场景,Rainbond 基于 RAM 可以导出三种离线交付包:
- Rainbond应用模版包:其中包含了复杂微服务架构交付的所有要素,支持升级和回滚,但要求客户环境安装 Kubernetes 和 Rainbond;
- 非容器的软件包:非容器包按照传统应用交付方式打包,但易用性更好,包中包含了环境依赖,并采用静态编译,适合大多数操作系统,使用 Systemd 管理;
- Docker-Compose离线包:支持在标准 Docker Compose 环境一键启动和管理;
综合对比
| 交付门槛 | 微服务支持 | 多节点调度 自动化运维 |
离线迭代效率 | 客户环境支持 | |
|---|---|---|---|---|---|
| 传统交付 | 高 | 不支持 | 不支持 | 低 | 服务器 |
| Docker镜像 | 中 | 不支持 | 不支持 | 高 | 容器/K8s |
| Docker Compose | 中 | 支持 | 不支持 | 中 | 容器 |
| K8s Yaml | 中 | 支持 | 支持 | 中 | K8s |
| Helm Chart | 中 | 支持 | 支持 | 中 | K8s |
| KubeVela | 中 | 支持 | 支持 | 中 | K8s |
| Rainbond | 低 | 支持 | 支持 | 高 | K8s/容器/服务器 |
- 应用交付门槛: 传统方式交付门槛最高;Docker、DockerCompose、Kubernetes Yaml、Helm 和 KubeVela 交付的门槛中等,因为需要学习会容器和Kubernetes 相关技术;Rainbond 使用最简单,不需要学习容器和 Kubernetes。
- 微服务支持: 除传统应用交付和Docker镜像,其他方式都支持微服务编排和打包交付。
- 多节点调度和自动化运维:Kubernetes Yaml、Helm、KubeVela 和 Rainbond 支持 Kubernetes 的多节点调度。
- 离线迭代效率: 传统方式交付效率最低;Docker 镜像有版本,而且一个命令就可以导出一个离线包,所以迭代效率高;Docker-Compose、Kubernetes Yaml、Helm 和 KubeVela 需要手工逐个打出镜像离线包,复杂架构效率不高,而且手工容易出错;Rainbond 支持自动化导出一个离线包,导入离线环境,可以一键升级和回滚,迭代效率很高。
- 客户环境支持: 不同客户有不同的运行环境,交付的包需要根据客户环境选择,传统应用交付方式适合老的一些基础设施,操作系统版本老,没办法安装运行容器;客户环境没有 Kubernetes,也不允许安装 Kubernetes,可以选择 Docker 镜像和 DockerCompose;Kubernetes Yaml、Helm、KubeVela 和Rainbond 支持有 Kubernetes 的环境。
toB应用私有化交付发展历程、技术对比和选型的更多相关文章
- 动态 Web Server 技术发展历程
动态 Web Server 技术发展历程 开始接触 Java Web 方面的技术,此篇文章是以介绍 Web server 相关技术的演变为主来作为了解 Java servlet 的技术背景,目的是更好 ...
- 从故纸堆里,回顾下Web技术的发展历程
通过对比这些年的计算机图书来让大家感受下前些年Web技术的发展历程. Web开发框架,目前是Spring Boot+JPA,我正好出过本书,从中大家能感受到现在的技术. <Spring Boot ...
- 第一篇:GPU 编程技术的发展历程及现状
前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础的.该系统架构 ...
- web技术发展历程--读《大型网站技术架构_核心原理与案例分析》
1 早期的web服务 2 CGI程序的出现.发展.凋零到MVC的兴起 CGI:通用网关接口技术. 随着CGI技术的出现,web服务端可以通过不同的用户请求产生动态页面内容. web服务器将请求数据交给 ...
- Web UI 技术发展历程
本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...
- 我们是如何将 ToB 服务的交付能力优化 75%?
ToB 服务交付的方式分为公有云部署和私有化部署两种.其中,对成本敏感的中小企业往往采用公有云部署的方式,从而尽量减少成本.客单价较高的大型企业.政府.银行和事业单位,考虑到数据隐私.安全.合规等要求 ...
- 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...
- C++之父接受采访:对 C++ 成功的关键和发展历程进行了回顾
C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一. 到 2020 年 9 月为止,C++ 是仅次于 C 语言.Java 和 Python,位于全球第四的编程语言.根据最新的 ...
- C#与C++的发展历程第三 - C#5.0异步编程巅峰
系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...
- Linux实战教学笔记03:操作系统发展历程及系统版本选择
标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...
随机推荐
- KingbaseES V8R6C5B041手工创建集群测试案例
案例说明: KingbaseES V8R6C5B041版本和以前的KingbaseES R6有一定的区别,增加了"securecmdd"的工具,并且在install.conf配 ...
- Cluster table 与性能
用户数据行存储在文件系统中的堆文件中,而这些行以不确定的顺序存储.如果表最初以插入/复制的顺序加载,那么以后的插入.更新和删除将导致在堆文件中以不可预测的顺序添加行.创建索引创建一个指向堆行的辅助文件 ...
- 【读书笔记】C#高级编程 第二十五章 事务处理
(一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...
- ASP.NET MVC 对于视图引擎的优化
我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...
- 批量修改DNS记录的TTL值
最近有个需求,需要修改Windows DNS服务器上区域下所有A记录的TTL值.原先默认的TTL是1小时.也就是说,其它DNS服务器会缓存查询到的记录1个小时.对于近期需要大量修改记录的情况来说这样生 ...
- 累加和为 K 的最长子数组问题
累加和为 K 的最长子数组问题 作者:Grey 原文地址: 博客园:累加和为 K 的最长子数组问题 CSDN:累加和为 K 的最长子数组问题 题目描述 给定一个整数组成的无序数组 arr,值可能正.可 ...
- Elasticsearch:使用 IP 过滤器限制连接
文章转载自:https://elasticstack.blog.csdn.net/article/details/107154165
- 03_配置Java环境变量
配置Java环境变量 右键我的电脑-属性-高级系统设置-环境变量 系统变量-新建-变量名JAVA_HOME,变量值为JDK安装路径 系统变量-新建-变量名CLASSPATH,变量值为英文输入法下的. ...
- 努力一周,开源一个超好用的接口Mock工具——Msw-Tools
作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...
- 洛谷P3690 (动态树模板)
一位大佬写的代码.(加上我自己的一些习惯性写法) 存个模板. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N= ...