写点什么

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

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

    阅读完需:约 5 分钟

  1. 模板操作(template)

  2. 大话watchdog

  3. [of-watchdog(为


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


性能而生)]( )


  1. java11模板解析

  2. 自制模板(maven+jdk8)

  3. 终篇,自制模板(springboot+maven+jdk8)

本篇概览

  • 本文是《OpenFaaS 实战》系列的第六篇,前文咱们了解了 watchdog,在懂得原理之后又引发了担忧:每次响应 web 请求都要 fork 一个进程,这种方式可能会有性能问题;

  • 如果每个请求都要创建进程,做为一个 Java 程序员是无法接受的,Java 之父马士兵老师在 B 站的谆谆教诲犹在耳畔想起:线程池、异步响应、NIO…

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

上古秘籍的启示

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


不要过于乐观

  • 目前官方对 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

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

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