有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
说明
Malagu 为第三方开发工具,暂时无法提供腾讯云官方支持,如有任何问题或反馈,欢迎访问 Malagu 社区,以 issue 方式进行讨论或社区共建。

什么是 Malagu?

Malagu 是基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架,又称为 M 框架。使用同一套编程语言和 IoC 设计,用于开发前端、后端和前后端一体化应用。并且结合了 OOP(面向对象编程)、AOP(面向切面编程)等元素,借鉴了很多 Spring Boot 设计思想。
在后端,Malagu 抽象一套接口,方便适配任意的平台和基础框架,是一个平台或基础框架无关的上层框架。平台有腾讯云云函数、AWS Lambda、Vercel 等,基础框架有 Express、Koa、Fastify 等。
在 Serverless 场景,Malagu 是以应用为单位开发项目,一个应用一般包含多个 API 接口。如果应用很大,应该将大应用拆解成一个个小的微应用或者微服务。如同微服务架构的粒度拆分原则一样,合理的粒度拆分,能够更好的管理应用。框架会保证一个应用在一个函数中的运行性能。
了解更多请参见 Malagu 官方文档

Malagu 架构图





为什么需要 Malagu

坚信 Serverless 是未来

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

Serverless 现状

目前,所有云厂商和社区都在大力推广和布道 Serverless 理念,通过 Serverless 可以低成本高质量快速落地商业方案。业内普遍认为 Serverless = FaaS + BaaS,未来也可能是其他的形态,不管形态如何变化,Serverless 核心理念不变。Serverless 的开发体验关键在 FaaS 的开发体验,而 FaaS 目前开发体验不是很理想,存在着很多痛点。部分痛点短时间内在 FaaS 底层上可能难于解决,部分痛点可能在工具、框架层面去解决更合理。例如冷启动、CICD、微服务、数据库访问、本地开发调试运行、平台不锁定等。未来,会有越来越多的 Serverless First 的开发框架出现,而不仅仅是资源编排运维工具,结合 Serverless First 开发框架提供更高级的 Serverless 开发平台或者低代码平台。
如何解决这些痛点?
我们可以换一个思路,从开发框架层面尝试解决这些问题(事实证明,可以通过开发框架来解决这些问题)。那么,面临新的抉择是采用传统框架,还是需要一个全新的框架?如果选择做一个新框架,那么是选择特定编程语言,还是通用编程语言?

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

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

为什么选择特定编程语言

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

为什么选择 Typescript

Serverless 让后端开发门槛变得极低,前端开发者基于 Serverless 开发后端应用的学习成本也极低。未来越来越多的前端开发者成为全栈开发者。Typescript 既可以开发前端,又可以开发后端,对于前端或者全栈开发者来说十分友好。
前端架构是一种类 Serverless 架构,例如,前端浏览器需要加载前端代码来执行,而 Serverless 场景也需要加载用户的代码来执行。因此前端的很多解决方案天然适合 Serverless 场景,例如,前端通过打包、压缩、Tree Shaking 来减少代码体积,减少代码部署和冷启动时间。同样,该优化方案也适用与 Serverless 场景,所以选择 Typescript,则相当于直接拥有了经过无数真实场景打磨的现成解决方案。n另外,Typescript 和 Java 很接近,Java 开发者也能很方便切换到 Typescript 技术栈。

Malagu 带来的价值

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

如何使用 Malagu

Malagu 框架由一系列组件组成,每一个组件为一个 node 模块,根据您的业务场景选择合适的组件,您也可以基于组件机制开发属于自己的组件。为了快速开发,Malagu 提供了一个命令行工具,命令行工具内置不同场景的开箱即用的模板,通过命令行工具可以快速创建您的应用。
1. 执行以下命令安装命令行工具。
npm install -g @malagu/cli
2. 初始化一个项目。
malagu init project-name
cd project-name # 进入项目根目录
3. 本地运行测试。
malagu serve # 启动应用,默认端口为 3000
4. 打开浏览器访问 http://localhost:3000/