写点什么

OpenFaaS 实战之六:of-watchdog(为性能而生)(1)

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1678 字

    阅读完需:约 6 分钟

  • 前文的文末也剧透过,上述性能问题已被解决,而具体的解决方式就是本文的主要内容:of-watchdog;

上古秘籍的启示

2020 年 3 月出版的《深入浅出 Serverless》一书中,陈耿老师提到为了优化 watchdog 性能,OpenFasS 正在孵化一个全新的 watchdog 实现:of-watchdog,如下图:


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


要过于乐观


  • 目前官方对 of-watchdog 的态度,是乐观又小心谨慎,因此,要提前把风险暴露出来,请您在决策是否用于生产环境时作为参考;

  • 首先是指出 of-watchdog 正在变得普及:



  • 以下是支持 of-watchdog 的模板,如下图红框,仅仅是可用于测试(avilable for testing),看来里生产环境可用还是有段距离的:


初探

  • 有了陈耿老师的提示,就去 of-watchdog 官网了解详情,地址是:https://github.com/openfaas/of-watchdog ,下图红框中的话是最简单形象的解释:



  • 虽然欣宸的英语很渣,但还是看懂了上图红框里的意思:of-watchdog 是函数和微服务之间的反向代理

  • 大多数人和我一样秒懂了,但我还是想解(mai)释(nong)一下,先看看典型的反向代理,如下图,浏览器访问电商网站时,订单服务和购物车服务的请求都发到同一个 Nginx,Nginx 根据请求 URL 将请求转发到不同的 Tomcat 上去,浏览器只知道 Nginx,不知道正真执行任务的是 Tomcat,此时的 Nginx 就是反向代理:



  • of-watchdog 是函数和微服务之间的反向代理,我这边脑补出的效果如下:



  • 而且官方提到了微服务,我这边本能的感觉就是:前文的 watchdog 转发请求是走 STDIN,而 of-watchdog 这里应该不走 STDIN 了,而是 http,毕竟 martinfowler 对微服务的定义中就指出要处理 http 请求,如下图红框:



  • 事实证明,of-watchdog 的实际情况比我的脑补结果复杂,因为 of-watchdog 有模式(mode)的概念,接下来细看各种模式下的 of-watchdog 到底是什么?

http mode

  • of-watchdog 的默认模式是 http 模式,部署服务时 of-watchdog 会 fork 一个进程(假设为进程 A),进程 A 会监听一个端口,of-wahtchdog 收到的所有请求都会转发到进程 A 监听的端口,官方架构图如下:



  • 看完上述架构图有种如释重负的感觉,咱们写的代码是在右侧的 child 里面执行的,这个 child 从 3000 端口收到 of-watchdog 转发过来的外部请求,然后内部处理掉,这不就是 tomcat 的做法么,前文留下的担忧此时烟消云散了;

  • 官方对 of-watchdog 的优点描述如下(请原谅我的不入流翻译):

  • 第一,并发性能和吞吐量最优;

  • 第二,相比 watchdog,对内存的使用更高效;

  • 第三,建好的数据库连接可以反复使用;

  • 第四,容器操作系统的临时文件夹(/tmp/目录),是所有请求共用的,例如可以做临时缓存用;

  • 第五,好像是关于 Node 和 Python 的,我实在读不懂,请您自己看原文吧:


Does not require new/custom client libraries like afterburn but makes use of a long-running daemon such as Express.js for Node or Flask for Python


  • 尽管咱们的问题已经找到了答案,但除了 http 模式,of-watchdog 还有其他几种模式也建议您简单了解,有的场景下还是用得上的;

serializing mode

使用了该模式,of-watchdog 就和前面的 watchdog 没啥区别了,就是用来和 watchdog 保持兼容的;

streaming mode

  • 该模式下,每收到一个请求,会 fork 一个进程来处理;

  • 该模式的特点是可以处理比容器内存还大的请求 body,例如容器内存只有 512 兆,但是能处理上 G 的请求 body(这么大的 body 一般是多媒体内容,例如视频)

  • 从名称 streaming 可见,处理文件流的函数,适合使用此模式;

static mode

  • static 模式下,of-watchdog 扮演的角色和 nginx 类似:收到请求后去指定目录读取静态文件返回(例如 xxx.html 文件),官方给出详细 demo 的参考地址:https://www.openfaas.com/blog/serverless-static-sites/

afterburn mode

最后一个是 afterburn 模式,正在我精疲力尽的时候,发现官方宣布此模式已经废弃(如下图),太好了,可以不用关心这个模式了!



  • 嘴上说不关心,但是忍不住多看一眼 afterburn 模式的架构图,如下图,被 fork 的进程与父进程之间有 HTTP 通道,并且 of-watchdog 还能通过 STDIN 输入,并且能接收子进程的 STDOUT,这个架构有点烧脑,不过可以不用关心了,因为它被废弃了:



用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
OpenFaaS实战之六:of-watchdog(为性能而生)(1)