写点什么

Malagu:平台无关的开源 Serverless First 应用开发框架

  • 2021-09-22
  • 本文字数:3459 字

    阅读完需:约 11 分钟

Malagu:平台无关的开源Serverless First应用开发框架

什么是 Malagu


Malagu 是基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架,也是首款 Serverless First 应用开发框架。 使用同一套编程语言和 IoC 设计,用于开发前端、后端和前后端一体化应用。并且结合了 OOP(面向对象编程)、AOP(面向切面编程)等元素,借鉴了很多 Spring Boot 设计思想。


在后端,Malagu 抽象一套接口,方便适配任意的平台和基础框架,是一个平台或基础框架无关的上层框架。平台如阿里云函数计算、腾讯云云函数、AWS Lambda、Vercel 等,基础框架如 Express、Koa、Fastify 等。


在 Serverless 场景,Malagu 是以应用为单位开发项目,一个应用一般包含多个 API 接口。如果我们的应用很大,我们应该将大应用拆解成一个个小的微应用或者微服务。就像微服务架构的粒度拆分原则一样,合理的粒度拆分,对我们的应用管理是有很多好处的。框架会保证一个应用在一个函数中的运行性能。

开源项目与社区发展


截至 2021 年 9 月,Malagu 经历了三年的打磨和真实项目实践,陆续发布了 128 个版本。目前 Malagu 核心部分已经稳定,拥有 10 位左右的核心共建成员。在微信小程序、钉钉小程序、uniapp、门户网站、内容管理平台、云文档平台等场景都有真实项目成功落地。我们自己每天都在用 Malagu 开发真实业务项目。​


在社区发展过程中,被越来越多的开发者和云厂商的认可,陆续有 29 位开发者加入到我们的社区共建团队。在早期,阿里云 CRO 团队就采用了 Malagu 实现了内部的 CMS 平台,并成功上线了几十个 CMS 系统。后面主要有以下实际应用:


  1. 被阿里云开发者平台集成为多个场景解决方案;

  2. 被阿里云函数计算的 Serverless Devs 工具集成;

  3. 被腾云扣钉 Cloud Studio 内置到预置环境;

  4. 被腾讯云 Serverless 团队认可,并成为腾讯云函数首个合作的第三方开发框架


我们的愿景是做世界上最好用的 Serverless First 开发框架,我们也期待有更多的社区开发者参与进来。

Malagu 架构图



为什么需要 Malagu

坚信 Serverless 是未来

Serverless 是云计算新一代计算引擎,为取代传统云服务器架构而生。Serverless 核心理念是让开发者不用关心服务器的存在,专注于业务代码。

Serverless 现状如何


现在,所有云厂商和社区都在大力推广和布道 Serverless 理念,通过 Serverless 可以低成本高质量快速落地商业方案。目前,大家普遍认为 Serverless = FaaS + BaaS,未来也可能是其他的形态,不管形态如何变化,Serverless 的核心理念是不变的。所有 Serverless 的开发体验关键在 FaaS 的开发体验,而 FaaS 目前开发体验不是很理想,存在着很多的痛点。部分痛点短时间内在 FaaS 底层上可能难解决,部分痛点可能在工具、框架层面去解决更合理。比如冷启动、CICD、微服务、数据库访问、本地开发调试运行、平台不锁定等。未来,会有越来越多的 Serverless First 的开发框架框架出现,而不仅仅是资源编排运维工具,结合 Serverless First 开发框架提供更高级的 Serverless 开发平台或者低代码平台。

如何解决这些痛点


我们可以换一个思路,从开发框架层面尝试解决这些问题(事实证明,可以通过开发框架来解决这些问题)。那么,我们面临新的抉择是采用传统框架,还是需要一个全新的框架?如果选择做一个新框架,那么,我们是选择特定编程语言,还是通用编程语言?

为什么需要一个全新的框架

传统框架在开发体验上,大家肯定是接受的,毕竟已经使用了这么多年。但是传统框架开发的应用在迁移到 Serverless 环境时,往往会遇到各种各样难以解决的问题,这些问题往往是与框架底层设计密切相关。虽然我们可以通过框架扩展能力去解决或者缓解部分问题,实践下来的结果是框架改造门槛很高、效果不太理想、需要 Hack,不够优雅。当您在 Serverless 采用传统框架时,您往往会感觉虽然应用可以跑起来,但是真正应用到生产级别您会有顾虑。当然,随着 Serverless 平台底层技术的不断发展,传统框架在 Severless 场景上的处境也会有极大的改善。要想达到最佳状态,单方面的改变是不够的,需要框架也能合理去适配 Serverless 场景。就像前端 UI 框架需要 Mobile First,浏览器提供响应式支持,前端 UI 框架提供相关的适配。所有我们需要一个全新的、Serverless Fisrt 的开发框架。只有这样才能极大发挥 Serverless 优势,并让 Serverless 开发体验继承甚至超越传统开发体验。

为什么选择特定编程语言


目前,开源社区也存在不少语言无关的 Serverless 工具或框架,比如 Funcraft、Serverless Framework、Vercel 等等。这类通用语言型 Serverless 工具在运维层面确实可以做到不错的体验,也可以形成通用的标准。但是,在应用代码开发、调试、运行等开发体验上不那么理想。每种编程语言在开发、调试和运行等方面都有自己独特的地方,通用语言型 Serverless 工具很难做到统一的同时开发体验还能做到很好。只有选择特定的编程语言,才能让开发、调试和运行等方面的体验达到极致。

为什么选择 Typescript


Serverless 让后端开发门槛变得极低,前端开发者基于 Serverless 开发后端应用的学习成本也极低。未来越来越多的前端开发者成为全栈开发者。Typescript 既可以开发前端,又可以开发后端,对于前端或者全栈的开发者来说十分友好。


前端架构其实就是一种类 Serverless 架构,比如前端浏览器需要加载前端代码来执行,而 Serverless 场景也需要加载用户的代码来执行。因此,前端的很多解决方案天然适合 Serverless 场景,比如前端通过打包、压缩、Tree Shaking 来减少代码体积,减少代码部署和冷启动时间。同样,该优化方案也适用与 Serverless 场景,所以选择 Typescript,则相当于直接拥有了经过无数真实场景打磨的现成解决方案。


另外,Typescript 和 Java 很接近,Java 开发者也能很方便切换到 Typescript 技术栈。

Malagu 带来的价值


Malagu 是基于 TypeScript 的 Serverless First、可扩展和组件化的渐进式应用开发框架。Malagu 屏蔽掉不同 Serverless 平台底层细节和 Serverless 场景存在的大部分痛点。Malagu 基于真实业务场景打磨,提供生产级别可用的解决方案。提供多云解决方案,云厂商不锁定。​

如何使用 Malagu


Malagu 框架是由一系列组件组成,每一个组件其实就是一个 node 模块,根据您的业务场景选择合适的组件,您也可以基于组件机制开发属于自己的组件。为了快速开发,Malagu 提供了一个命令行工具,命令行工具内置不同场景的开箱即用的模板,通过命令行工具可以快速创建您的应用。首先,我们需要安装相关命令行工具:


$ npm install -g @malagu/cli  # 安装 Malagu 命令行工具$ malagu init project-name    # 使用命令行工具 malagu init 命令,选择一个模板,初始化一个模板应用$ cd project-name             # 进入到应用的根目录$ malagu serve                # 启动应用,默认端口为 3000
复制代码


打开浏览器并导航到 http://localhost:3000/

Malagu 与传统框架、Serverless Framework(sls) 比较

与传统开发框架比较


Malagu 是一个全栈应用开发框架,如果只看后端部分,Malagu 与 Spring Boot 是同一层次的东西,如果只看前端部分,Malagu 是 React、Vue 等前端框架之上的更上层的抽象,所以 Malagu 是前端框架无关的。Malagu 与传统框架比较,Malagu 提供了前后端渐进式一体化方案,在前后端之上做了一层抽象,让前后端在开发、测试、部署拥有一致的体验。传统框架一般不考虑应用部署环节,Malagu 借助 Serverless 技术优势,让部署环节变得流畅且低成本。


另外,Malagu 也是一个 Serverless 优先的框架,屏蔽了 Serverless 底层的细节,开箱即用。针对 Serverless 场景做了很多优化,如冷启动、数据库操作等等;同时,也提供了很多开箱即用的能力,比如安全、认证与授权、OAuth2.0、OIDC、数据库操作、缓存、前端框架集成、依赖注入、AOP、微服务等等。

与 Serverless Framework(sls) 比较


Malagu 重点还是在开发框架上。Malagu 与 sls 唯一有重叠的地方是 Malagu 基于自身的组件机制实现了一套平台无关的部署组件,该部署组件,目前只服务与 Malagu 自身,为 Malagu 提供极致的部署体验,零配置,一键部署。当然 Malagu 也可以很方便地使用 sls 部署。


sls 偏运维工具,侧重于对 Serverless 相关资源的编排。sls 提供 component 机制,方便不同的开发框架去集成 sls。

加入我们


Malagu 是 MIT 许可的开源项目。需要优秀人士的支持使它不断发展。如果您想加入我们,请联系我们,我们的邮箱是 kevin@cellbang.com


【编者按】

如果你有开源故事或对开源的深刻观点想要分享、或开源项目想要寻求报道,欢迎联系微信 caifangfang842852(请注明姓名和来由)。


2021-09-22 17:415519

评论

发布
暂无评论
发现更多内容

开发中遇到跨域我选择这么做

小鑫同学

前端 Node 10月月更

【kafka问题】记一次kafka消费者未接收到消息问题

石臻臻的杂货铺

Kafk 10月月更

Web3.0杂谈-#005(52/100)

hackstoic

元宇宙 Web3.0

Flash软件应用项目(二)

张立梵

设计师 Flash 10月月更

Python进阶(十八)Python3爬虫小试牛刀之爬取CSDN博客个人信息

No Silver Bullet

Python 数据分析 10月月更

10分钟了解sql注入--报错注入(二)

贤鱼很忙

sql 网络安全 10月月更

技术分享必备de终端录制神器

小鑫同学

前端 Node 10月月更

上手JavaScript基准测试

小鑫同学

前端 Node 10月月更

【玩转云函数】打通Github到企微的消息通知

小鑫同学

前端 Node 10月月更

Vue组件入门(四)组件注册

Augus

Vue 3 10月月更

Spring Boot「05」Annotations 02

Samson

Java Spring Boot 学习笔记 技术笔记 10月月更

转转推荐场景EE题解决思路

转转技术团队

深度学习 推荐系统

使用PlopJs让开发变得更高效

小鑫同学

前端 Node 10月月更

FinClip | 2022 年 9月产品更新放送

FinClip

零信任时代企业如何提升访问权限的安全?

FinClip

活跃开发者数量仅次于以太坊,波卡凭什么?

One Block Community

区块链 开发者 波卡生态

Rust编程语言中的定义类型

小鑫同学

前端 Node 10月月更

【分享】前端线上紧急排查工具

小鑫同学

前端 Node 10月月更

数据导出Excel实战

卢卡多多

Excel 数据导出 10月月更

电商秒杀系统设计

张立奎

开箱体验Rust,Come on!!!

小鑫同学

前端 Node 10月月更

桌面端开发(Tauri)开启第一篇

小鑫同学

前端 Node 10月月更

算法策略的主动选择,拒绝if...else...(策略模式+简单工厂模式)

小鑫同学

前端 Node 10月月更

从一个工程师成长看自动化运维的过程

阿泽🧸

自动化运维 10月月更

Python进阶(十六)正则表达式

No Silver Bullet

Python 正则表达式 10月月更

混合云中合规管理的思考

HummerCloud

云安全 混合云 安全合规检测 10月月更

H5加载Android本地路径图片

小鑫同学

前端 Node 10月月更

免杀实战之面向PHP的WebShell免杀

网络安全学海

网络安全 安全 信息安全 渗透测试 WEB安全

15分钟了解sql注入(一) union注入

贤鱼很忙

网络安全 Web SQL注入 10月月更

容器云PaaS平台建设中应关注的重点和难点

穿过生命散发芬芳

10月月更 容器云PaaS

35分钟了解sql注入-盲注(三)

贤鱼很忙

sql 网络安全 10月月更

Malagu:平台无关的开源Serverless First应用开发框架_架构_木香丘_InfoQ精选文章