背景故事

为什么要创建 FaasJS?

FaasJS 要解决什么问题?

自从 AWS Lambda 带来了 Serverless 热潮后,不少公司和个人都尝试了 FaaS 服务,并欣喜于其轻量和易于上手的特点。

但当使用 FaaS 服务来开发企业级应用时,却遇到了缺乏框架、工具和实践指导的问题。

所以我打算将我在简单心理实践 FasS 的经验总结和优化,做成一套简单易上手的 FasS 的框架。

FaasJS 将如何解决问题?

以下是我在实践过程中遇到的主要问题及解决办法:

函数随着数量增多而越来越难以管理

通过对函数名设定命名规则,以多个层级的命名空间来管理函数,并明确每个函数的作用。

函数之间互相调用导致出故障时难以追查

  1. 在业务流程的起始点设置追踪 ID,并继承和贯穿整个业务流程,以这种方式来查找日志并追查故障;
  2. 使用框架来自动分析所有函数之间的调用关系,直观展示调用流程。

碎片化的函数难以开发和扩展

通过使用框架来提供单体应用式的开发体验。

为什么面向业务流程?

大部分情况下,业务人员的沟通用的是面向过程的表达方式,比如第一步做什么,第二步做什么等等。

而传统的技术框架,特别是 MVC 框架,用的是面向对象的表达方式。当翻译业务语言时,需要先构建抽象的对象,然后再构建该对象的行为。当流程复杂时,需要创建一系列的对象和行为。在一个高内聚的复杂应用内,这种抽象形式的确可以大幅简化开发和管理的难度。

但 FaaS 提供了完全解耦和独立的函数,使得我们可以以更贴近真实业务和人员结构的表达形式来组织代码。

为什么选择 Serverless?

什么是 Serverless?

FasS 示意图

如上图所示,Serverless 是指由服务商来完全托管服务底层的服务,托管对象可以是函数或者应用。

FaaS(Function as a Service)是专指 Serverless 服务中的函数服务,开发者上传函数后,由服务商来负责按需执行和横向扩容等事情。

当托管对象为应用时,我们一般称为 PaaS(Platform as a Service)。

Serverless 的优势

  • 专注业务逻辑,由服务商全权托管底层和运维
  • 自动伸缩,按使用量计费,节约成本

为什么选择 FaaS 而不是 PaaS ?

  • PaaS 的应用通常基于各类 MVC 框架,有一定的学习成本和使用门槛
  • PaaS 无法避开随着应用复杂度的提升,导致扩展成本急剧升高的问题
  • FaaS 由于粒度细化到 Function 层级,重构时可以轻易找到最小切入点,进行低成本重构
  • FaaS 的函数互相之间独立运行,极大的降低了单点故障的影响范围
  • FaaS 可以提供更细粒度的自动伸缩和成本优化,并直观体现业务的使用频率等运营数据
  • FaaS 可以极大降低多人同时开发一个应用时导致的代码冲突

为什么选择 Node.js ?

什么是 Node.js ?

Node.js 是一个能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。

Node.js 的优势

  • JavaScript 是一个通行于前后端的编程语言,且易于上手
  • Node.js 的插件管理工具 npm 已有近百万插件,易于使用和开发

为什么选择 TypeScript ?

什么是 TypeScript ?

TypeScript 是 JavaScript 的一个严格超集,并添加了可选的静态类型和基于类的面向对象编程。

Typescript 的优势

  • 弥补 JavaScript 的缺陷
  • 提升代码质量
  • 开发时可以享有更好的代码提示及类型检查