一个无服务架构后端支撑设想

简介

它是 Servlerless 架构的后端支撑,是 Faas 的基础实践,可以将一个几行的代码段直接对外发布。

它特别适合简单业务,轻后台应用,在小需求开发的过程中可以让开发更注重逻辑而不是资源申请或者项目搭建。

它无需开发维护申请机器申请运行环境,并且可以实现自动缩放,按需分配

基本概念

服务

一个业务就是一个服务,一个项目就是一个服务,服务之间可以申请互相调用。

  • 基本的服务,包括通用的用户管理、权限管理等模块
  • 工具类的服务应该包括 seq、cache、db、log 等基础存储模块

函数

一个服务可以任意申请函数,服务内函数不重名,函数是一段代码,可以对数据进行增删改查

  • java 这个是肯定可以支持的,一段样例代码可能是这样的
public List<User> userList(int page, int size) {
    log.info("总共访问次数:" + seq.incr("userList"));
    List<Long> userIds = db.table("contacts").page(page).size(size).all();
    List<User> result = new ArrayList<User>();
    for(Long userId : userIds)
        result.add(umc.get(userId));
    return result;
}
  • 其它语言,考虑支持 groovy 和 js,因为脚本语言相对开发便捷,单看 groovy 原生支持 jre,FE 原生会 js

插件

各项目可添加插件实现扩展功能,如 jdbc 插件等,添加的插件可以在函数中任意调用

这算是一个扩展点,有插件制度就可以具备无限的可能性

极端情况可以添加一个 war 包插件,这样就是一个部署平台了;添加一个 cron 插件就是定时任务调度平台

网关

函数需要发布到网关才能对外提供服务,网关应该主要就是 web,有其它需求也可以添加支持

  • http 默认发布到 http 网关,http://lambda.host/服务/函数 即为发布地址
  • jsonp 同步支持,加 callback 参数直接返回 jsonp

其它功能

知识中心

由于系统里对外提供服务的都是函数,所以根据函数是很容易反向生成在线文档的,是否对外发布或者是否要求注释格式可以待定

版本控制

函数可以建任意版本,活动版本仅有一个,版本的流程包括线下线上,每个版本的开始状态为上个版本的结束状态,为了安全线上版本应该不允许修改,只允许建新版本替换

All Done !

核心应该在混编中心,它需要按照配置中心,按版本找出函数代码,找出服务依赖,将依赖关系和函数代码生成源码文件后执行编译执行,最后返回执行结果,依赖关系在生成的源文件里应该就是个 import 的过程

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注