Midway Serverless 发布 v1.1,支持传统应用一步上云
发布于 4 年前 作者 czy88840616 3856 次浏览 来自 分享

Midway Serverless v1.0 发布之后,有不少同学来试用,提建议,感谢大家。

Github: https://github.com/midwayjs/midway, 开源为了前端和 Node.js 的发展,走过路过麻烦到 Github 点 Star!

Midway Serverless 在函数开发的部分提供了 一层特殊的防腐层,能让同样的代码,在不同的平台运行,即所谓的运行时适配。而如今,这层适配器不仅仅开发给函数,也开放给传统数以万计的应用,让它们能够快速的迁移到现有的云平台,享受弹性容器的红利。

具体的防腐层设计,我们将在后面的文章详述,现在来看看这个功能如何使用。

使用举例

我们拿传统的 EggJS 应用举例。

整个传统应用迁移的部分和 Midway Serverless 的函数部分使用的基本模式相同,在项目根目录添加一个 f.yml 文件,即可使用 f deploy 发布。

service: my-egg-demo  ## 应用发布到云平台的名字

provider:
  name: aliyun        ## 发布的云平台,aliyun,tencent 等

deployType: egg       ## 部署的应用类型

整个过程相对比较简单,底层使用的运行时适配和函数是一致的,也达到了一套代码适配多平台的目的。

和平台的迁移方案的区别

Midway Serverless 从 v1.1 版本开始提供了一套应用迁移到  Serverless 容器的方案,而各个平台也已经有自己的方案,比如阿里云的 customRuntime 接入方案,以及腾讯云的各种 Component 组件。 这其中的区别有几个:

  • 1、Midway Serverless 提供的平台迁移方案和函数部分相同,是跨平台的,即方案不受限于阿里云或者其他云平台,代码和应用时期一致,不需要(或者很少)做修改
  • 2、复用函数的运行时适配能力,可以和函数享受同样稳定的能力,这套适配能力由 Midway Serverless 本身提供,代码开源,也方便排查和定位问题,或者增强能力
  • 3、Midway Serverless 这套能力比较通用,私有化部署或者 适配其他应用框架非常容易

Midway Serverless 运行时提供了通用的生命周期,社区的大部分平台我们都会做一层防腐适配,同时这套运行时方案也适合于不同公司的私有化平台,给内部应用使用提供了便利。

上周 7.25 我们在上海阿里云 Serverless 云开发 Workshop 上做了这层运行时防腐层的分享,后续也将提供文字版,欢迎关注。

一些能力限制

Midway Serverless 提供了简单的方案,能够将现有的应用迁移到各家云平台,但是本身还是有一些限制和注意事项,我们列举如下。

  • 1、平台网关的限制,比如阿里云和腾讯云网关,超时时间,POST 大小、文件上传等,和函数是一样的,即函数不能做的事情,在这套应用部署方案中依旧不能做
  • 2、应用的包部署不宜过大,如果比较大,可以使用云平台的对应方案来解决,比如阿里云的 NAS,或是腾讯云/AWS 的 Layer
  • 3、应用在函数容器中的带状态的部分,由应用本身处理,这套方案不负责解决这个问题
  • 4、应用在函数容器中部署模型为 单进程,稳定性由弹性容器本身来解决
  • 5、应用中有 long runing 或者定时任务的部分,在无流量情况下不会触发,请使用其他方案代替。
  • 6、应用中 socket 等非 HTTP 协议,不会生效

最后

函数体系发布之后,我们将依旧回归的到应用本身,去思考如何让函数和应用结合到一起,让应用和函数在不同场景下能够发挥各自最大的作用,

4 回复

你们现在的部署方案是 用一个函数做入口,然后路由分发吧. 但是这样每次运行消耗的资源内存都比较大. 能不能根据路由来 按需引用,然后 自动配置函数呢? 这样一个路由对应一个函数,资源和效率都可以优化.

@abiuDoIT v1.1的传统应用整个迁移是这样的没错,而如果是v1.0函数开发,非聚合形态下,是单个路由单个函数执行的

“非聚合形态下,是单个路由单个函数执行”

这个是 egg 默认加载了所有的 loadUnit,然后只开放的某个路由的方式么?

@y5ma 不是的,纯函数跟egg关系不大,是 midway自己生成了路由,通过ioc动态调用到某个函数。

回到顶部