如果是创业团队,我会推荐两个服务端框架:

这两个框架的优势就一个字:快。

在创业公司,你需要快速、低成本的实现产品,验证想法,一个产品从设计到研发上线,再到产品运营,需要做的事情有模式可寻,当产品UI出来之后,接下来技术团队要做的无非就是这么几件事:

  1. 数据库表结构设计
  2. 业务逻辑设计及实现(CRUD)
  3. 常用服务(用户、支付)
  4. HTTP接口设计及实现
  5. 前端页面开发及接口联调
  6. 产品运营管理后台设计及开发

经历的项目多了之后,总结这些事情中只有5比较难标准化,其他1、2、3、4、6看起来不同的项目都大同小异,凭我多年工作经验形成的直觉,这样的需求应该对应存在一个比egg.js之类框架功能丰富一些、自带标准化设计模式(设计好DB会生成对应的model、service甚至API)、自带权限管理、自带运营所需的数据管理后台的后端框架,开发者使用的时候只要在这个框架上继续定制不同项目所需的业务逻辑就好了。

框架本身像是一个CMS(我觉得应该叫DMS,数据管理系统),但跟传统的CMS不同,Headless CMS关注的是数据到API的标准化过程,没有传统CMS系统的view层,是一个干干净净的数据&API管理框架

有了这个概念之后,顺理成章找到Node.js下的一个不错的Headless CMS框架,就是http://strapi.io,有兴趣的同学可以花10来分钟尝试一下它的quickstart,看看是不是很容易快速构造一个轻量的产品后端,尤其是用过egg.js的同学,上手应该会更快。

我在19年去深圳某前端大会分享过这个框架,找到了2年前录制的一段使用strapi定制数据产生API的过程,可以作为一个参考,视频中简单演示了定制一个数据对象,并产生对应的API的过程

常见的互联网项目用strapi搭出早期的架子基本够用了,我最看中的是strapi自带的管理后台,产品上线之后运营起来很方便。运营后台这种东西在项目的早期还真不能少,不然稍微改动一些就得操作数据库或者改代码发版,效率大打折扣。而管理后台往往开发工作量很大,但又没有多少技术价值,我是一点也不想让团队在这上面浪费时间,strapi很好的解决了我的这个痛点,虽然这个后台有点简陋,但毕竟是给内部运营同学使用的,功能满足就行。

再来聊聊另外一个框架,moleculer。

相比strapi,moleculer是一个更纯粹的框架,主要解决的是Node.js的微服务开发&部署问题。strapi能很好的解决基于HTTP的业务开发,但是当你的项目需要分布式部署、服务拆分、集群运行的时候,strapi就没那么好解决了,这种情况下我会用到moleculer。

举个例子,我们之前做了一款产品,需要调用服务端浏览器渲染一段css实现的动画并渲染生成视频。这样的服务你就不方便用HTTP来请求生成,每次请求都要在服务端启动浏览器进程,渲染页面,再关掉浏览器回收系统资源,性能很差,资源利用率不高,非常的不银杏。这种场景下就可以考虑用moleculer,做多机器集群式部署,通过一个网关服务把请求调度到不同的机器上执行渲染,资源利用很灵活,利用率很高。

这个业务里我们甚至把strapi也注册为一个moleculer的服务,把业务所需的HTTP接口和服务调度需要的接口混合部署,外部看来就是一个完整的服务整体。

互联网产品,抽象来看,无非就是用户通过前端UI(网页、APP、小程序、桌面软件等等)发送请求,经过API处理调用到产品的核心服务的过程。我现在把strapi定位于实现上图中蓝色的部分,大公司里所谓的业务中台部分。各个产品这里的逻辑都很类似,可以被标准化、模块化甚至模式化。而核心服务我会考虑用moleculer来构建,实现可伸缩、高可用。用户通过strapi的接口,经由权限控制判断,再由moleculer的服务调用机制访问到部署在集群上的业务核心服务,形成一套小型的大厂架构设计。

这些后端架构设计模式大厂其实都有很完整的解决方案,不过大厂的方案往往不能直接搬到到小公司来应用,从头开发成本又相当重,可能业务还没怎么搞,经费就燃烧殆尽了。今天分享的这两个框架,我觉得就是乞丐版的业务中台和微服务框架,大厂的同学可以绕过,学了用不上,小厂的同学可以了解一下。

诚然,这两个框架都有一些坑。比如strapi,高度标准化往往意味着失去了一些可定制空间,甚至要牺牲一些运行时性能。对于刚接触的人甚至可能会吐槽strapi的封装限制了想象力,这种情况下我得到觉得应该多深入strapi的源码,顺应它的设计来实现自己的功能,就好像刚刚接触MVVM的DOM流老同志,还想一上头就用DOM撸,而不是注重数据驱动视图,肯定会头大。moleculer的问题是目前还不是正式版,更新的频率也不高,真有点担心社区凉凉。不过这两个产品解决的问题在我看来还是比较准的,至少对于创业公司来说,有较高的实用价值。平衡成本和收益,我愿称它俩为Node.js界的卧龙凤雏。

最后的最后,祭出这张图: