平台工程实践,让应用开发如搭积木一般简单

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在过去,传统的应用程序部署和管理通常是一个复杂且耗时的过程。这包括硬件和服务器的采购、配置、维护以及应用程序的手动部署和扩展。随着云原生概念的普及,虽然带来了扩展性、可用性等方面的改进,但也意味着运行单个脚本部署一个完整应用程序的日子一去不复返了。

在过去,传统的应用程序部署和管理通常是一个复杂且耗时的过程。这包括硬件和服务器的采购、配置、维护以及应用程序的手动部署和扩展。随着云原生概念的普及,虽然带来了扩展性、可用性等方面的改进,但也意味着运行单个脚本部署一个完整应用程序的日子一去不复返了。

"开发者应该能够端到端的部署和运行他们的应用程序和服务,你构建它,你运行它",这样的话看起来没有问题,但对于大多数公司来说,这并不现实,复制完整的 DevOps 流程并非易事。当开发人员负责构建和运行时,环境和基础设施的管理也移到了开发人员的头上。这是一个全盘皆输的局面,开发者无法将更多的时间投入到编码和产品开发,而负责运维的同事则需要解决来自于开发者的问题。

那么,如何确保开发人员可以独立运行自己的应用和服务,且不需要依赖其他同事的帮助?这正是平台工程需要解决的核心问题,本文将分享我们通过开源产品 Rainbond 构建自己的开发者平台,实现平台化开发体验的实践。

什么是平台工程?
平台工程是一门设计和构建自助服务功能的学科,旨在最大限度地减少开发人员的认知负担并实现标准化流程的软件交付。

在企业内部,底层设施种类繁多,即使使用云厂商提供的服务,也会面临不同云厂商的 API、SDK 等差异。有时,工程师根据实际需求采购各种资源和服务,并创建工具以整合它们,以便供业务开发使用。然而,即使这个流程已经建立,但在更换云厂商时,仍需要重新调整。且这类整合方案对开发者而言依然需要较高的学习成本。

而平台工程的目标是解决这类问题,专业的工程师负责购买、整合各类服务,并构建内部开发平台,以构建自助服务解决方案。这使得开发人员能够在该平台上自助搭建和管理运行环境,自主运行代码,实现快速交付,而无需关注底层设施。

平台工程的关键要素
不被供应商锁定: 平台工程需要支持对接各种公有云、私有云等,以降低迁移成本,使组织不会受制于特定云厂商。
自助解决方案: 平台工程师需要整合各类基础设施,并在其之上构建供开发者使用的平台,为开发者提供自服务的能力,使其能够快速创建和管理运行环境,自主运行代码,实现快速交付。
应用全生命周期管理: 开发者应能够在平台上轻松部署应用程序并管理其整个生命周期,而无需了解复杂的基础设施和运维概念。
模块化能力: 平台工程鼓励开发者开发模块化的应用,使各个业务模块能够以标准化的形式互相连接,实现复杂的应用系统。
如何开始?
当前,在一些企业内部,可能已经有运维人员构建好的 CI/CD 流程,开发者提交代码,CI 构建出镜像,并更新线上服务的镜像。这涵盖了大多数部署用例。然而每当我们需要做一些超出这个工作流程之外的事,就会变得更加复杂和耗时。例如:快速部署新环境、添加新的业务模块和依赖、添加各种配置、回滚和调试、应用升级等。

而平台工程就是将这些工作流程及额外的事绑定在一起,不需要让每个人都了解这些工具链,就能拥有快速启动应用、将应用模块化且不依赖其他工程师的能力。衡量该平台的关键原则之一是应该很容易做正确的事情,而很难做错误的事情。

对于广大中小型企业或者传统行业来说,通常没有足够的人力来自建这类平台,而一些公有云厂商也提供了一些相关服务,看似很好,但却很容易导致供应商绑定。因此找到一款不被供应商绑定、成熟且开源的平台是一个好的选择。

实践:构建云原生平台工程
根据平台工程的关键要素,我们最终选择了开源产品 Rainbond 作为内部开发者平台,它是一个不用懂 Kubernetes 的云原生应用管理平台,可以对接各类公有云、私有云、物理机。关键特点如下:

零学习成本,图形界面,鼠标点击就能完成所有操作。
自动识别多种开发语言,如 Java、Python、Golang、NodeJS、Dockerfile、Php、.NetCore 等,通过向导式流程完成构建和部署,不用写 Dockerfile 和 Yaml 文件。
业务模块化拼装,可复用的业务组件一键发布,统一的组件库存储,通过业务组件积木式拼装,实现业务组件的积累和复用。
丰富的可观测能力,提供全面的可观测性,涵盖集群监控、节点监控、应用监控、组件监控。
应用全生命周期管理,Serverless 体验,应用管理和运维,组件管理和运维,无侵入微服务架构。
全面支持国产化信创,传统应用自动识别和部署到信创环境(自动编译兼容国产 CPU,自动部署到兼容的服务器),并可以管理信创应用的全生命周期,如启动、构建、更新、关闭、回滚等。
平台工程将角色主要分为两类,平台工程师和开发人员。两者关注的点不同,平台工程师关注底层工具的整合和平台本身,而开发者则更关注应用,平台的最终用户实际上是企业内部的开发者,因此接下来我将站在开发者的角度分享我们是如何利用 Rainbond 实现了平台化的体验。

应用部署
在平台工程中,应用的部署是一个关键步骤,它使开发人员能够将其应用程序快速部署到平台上。与传统的部署流程不同,使用平台工程,这一步变得非常简单和高效。

在之前的部署模式中,我们需要先编写 Dockerfile 将代码容器化,并通过一些脚本进行拼接,编写 Kubernetes 的 Yaml 文件或 Helm Chart 之类的模版才能完成部署。当遇到一些复杂的依赖关系需要编排时,这个流程会更加复杂。

而在 Rainbond 平台上,部署应用几乎是一种无需编写繁琐配置的自助服务。开发者只需将其填写好业务代码的仓库地址,点击构建,然后点击几下鼠标即可完成部署。 Rainbond 会自动识别代码语言,将业务代码容器化,并将业务运行起来,使开发者专注于应用本身的开发而不必担心底层基础设施。

img

当业务运行起来后, Rainbond 还支持页面直接配置网关策略,如域名、证书、tcp 策略等等,开发者不需要了解复杂的概念即可快速上手。

img

应用全生命周期管理
平台工程的核心目标之一是实现应用的全生命周期管理。这意味着开发者不仅可以轻松部署应用,还可以在整个应用生命周期中进行监控、扩展、升级和维护。

使用 Kubernetes Yaml 或者 Helm 等方式,会遇到这样的问题,在 Kubernetes 底层并没有应用的概念,都是以一个个工作负载、Service、Ingress 等资源组成的。且各个工作负载之间的关系并不明确。对应用开发者而言,在观测性和管理上都是一种负担,更不用说按需启动或关闭应用节省资源了。

而 Rainbond 平台提供了丰富的应用管理工具,开发者站在应用的角度观测整个应用的拓扑、运行状态,如下图所示,每一个六边形都是一个微服务,所有的微服务之间互相依赖,构成了完整的应用对外提供服务。如果某个微服务模块出现问题或处于关闭状态,均可以一目了然。且在应用角度和微服务模块上,都支持启动、 关闭、更新、构建等全生命周期操作。

img

点击某个微服务模块,还可以进一步监控和配置该业务模块。可以查看运行状态、资源使用情况、日志等,出现问题也可以利用平台提供的 Web 终端直接访问到业务容器进行排查。开发者可以真正做到” 谁构建、谁运行 “,而且不会增加额外负担。

img

积木式拼装
模块化能力也是平台工程至关重要的一环,开发者开发好的应用只有能以一种标准化的形式交付、且每个应用都能形成可复用的模块,才能最大限度的减少开销和浪费。平台应该能提供默认操作,让开发团队能不需要额外努力,就能以正确的方式做事。

而这也正是 Rainbond 的独特之处,其支持应用级别的抽象,我们可以将每个应用沉淀为不同的应用模版,以便团队内部或跨团队共享,实现积木式拼装。这意味着开发者可以将不同的业务模块和组件像搭积木一样组装在一起,创建复杂的应用系统。

如下图所示,开发者可以将已发布的应用模版一键安装下来,并通过连线的方式编排其依赖关系。

img

同时,开发者创建自己的应用模版也应该是极其简单的,Rainbond 基于应用级的抽象,提供了应用模版交付的能力。简单来说就是当你的应用在平台上正确的运行起来后,那么你通过界面将其发布成自己的模版后,该模版应该也能在另一个环境一键安装下来。这既简化了开发者制作自己可复用模版的步骤,还提供了与底层无关的交付体验。

即使不懂技术,也能通过该应用模版将完整的微服务应用一键交付到客户环境。

通过将应用模版化和积木式拼装,平台工程将复杂性隐藏在背后,开发者只需选择所需的模块并将它们连接在一起即可,这使得构建高度定制化的应用系统变得非常容易。

结语
在如今快节奏、竞争激烈的技术领域,构建云原生平台工程已经不再是一项奢侈,而是一项必要。它不仅仅是一种技术进步,更是一种战略决策,将帮助企业实现更快的应用交付、更高的可用性和更好的开发者体验。

通过平台工程,开发者不再需要繁琐的基础设施管理,不再受制于特定的云服务提供商,而是可以专注于创造杰出的应用程序。云原生平台工程,特别是借助开源产品如 Rainbond,使得应用开发就像搭积木一样简单,从而提高了创新的速度,降低了开发和运维的负担,也提升了企业的竞争力。

最后,不要忘记平台工程的核心原则之一:应该很容易做正确的事情,而很难做错误的事情。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
敏捷开发 弹性计算 中间件
平台即服务(PaaS):简化开发与部署的新篇章
【6月更文挑战第21天】PaaS简化了应用开发与部署,提供资源池化、自动化管理及丰富的开发工具,助力企业降低成本、提高效率和系统稳定性。它支持敏捷开发、加速产品上市,改善用户体验,并推动创新,成为现代软件开发的关键。
|
5月前
|
缓存 监控 持续交付
构建高效微服务架构:后端开发者的七大秘诀
在本文中,我们将深入探讨构建和维护高效微服务架构的关键策略。不同于常规的技术细节介绍,我们将重点放在实践技巧和方法论上,帮助后端开发者提升系统设计能力,确保微服务架构的稳定性、扩展性和安全性。从服务划分到数据一致性,再到服务监控与调优,文中将提供一系列实用的建议和最佳实践,旨在指导读者如何在复杂多变的业务环境中构建出健壮且高效的微服务体系。
|
11月前
|
数据可视化 安全 搜索推荐
探析低代码开发平台的核心能力
探析低代码开发平台的核心能力
151 0
|
2月前
|
开发工具 数据安全/隐私保护 iOS开发
探索iOS应用开发的核心理念与实践
【8月更文挑战第23天】在数字时代的浪潮中,iOS应用开发不仅仅是技术的堆砌,更是一场关于创新、用户体验和持续改进的旅程。本文将深入探讨iOS应用开发的核心理念,从设计哲学到开发工具的选择,再到市场趋势的适应,旨在为开发者提供一条清晰的路径,帮助他们在不断变化的技术世界中保持竞争力和创新力。
|
2月前
|
机器学习/深度学习 数据可视化 搜索推荐
低代码开发是一种能够加速软件研发进程的高效开发方法
【8月更文挑战第4天】低代码开发是一种能够加速软件研发进程的高效开发方法
46 0
|
5月前
|
API 开发者 UED
构建高效微服务架构:后端开发的新趋势移动应用与系统:开发与优化的艺术
【4月更文挑战第30天】 随着现代软件系统对可伸缩性、灵活性和敏捷性的日益需求,传统的单体应用架构正逐渐向微服务架构转变。本文将探讨微服务架构的核心概念,分析其优势,并着重讨论如何利用最新的后端技术栈实现一个高效的微服务系统。我们将涵盖设计模式、服务划分、数据一致性、服务发现与注册、API网关以及容器化等关键技术点,为后端开发者提供一份实操指南。 【4月更文挑战第30天】 在数字化时代的浪潮中,移动应用和操作系统的紧密交织已成为日常生活和商业活动的基石。本文将深入探讨移动应用开发的关键技术、跨平台开发工具的选择以及移动操作系统的架构和性能优化策略。通过分析当前移动应用开发的挑战与机遇,我们将
|
5月前
|
前端开发 IDE JavaScript
【inBuilder 低代码开发实验室】使用inbuilder完成UBML低代码设计开发
【inBuilder 低代码开发实验室】使用inbuilder完成UBML低代码设计开发
75 0
|
5月前
|
前端开发 Java API
深度|低代码开发平台和微服务架构的优势与挑战
低代码开发平台和微服务架构是当前软件开发领域的两个热门话题。它们都是为了更高效、更灵活地构建和开发应用程序而出现的解决方案。本文将以一款基于微服务架构的OneCode引擎为案例来探讨低代码开发平台和微服务架构的优势和挑战。
|
11月前
|
人工智能 Kubernetes 数据可视化
低代码平台:构建应用程序的“银弹”
低代码平台:构建应用程序的“银弹”
|
11月前
|
安全 关系型数据库 Java
低代码平台深度剖析
低代码平台深度剖析
211 0