最佳实践

框架介绍

最近更新时间:2021-09-27 15:59:43

说明:

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,不够优雅。
当您在 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 提供了一个命令行工具,命令行工具内置不同场景的开箱即用的模板,通过命令行工具可以快速创建您的应用。

  1. 执行以下命令安装相关命令行工具。
    $ npm install -g @malagu/cli  # 安装 Malagu 命令行工具
    $ malagu init project-name    # 使用命令行工具 malagu init 命令,选择一个模板,初始化一个模板应用
    $ cd project-name             # 进入到应用的根目录
    $ malagu serve                # 启动应用,默认端口为 3000
  2. 打开浏览器访问 http://localhost:3000/
目录