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

本文涉及的产品
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 12 月 3 日,微服务 x 容器开源开发者 Meetup 上海站上,阿里云智能技术专家,云原生应用脚手架项目负责人良名宣布阿里巴巴云原生应用脚手架项目正式开源,并在现场做了相关内容介绍。

作者:铖朴、良名


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


1.png


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


云原生应用脚手架


常规的工程构建流程


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


手工构建


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


新建工程


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


2.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 网站上进行工程创建:


3.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中通过在项目构建时选择所需的依赖进行项目构建:


4.png


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


[3] start.aliyun.com

https://start.aliyun.com/


5.png


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


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


6.png


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


7.png


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


运行测试


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


小节


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


8.png


拥抱开源


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


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


9.png

未来展望


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


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


10.png

加入社区


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


12.png


点击进入 GitHub 链接: https://github.com/alibaba/cloud-native-app-initializer

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
监控 安全 Cloud Native
云原生开源沙龙北京站开启报名 | 微服务安全零信任架构
「微服务安全零信任架构」主题技术沙龙将于4月13日在北京阿里中心举行,欢迎报名!~
云原生开源沙龙北京站开启报名 | 微服务安全零信任架构
|
6月前
|
Prometheus Cloud Native 数据库
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
|
Cloud Native 开发者 Java
邀请函 | 云原生开源开发者沙龙「深圳站」
本次活动,我们将云栖大会上容器和微服务相关的精彩内容带到深圳,与您面对面交流,包括 Koordinator、Higress、eBPF 等开源项目,更有 Spring Boot 升级 Spring Cloud 最佳实践的分享。
3231 2
邀请函 | 云原生开源开发者沙龙「深圳站」
|
4月前
|
人工智能 Cloud Native API
Higress 重磅更新:AI 能力全面开源,云原生能力再升级
Higress 最新的 1.4 版本基于为通义千问,以及多家云上 AGI 厂商客户提供 AI 网关的积累沉淀,开源了大量 AI 原生的网关能力。同时也在 Ingress、可观测、流控等云原生能力上做了全方位升级。
21376 276
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
2月前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
3月前
|
运维 监控 Cloud Native
|
5月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
**阿里云发布开源版ALB控制器v1.2.0,对齐商业版ALB Ingress Controller v2.10.0。新版本增强了功能特性,提升了用户体验,并提供了最佳实践。功能更新包括自定义标签、QUIC协议支持、转发规则和安全策略等。此外,还引入了ReadinessGate实现滚动升级时的平滑上线和Prestop钩子确保平滑下线。用户可从GitHub获取开源代码,通过Docker Hub拉取镜像,开始使用alibaba-load-balancer-controller v1.2.0。**
277 3
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
|
6月前
|
自然语言处理 监控 Cloud Native
对话阿里云云原生产品负责人李国强:推进可观测产品与OpenTelemetry开源生态全面融合
阿里云宣布多款可观测产品全面升级,其中,应用实时监控服务 ARMS 在业内率先推进了与 OpenTelemetry 开源生态的全面融合,极大丰富了可观测的数据类型及规模,大幅增强了 ARMS 核心能力。本次阿里云 ARMS 产品全面升级的背景是什么?为什么会产生围绕 OpenTelemetry 进行产品演进的核心策略?在云原生、大模型等新型应用架构类型层出不穷的今天,又将如何为企业解决新的挑战?阿里云云原生应用平台产品负责人李国强接受采访解答了这些疑问,点击本文走进全新升级的阿里云可观测产品。
42027 13
|
6月前
|
Java Serverless Apache
9 个开源项目、25 个课题可选丨欢迎报名阿里云云原生开源之夏
2024 开源之夏,阿里云云原生应用平台团队开放了包括 Apache Dubbo/Apache RocketMQ/Apache Seata/Higress/iLogtail /Nacos/Sentinel/Spring Could Alibaba / Serverless Devs 在内,涉及微服务、消息、可观测、Serverless 4 大技术领域的 9 个开源项目。
1370 5