Kairbon'Blog.

未来Faas的思考

字数统计: 399阅读时长: 1 min
2021/10/14

现状简介

现代Faas

以阿里云的FC举例,业务在使用JAVA语言时,时常遇到一个问题,就是每个函数都需要一个独立的容器(docker)启动,有时候我们会将函数的粒度拆分的比较小。比如一个报表业务系统中,有三四十个QPS不到1的函数,这种情况会对FC的资源利用率造成比较大的挑战。

问题

  1. Java Runtime 资源利用率高,同一个项目,每个函数都占用一个docker,浪费大。
  2. 在优化资源利用率和性能的前提下如何保证安全性:一个函数的异常不影响其他函数的运行。

Java Runtime

目前基于二方包+冷启动的方式。启动慢,资源利用率低(一个函数对应一个jar包,一个jar包对应一个continer(docker))。需要升级。

升级需求(已有中间件能够支持的不考虑):

  1. 调度粒度更细(单continer内部多JAVA Func)
  2. 支持调度-将调度的过程拆分。 A进程将bundleA 终止,卸载。 B进程将bundleA拉取,启动。通过中心化的调度管理中心统一调度。
  3. 监控
  4. JVM内部管理

方式一:JAVA单进程运行时加载+完善的函数生命周期。

核心:指定classloader。

OSGI思想

Karaf:https://karaf.apache.org/manual/latest/#_prerequisites

karaf-docker run 命令记录 使用的是apache的官方docker镜像

1
docker run -p 80:8090 -v /Users/kaiwang/karaf/deploy:/opt/apache-karaf/deplo apache/karaf
NBF: https://blog.csdn.net/yunqiinsight/article/details/100976310

方式二:JVM多租户(JVM级别优化)

方式三:多JVM – 性能

CATALOG
  1. 1. 现状简介
  2. 2. 问题
  3. 3. Java Runtime
    1. 3.1. 方式一:JAVA单进程运行时加载+完善的函数生命周期。
      1. 3.1.1. OSGI思想
        1. 3.1.1.1. Karaf:https://karaf.apache.org/manual/latest/#_prerequisites
        2. 3.1.1.2. NBF: https://blog.csdn.net/yunqiinsight/article/details/100976310
    2. 3.2. 方式二:JVM多租户(JVM级别优化)
    3. 3.3. 方式三:多JVM – 性能