BaaS & Headless CMS

Headless CMS

(m)BaaS

BaaS vs Headless CMS

  • 相同点
    • 都有数据结构建模(字段和关系)的过程,部分BaaS的底层数据库mongodb这种schemless的noSQL数据库,甚至不需要建模就可以直接使用(运行时自动生成字段)
  • 不同点
    • BaaS在产品的定位上更加底层,作为应用开发的服务端基础,给developr使用,因此底层的功能要多很多
    • headless cms的定位更上层,一般适用于blog类型的弱逻辑应用,在数据操作上没有过多的封装(联表查询之类的),给developer和editor使用,前者负责定义数据结构和写应用来消费数据,后者负责编辑和发布数据条目
    • ** 一种比较理想的架构是,以BaaS作为底层,基于在BaaS的数据层打造headless CMS,把headless CMS看成是一种普通的应用

BaaS vs 目前的开发方式

  • 目前的开发方式
    • 运维
      • ec2,应用服务器
      • elb,负载均衡
      • rds,数据库
      • s3,文件存储
      • ses,邮件服务
      • sns,推送
      • sms,短信
      • redis,缓存
      • elasticsearch,搜索
    • 开发
      • 使用orm或者原生sql,来curd数据
      • 使用aws sdk,来调用aws的服务(s3、sns、ses)
      • 如果是用laravel这种大而全的框架,auth、acl等高频服务可以用插件的方式安装使用
      • 如果是node.js的框架,auth、acl、notification这类高频服务目前还没有,需要我们自己封装
        • 梳理服务需求
          • 把相关的一些saas(例如auth0)或者产品都review一遍
        • 设计数据库结构
        • 把代码组织成可快速复用的形式
          • 能跑通的样板代码,具体开发时根据用的框架和包进行改写
          • (统一)开发框架中的插件
          • (无语言依赖,无框架依赖,可独立部署)微服务或serverless function
          • (无语言依赖,无框架依赖,可独立部署)微服务的集合,类似于一个小的baas,不过只有service
  • 使用开源的BaaS(Parse)
    • 运维
      • 同上
      • parse的服务需要部署,可以和应用服务一起部署
    • 开发
      • 使用parse提供的sdk,来curd数据
      • 使用parse提供的sdk,来调用服务
  • 使用商用收费的BaaS(大概率不会使用)
    • 运维
      • ec2,应用服务器
      • elb,负载均衡
      • 在BaaS上创建应用
    • 开发
      • 使用baas提供的sdk,来curd数据
      • 使用bass提供的sdk,来调用服务
  • 使用BaaS和目前的开发方式相比
    • 优点
      • baas的数据方案,节省了一些数据的选型和设计的时间
        • relation data
        • realtime data event
      • * 部分高频service的封装,省去了开发维护的时间
        • auth
        • acl
        • notification
        • chat
      • 一些额外功能的集合(但这些功能对于我们目前来说使用频率比较低,或者可以用别的方式来实现)
        • serverless function
        • config
        • firebase在app和ml的功能
      • 如果使用的是商用的baas,节省了初始化运维和后续运维的时间
    • 缺点
      • * 数据部分和使用db原生方案相比,可能没有那么灵活和强大
        • 事务、存储过程等一些特性
        • sql table join的便捷性
        • 性能优化
        • 字段约束
        • 数据库orm和框架打通
      • * 需要额外学习一整套sdk和api,有一定上手成本
        • 最常用是DB存储的sdk,和原生的db相比也只是sdk不同而已,如果把orm用熟了,使用哪个写差别并不大
        • 对于一些高频service的封装,可以自己整理好设计和需求后,自定义实现,或者找更好的方案,直接用parse的不一定好用或扩展性强;用parse的好处可能是免去了自己调研和设计这部分需求的时间
      • 对于开发者来说是一个黑盒,出现问题难以debug
        • 如果使用开源方案(parse),需要专门有人维护平台本身代码
        • 如果使用商用方案,遇到问题提工单,以及后续项目废弃的问题,存在风险
      • 定制化开发或扩展成本,主要依赖平台的支持程度
      • 增加应用的架构、部署、性能的复杂程度

Gig后续的发展

  • 开发到目前为止,主要的功能为cms + search的数据管理工具,同时也沉淀了一套应用使用pg和es的最佳实践
  • 如果继续往上层产品做,可能会是一个headless cms(search),但是headless cms的一个问题是使用场景的局限性,平台无法承载过多的自定义逻辑
  • 如果继续往底层产品做,就是往BaaS的方向,把后续应用的存储管理(database、file、cache)和高频服务(auth、acl、notification)全部接走
    • 先试用baas(parse)来开发应用,review一下这种开发模式是否合适
    • 如果觉得baas这种模式合理,直接基于parse来做gig(headless cms + search)
      • gig目前的curd api设计,和传统sql开发相比,性能和使用的有效性上差别都比较明显,无法直接使用
      • 封装出parse级别的查询是比较麻烦的,还不如直接就用parse来做

results matching ""

    No results matching ""