阿里巴巴正式开源云原生应用脚手架

news2024/11/15 14:19:41

865dadbc827354f46619289399e4269d.gif

12 月 3 日,微服务 x 容器开源开发者 Meetup 上海站上,阿里云智能技术专家,云原生应用脚手架项目负责人良名宣布阿里巴巴云原生应用脚手架项目正式开源,并在现场做了相关内容介绍。

0a7c7294479ff7cdae2d9e74b66111d9.png

本次开源的云原生应用脚手架是一款基于 Spring Initializr 项目基础之上,支持多种工程架构、提供代码示例片段、组件更丰富、生态更开放的一款脚手架。其致力于在当下云原生时代,为广大开发者提供更简单、更高效的项目构建体验。

01

云原生应用脚手架

Aliware

01

常规的工程构建流程

接下来,我们通过回顾一下过去数十年间一个后端软件工程师一般是怎么来开发一个新项目的来了解云原生应用脚手架。随着技术的发展,和大量提升研发效能工具的持续涌现,一个后端 Java 企业级项目的创建过程总体上经历了手工构建、脚手架构建等历程。

手工构建

在 start.spring.io 脚手架项目被推出之前,很多后端工程师的项目构建过程都是纯手工的形式进行。那时,Spring 项目是后端新项目构建主要使用框架之一。因此,我们以一个 Spring 企业级项目构建为例进行说明。该阶段新建项目大致可分为:新建工程、添加依赖、添加配置、编写测试代码和运行测试5个步骤,接下来分别进行详细说明。

新建工程

在 Spring 项目盛行的手工项目构建阶段,新建工程一般采用得较多的集成开发工具(Integrated Development Environment, IDE)那个时候用得最为普遍的还是 Eclipse。

44efc456676b738243adcdb1ca72df34.png

新建新项目总体来说比较简单。按照 IDE 的新建项目提示即可快速新建一个相关工程。

添加依赖

由于一个企业级项目一般会依赖于很多外部组件,比如 MySQL 数据库、Redis 缓存,因此需要添加很多第三方组件依赖。这个过程比较繁琐,需要操作的同学了解具体所需的功能与对应的依赖名称,有的功能还可能需要多个组合依赖。当项目所需外部依赖较多时,整个过程会比较耗时。对于一些有经验的工程师,一般都通过留存一些项目依赖模板,在创建新项目的时候通过参考模板来进行依赖添加,这样能稍微加快项目构建进程。

添加配置

Spring 项目构建过程中最为复杂的部分莫过于进行各种各样的配置了,例如下方所示为一个基本的 MySQL 连接配置:


 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-4.3.xsd
  http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
 "
  default-lazy-init="false">
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUrl" value="jdbc:mysql://10.0.xxx.xxx:3306/xxxxx?xxxxx" />
    <property name="user" value="root" />
    <property name="password" value="root" />
    <property name="maxPoolSize" value="40" />
    <property name="minPoolSize" value="1" />
    <property name="initialPoolSize" value="1" />
    <property name="maxIdleTime" value="20" />
  </bean>
  <!--配置sqlSessionFactory -->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-xxx.xml" />
  </bean>
</beans>

除了数据库,依赖的外部组件都需要进行手动编写配置文件,完成项目配置,整个过程非常繁琐。就算有参考模板通过拷贝相关文件来做二次修改,也可能稍不留神就出现漏配或者错配一些内容,导致项目运行不起来。

编写测试代码

在完成以上依赖添加和配置设置以后,为了验证项目依赖和配置是否都正确,一般还需要编写一些最简单的测试case来对上述过程进行验证。

运行测试

对于一些经历过多次项目构建并且留有一些自备模板的老司机,按照模板完成上述操作后一般问题就不大,到这里基本上算是完成了新项目的初始化工作。如果是一些新人,之前没有模板参考,或者备用模板无法满足需求的人,到这里基本上还只是噩梦的开始,测试过程中很可能出现各种依赖缺失、依赖冲突、配置漏配或配置错误等问题,需要不断反复修改调试。整个过程耗时费力。

因此,在手工项目构建阶段,为了追求效率,一般新项目工程构建的任务都交给团队内较为资深,有多次项目构建经验的资深工程师来进行,以提高效率。如果在没有模板参考的情况下,很有可能新建一个项目可能花1天时间都不一定能搞定。

脚手架构建

随着 Spring Boot 慢慢成为新项目构建的主流选择,其提出的“约定优于配置”的设计,通过为组件提供默认配置以及通过 starter 依赖的方式极大的简化了手工构建时期的配置繁琐问题,做到了让一般的常规项目达到开箱即用的效果。另外,来自 Spring 社区的 start.spring.io[1] Java 相关项目脚手架,通过点击几下鼠标即可帮你生成一个所需的项目,让项目构建变得让没有经验的小白工程师项目构建起来都毫不费劲。尽管如此,一般企业级项目构建过程还是不得不经历:新建工程、添加配置、编写测试代码和运行测试 4 个环节。

[1] start.spring.io

https://start.spring.io/

新建工程

相比于手工项目构建时期的 Eclipse IDE,新阶段也有了新的更好用的 IDE——IntelliJ IDEA。相比于 Eclipse 单一的白色界面。IDEA 提供了炫酷的暗黑模式,让大量长时间写代码的工程师们缓解了用眼疲劳问题。由于 start.spring.io 工程脚手架的出现并与 IntelliJ IDEA 进行了整合。在 IDE 中新建工程、添加依赖仅需通过点击几下鼠标即可帮你生成一个所需的包含特定依赖的项目。

在 https://start.spring.io 网站上进行工程创建:

f31f139acedfc0f8be2c990befc02cfd.png


添加配置

虽然通过 start.spring.io 脚手架可以帮助用户很好地解决依赖添加问题,但其创建项目过程无法为用户创建示例代码和相应的参数配置示例,在该阶段用户仍然需要自己手动编写或者 Copy 一些模板配置来进行二次修改。

编写测试代码

市面上主流的脚手架工具在创建项目过程中也无法为用户创建示例代码,在该阶段用户仍然需要自己手动编写或者 Copy 一些模板代码来完成测试验证代码的补充。

运行测试

由于有脚手架帮助进行项目创建,脚手架本身会帮助用户保证所选依赖之间具备兼容性,所以一般通过脚手架工具生成的项目一般都没有问题,因此,只要保证编写的测试代码本身正确无误一般运行测试阶段象征性的测试一下运行无误整个项目创建就完成了。

云原生应用脚手架构建

本次开源的云原生应用脚手架基于 Spring 开源的 intializr[2]项目进行构建。相比于 start.spring.io 脚手架,云原生应用脚手架不仅可以帮助用户管理依赖,其更为重要的是帮助用户生成测试或者可以直接使用的代码片段,可让用户创建完工程就可测试,测试完就可以基于示例代码进行项目开发。因此,基于云原生应用脚手架构建项目仅需完成:新建工程和运行测试即可,大大提高新建工程的效率。

[2] intializr

https://github.com/spring-io/initializr

新建工程

与 start.spring.io 脚手架一样我们也提供了 2 种帮助用户直接构建应用的访问方式,用户既可以在IDEA中通过在项目构建时选择所需的依赖进行项目构建:

8f6509adc38ece247ecb9c4cd21762cf.png

用户也可以在官网。start.aliyun.com[3]中进行项目构建后,再将项目导入到本地开发环境:

[3] start.aliyun.com

https://start.aliyun.com/

17ed9daa3a343d37c717a879f682babf.png

通过云原生应用脚手架构建的项目,不仅具备了依赖、配置还有相关的示例代码,构建完成即可进行项目测试。

下图是一个 Spring Cloud Alibaba 工程使用 Nacos 作为注册中心,服务消费者项目构建过程中提供的示例代码:

93b7ec912c05eb5379ed49882f0b1251.png

下图是一个 Spring Cloud Alibaba 工程使用 Nacos 作为注册中心,服务消费者项目构建过程中提供的注册中心连接示例配置:

94813cdf656e5fb4571334804508b1aa.png

另外,针对云原生场景下的,大量企业级用户的用云述求,我们为用户提供云厂商所提供的云服务客户端连接所需的依赖添加能力,帮助外部用户更好地在云原生时代基于云构建可生在云上,长在云上的云原生应用。

运行测试

由于有脚手架帮助进行项目创建,脚手架本身已经帮助用户保证所选依赖之间具备兼容性,并且已经给出配置示例,用户仅需比如修改配置示例中的注册中心链接地址等信息,即可使用示例代码进行功能测试。整个过程实现了开箱即用的效果,用户再也不用关心如果新构建的项目依赖是否兼容、配置是否正确、示例代码如何编写等问题。帮助工程师们扫除一切项目构建阶段的障碍。

02

小节

最后,由于手动构建方式无论什么内容都需要用户手动设置或者添加,跟脚手架方式比不具备优势。因此,我们仅小节对比一下一般脚手架构建和云原生脚手架构建项目之间的区别和差异:

cbf7c8033cb6423a534a6b7ef015cf15.png


03

拥抱开源

云原生脚手架的前身——Aliyun 工程脚手架,于 2020 年初正式发布上线,在过去的 2 年多时间,其为外部用户构建了数百万个新项目,为广大开发者带来了实实在在的便利和价值!

在服务外部用户 2 年多个时间里,我们一方面收到了很多用户对脚手架的开源诉求,另外一方面考虑到脚手架长期的发展,如今,通过开源的方式,希望能聚集一批开发者一起共同建设云原生时代更加好用,生态更加繁荣的项目构建工具,未来,我们会在当前所提供的能力基础之上,在以下方面进行持续建设:

66774e3501dffcb5e58d5f4e061b9e0f.png


02

未来展望

Aliware

云原生应用脚手架是站在 Spring 社区的 Initializr 基础工程和 start.spring.io 脚手架巨人的肩膀上构建而来,能有机会在过去2年服务大量用户并在如今有机会开源出来,首先需要向前辈致敬!

云原生应用脚手架项目在未来计划建设为一个功能强大,社区生态丰富的应用构建工具,为大量需要构建云原生微服务应用的用户提供便利,社区未来的相关规划如下图所示:

51b9f938293be4d11cac2a5171a333e5.png


03

加入社区

Aliware

目前,国内外云原生应用相关的构建脚手架领域基本处于空白状态。阿里巴巴云原生应用脚手架今天开源了!欢迎加入社区,一起来参与来构建一款服务广大开发者的云原生应用脚手架工具。钉钉群号:32268357

40cedccd3b2411299d0bea16cc3fbed2.png

点击阅读原文,进入 GitHub 链接: https://github.com/alibaba/cloud-native-app-initializer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

监控Kubernetes集群证书过期时间的三种方案

前言 Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件&#xff0c;还有 kubeconfig 文件。 如果证书过期&#xff0c;轻则无法登录 Kubernetes 集群&#xff0c;重则整个集群异常。 为了解决证书过期的问题&#xff0c;一般有以下几…

关于“堆”,看看这篇文章就够了(附堆的两种应用场景)

… &#x1f4d8;&#x1f4d6;&#x1f4c3;本文已收录至&#xff1a;数据结构 | C语言 更多知识尽在此专栏中!文章目录&#x1f4d8;前言&#x1f4d8;正文&#x1f4d6;认识堆&#x1f4d6;实现堆&#x1f4c3;结构&#x1f4c3;入堆&#x1f4c3;出堆&#x1f4c3;建堆算法…

新Crack:Neodynamic ZPLPrinter SDK for .NET Standard

适用于 .NET Standard V4.0.22.1206 的 Neodynamic ZPLPrinter Emulator SDK 添加对带有自定义字体设置的 ^BC 命令的支持。2022 年 12 月 7 日 - 16:03新版本特征 添加了对带有自定义字体设置的 ^BC 命令的支持。关于 Neodynamic ZPLPrinter Emulator SDK for .NET Standard 使…

在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析

广义相加模型&#xff08;GAM&#xff1a;Generalized Additive Model&#xff09;&#xff0c;它模型公式如下&#xff1a;有p个自变量&#xff0c;其中X1与y是线性关系&#xff0c;其他变量与y是非线性关系&#xff0c;我们可以对每个变量与y拟合不同关系&#xff0c;对X2可以…

动态规划入门

一、基本思想 一般来说&#xff0c;只要问题可以划分成规模更小的子问题&#xff0c;并且原问题的最优解中包含了子问题的最优解&#xff0c;则可以考虑用动态规划解决。动态规划的实质是分治思想和解决冗余&#xff0c;因此&#xff0c;动态规划是一种将问题实例分解为更小的、…

JAVA SCRIPT设计模式--结构型--设计模式之FlyWeight享元模式(11)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

知识图谱-KGE-语义匹配-双线性模型(打分函数用到了双线性函数)-2014 :MLP

Knowledge Vault & MLP 【paper】 Knowledge Vault: A Web-Scale Approach to Probabilistic Knowledge Fusion 【简介】 本文是谷歌的研究者发表在 KDD 2014 上的工作&#xff0c;提出了一套方法用于自动挖掘知识&#xff0c;并构建成大规模知识库 Knowledge Vault&…

【Linux】期末复习

文章目录1. 认识Linux系统2. Shell命令3. VI编辑器的使用4. Shell脚本编程5. 实验部分1. 认识Linux系统 Linux特点 完全免费开发性多用户、多任务丰富的网络功能可靠安全、性能稳定支持多种平台 2.Linux系统的组成 内核Shell应用程序文件系统 3.Linux版本 Linux版本由形如x1.x2…

(00)TCL脚本运行环境介绍

(00)TCL脚本运行环境介绍 01-TCL简介 02-TCL编辑器 03-TCL运行环境 04-TCL文件 05-结语 (01)TCL简介 Tcl 语言的全称 Tool Command Language,即工具命令语言。这种需要在 EDA 工具中使用的相当之多,或者说几乎每个 EDA 工具都支持 Tcl 语言。所以对于 IC 专业的…

Android Gradle 学习笔记(三)语言和命令

Gradle 支持使用 Groovy DSL 或 Kotlin DSL 来编写脚本。所以在学习具体怎么写脚本时&#xff0c;我们肯定会考虑到底是使用 Kotlin 来写还是 Groovy 来写。 不一定说你是 Kotlin Android 开发者就一定要用 Kotlin 来写 Gradle&#xff0c;我们得判断哪种写法更适合项目、更适…

Kubernetes那点事儿——日志管理

K8s日志管理前言一、日志二、K8s应用日志标准输出应用日志收集1、emptyDir挂载收集2、边车容器收集前言 程序运行中输出的日志默认暂存在Pod中&#xff0c;当Pod销毁重建时&#xff0c;日志也会丢失。所以需要一些持久化的方法保存程序日志。 一、日志 K8s系统日志 kubelet组件…

如何使用 rust 写内核模块

近年来&#xff0c;Rust 语言以内存安全、高可靠性、零抽象等能力获得大量开发者关注&#xff0c;而这些特性恰好是内核编程中所需要的&#xff0c;所以我们看下如何用rust来写Linux内核模块。01Rust 与内核模块Aliware虽然 Rust 支持已经在 LinuxKernel6.1 版本合并到主线了&a…

酷开科技不断革新,引领营销新动向

不管渠道如何变迁&#xff0c;不管场景如何碎片化、多样化&#xff0c;只要家庭文明不解体&#xff0c;只要我们的审美不发生颠覆性变迁&#xff0c;家庭大屏就会是主要营销战场。 随着行业软硬件技术的更迭&#xff0c;智能化OTT终将打通互联网消费场景&#xff0c;带动智能电…

Linux 文件与目录

我们知道Linux的目录结构为树状结构&#xff0c;最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中&#xff0c;通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径&#xff1a; 路径的写法&#xff0c;由根目录 /…

186:vue+openlayers 小汽车移动轨迹动画,带开始、暂停、结束控制键

第186个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中实现轨迹动画,这里设置了小汽车开始,暂停,结束等的控制键,采用了线段步长位置获取坐标来定位点的方式来显示小车的动态。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意…

全国计算机等级考试-Python

计算机二级python 一、 题型及分值分布1. 单选题共40道&#xff0c;1到10题为公共基础知识&#xff0c;11到40题是python相关的知识&#xff0c;比如数据结构与算法、python基础知识。 每道题1分&#xff0c;共40分&#xff1b;2. 基础编程题共3道&#xff0c;题目会…

DocArray 和 Redis 联手,让推荐系统飞起来

在DocArray中使用Redis后端&#xff0c;基于向量相似性搜索可以快速搭建一个实时商品推荐系统。现在&#xff0c;跟上我们的脚步&#xff0c;一起了解搭建系统的关键步骤&#xff0c;并且深入了解推荐的原理吧&#xff01;推荐系统会根据用户画像、历史行为&#xff08;如购买、…

人工智能和数据分析成为 2023 年最大的计划投资

©网络研究院 到 2023 年&#xff0c;新兴技术系统将继续投资和发展&#xff0c;人工智能将引领私营公司计划利用的技术。 IT 分析公司 Info-Tech Research Group 对 2023 年的新行业预测进行了详细说明&#xff0c;预计私营部门公司将继续在其日常业务运营中采用更先进…

科普篇|法治宣传线上答题活动小程序界面功能全介绍

科普篇|法治宣传线上答题活动小程序界面功能全介绍 为深入学习贯彻二十大精神&#xff0c;努力使尊法学法守法用法在全社会蔚然成风&#xff0c;切实推动全民法治宣传教育深入开展&#xff0c;xx举办全民法治宣传线上答题活动。 第一、主界面展示 ①标题、主题、单位名称落款…

数据结构与算法之《二叉树》详解

标题&#xff1a;二叉树的思路及代码实现 作者&#xff1a;Ggggggtm 寄语&#xff1a;与其忙着诉苦&#xff0c;不如低头赶路&#xff0c;奋路前行&#xff0c;终将遇到一番好风景 文章目录 一、树的概念及结构 二、二叉树的概念及结构 2、1 二叉树的概念 2、2 二叉树的特点 2、…