写点什么

OpenFaaS 实战之五:大话 watchdog,MySQL 高可用之主备同步

用户头像
极客good
关注
发布于: 刚刚

这里分类和汇总了欣宸的全部原创(含配套源码):[https://github.com/zq2599/blog_demos](


)

[](

)OpenFaaS 实战系列文章链接


  1. [部署](


)


  1. [函数入门](


)


  1. [Java 函数](


)


  1. [模板操作(template)](


)


  1. [大话 watchdog](


)


  1. [of-watchdog(为性能而生)](


)


  1. [java11 模板解析](


)


  1. [自制模板(maven+jdk8)](


)


  1. [终篇,自制模板(springboot+maven+jdk8)](


)

[](

)本篇概览


  • 作为《OpenFaaS 实战》系列的第五篇,咱们需要一起面对 OpenFaaS 的关键技术:Watchdog,不了解它后面就没法继续了;

  • 标题为大话 watchdog 说明本文以理论为主,这也是作者的弱项,但我会努力把关键点说得简洁明白,如果您发现问题请务必及时指出,谢谢!

  • 整篇文章由以下段落构成:


  1. 从 faas-netes 谈起

  2. OpenFaaS 的资源

  3. watchdog 分析

  4. 小结

  5. java 程序员的担忧


接下来一同开启这段旅程吧,OpenFaaS 开发之路上最重要的一站!

[](

)从 faas-netes 谈起


  1. 先看 Kubernetes 下 OpenFaaS 的整体架构,如下图,外部请求由 Gateway 转发到 faas-netes 组件:



  1. 再来看官方描述,如下图红框,在 K8S 环境,faas-netes 就是服务提供者,它提供的服务支持 REST API、客户端、WEB 等多种对接方式,另外,还可以用 kubectl 命令对其进行管理,实现 K8S 的 operator 模式(关于 K8S 的 operator,可以先学习 Controller,再想象着高度定制 CDR 和 Controller 就可以了):



  1. 虽然 faas-netes 很强大,但是在本文咱们只要关注一点:faas-netes 提供了函数服务,也就是说,咱们前面写过的 python、java 的 Hello world 函数,都和 faas-netes 有关;

  2. 说了一大堆,主角 watchdog 还不出来?再等等,因为此刻大家都有同样的疑问:我不就是写了个 python 脚本吗,里面只有个 Hello world 方法,怎么就成了 faas-netes 对外提供的函数了呢?

  3. 对上面的疑问,官方内部架构图应该是最合理的答案,如下图,API Gateway 的请求会到达 faas-provider 的 8080 端口,如果是调用已经发布的函数,就在左上角的红框内处理,如果是对资源的增删改查,就交给右下角的绿框处理:


[](

)OpenFaaS 的资源


刚才提到了上图右下角的绿框,其责任是处理资源,这不是本文的重点,但作者好歹算是 Kubernetes 爱好者,觉得有必要科(xuan)普(yao)一下资源相关的知识点:


  1. 在 K8S 中,Pod、Deployment、Service 都是资源,也有对应的 Controller 根据 etcd 中保存的期望状态来调节和控制这些资源;

  2. 对 K8S 环境的 OpenFaaS 来说,它也有自己定义的资源类型(第一篇《安装》里面提到过 yaml 文件夹,那里面有个 crd.yml 文件,记录了 OpenFaaS 的资源定义);

  3. OpenFaaS 怎么控制自己的资源呢?faas-netes 提供 CRUD 接口给外面调用,而这些接口的内部实现,就是上面图中你们看到的绿框了,显然,经典的 K8S Controller 模式不能满足 OpenFaaS 对资源控制的需求,于是就采用了目前流行的 Operator 模式:更复杂的资源定义、更复杂的资源控制逻辑

  4. 至于 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 具体是个啥?咋就进了


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


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

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
OpenFaaS实战之五:大话watchdog,MySQL高可用之主备同步