OpenFaaS 实战之五:大话 watchdog,MySQL 高可用之主备同步
这里分类和汇总了欣宸的全部原创(含配套源码):[https://github.com/zq2599/blog_demos](
)
[](
)OpenFaaS 实战系列文章链接
[部署](
)
[函数入门](
)
[Java 函数](
)
[模板操作(template)](
)
[大话 watchdog](
)
[of-watchdog(为性能而生)](
)
[java11 模板解析](
)
[自制模板(maven+jdk8)](
)
[终篇,自制模板(springboot+maven+jdk8)](
)
[](
)本篇概览
作为《OpenFaaS 实战》系列的第五篇,咱们需要一起面对 OpenFaaS 的关键技术:Watchdog,不了解它后面就没法继续了;
标题为大话 watchdog 说明本文以理论为主,这也是作者的弱项,但我会努力把关键点说得简洁明白,如果您发现问题请务必及时指出,谢谢!
整篇文章由以下段落构成:
从 faas-netes 谈起
OpenFaaS 的资源
watchdog 分析
小结
java 程序员的担忧
接下来一同开启这段旅程吧,OpenFaaS 开发之路上最重要的一站!
[](
)从 faas-netes 谈起
先看 Kubernetes 下 OpenFaaS 的整体架构,如下图,外部请求由 Gateway 转发到 faas-netes 组件:
再来看官方描述,如下图红框,在 K8S 环境,faas-netes 就是服务提供者,它提供的服务支持 REST API、客户端、WEB 等多种对接方式,另外,还可以用 kubectl 命令对其进行管理,实现 K8S 的 operator 模式(关于 K8S 的 operator,可以先学习 Controller,再想象着高度定制 CDR 和 Controller 就可以了):
虽然 faas-netes 很强大,但是在本文咱们只要关注一点:faas-netes 提供了函数服务,也就是说,咱们前面写过的 python、java 的 Hello world 函数,都和 faas-netes 有关;
说了一大堆,主角 watchdog 还不出来?再等等,因为此刻大家都有同样的疑问:我不就是写了个 python 脚本吗,里面只有个 Hello world 方法,怎么就成了 faas-netes 对外提供的函数了呢?
对上面的疑问,官方内部架构图应该是最合理的答案,如下图,API Gateway 的请求会到达 faas-provider 的 8080 端口,如果是调用已经发布的函数,就在左上角的红框内处理,如果是对资源的增删改查,就交给右下角的绿框处理:
[](
)OpenFaaS 的资源
刚才提到了上图右下角的绿框,其责任是处理资源,这不是本文的重点,但作者好歹算是 Kubernetes 爱好者,觉得有必要科(xuan)普(yao)一下资源相关的知识点:
在 K8S 中,Pod、Deployment、Service 都是资源,也有对应的 Controller 根据 etcd 中保存的期望状态来调节和控制这些资源;
对 K8S 环境的 OpenFaaS 来说,它也有自己定义的资源类型(第一篇《安装》里面提到过 yaml 文件夹,那里面有个 crd.yml 文件,记录了 OpenFaaS 的资源定义);
OpenFaaS 怎么控制自己的资源呢?faas-netes 提供 CRUD 接口给外面调用,而这些接口的内部实现,就是上面图中你们看到的绿框了,显然,经典的 K8S Controller 模式不能满足 OpenFaaS 对资源控制的需求,于是就采用了目前流行的 Operator 模式:更复杂的资源定义、更复杂的资源控制逻辑
至于 OpenFaaS 的资源具体有哪些,那要详细去看 crd.yml 文件,以及 OpenFaaS Operator 的代码了,不过上图还是给我们指明了方向:Secret、Deployment、Service,想想也是如此,咱们把业务功能发布到 OpenFaaS,最关注的不就是安全(Secret)、部署配置(Deployment)、对外暴露(Service)这些东西嘛;
经过欣宸的一番梳(chui)理(niu),现在对 faas-netes 的了解是否更进一步了呢?函数的发布、后期的资源控制和调节,都是 faas-netes 的 Operator 在负责,接下来是不是该回到正题了:函数调用
主角 watchdog 已经哭晕了吧…
[](
)watchdog 分析
还是前面那幅图,咱们聚焦右上角那部分,我把它截出来如下图所示:
如果咱们用 nodejs 模板开发函数,写了个 index.js 文件,那么响应外部请求时会走到下图红框位置,进入 Watchdog 的 8080 端口,此时 Watchdog 会新建 node 进程,该进程执行 index.js 文件:
上面说得不够清楚么?那就再详细一些,咱们开发函数时会做成 docker 镜像,这个镜像里有些啥?再来一副官方图如下,真相大白:镜像里有个 Watchdog,监听 8080 端口,收到请求后 fork 一个进程,通过 stdin 把请求参数传给这个进程,进程调用咱们自己写的函数方法,并且把参数传给此方法,等方法执行完毕后,返回值通过 stdout 给到 Watchdog
现在,相信您在写完一个函数后,对于外部请求如何调用到您写的那段代码应该了然于胸,但是,依然有个小小的盲点:我知道了 Watchdog 能干啥,但是 Watchdog 具体是个啥?咋就进了
docker 镜像呢?
上述问题,在模板的 Dockerfile 文件中可以找到答案(Dockerfile 是制作 docker 镜像的脚本文件),咱们打开 node 模板的 Dockerfile 看看;
如下,一开始就从基础镜像 openfaas/classic-watchdog:0.18.18 里把文件 fwatchdog 复制过来了:
FROM --platform=${TARGETPLATFORM:-linux/amd64} openfaas/classic-watchdog:0.18.18 as watchdog
评论