欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

OpenFaaS实战系列文章链接

  1. 部署
  2. 函数入门
  3. Java函数
  4. 模板操作(template)
  5. 大话watchdog
  6. of-watchdog(为性能而生)
  7. java11模板解析
  8. OpenFaaS实战之八:自制模板(maven+jdk8)
  9. OpenFaaS实战之九:终篇,自制模板(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

  • 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,这个架构有点烧脑,不过可以不用关心了,因为它被废弃了:

展望

  • 看完of-watchdog的设计后,咱们已经知道,之前的实战写的代码以微服务的形态提供服务,这一点引起了我的好奇,下一篇文章,欣宸会以一个普通Java开发者的身份去探索这个秘密:OpenFaaS环境下,咱们写的Java类为何会以微服务形态运行?
  • 这不是刨根问底或者吹毛求疵,而是为了后面可以更加随心所欲的开发OpenFaaS函数;

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos

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

  1. OpenFaaS实战之二:函数入门

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos OpenFaaS实战系列文章链接 部署 函数入门 Ja ...

  2. OpenFaaS实战之八:自制模板(maven+jdk8),美团java面试算法题

    openfaas的model和entrypoint这两个jar是整个服务可运行的基础: 有些常用的jar依赖也被加入了,您可以酌情自行增删: 插件maven-compiler-plugin用来指定编译 ...

  3. [原创].NET 业务框架开发实战之六 DAL的重构

    .NET 业务框架开发实战之六 DAL的重构 前言:其实这个系列还是之前的".NET 分布式架构开发实战 ",之所以改了名字,主要是因为文章的标题带来了不少的歧义:系列文章中本打算 ...

  4. Keras深度学习实战(3)——神经网络性能优化技术详解

    Keras深度学习实战(3)--神经网络性能优化技术详解 0. 前言 1. 缩放输入数据集 1.1 数据集缩放的合理性解释 1.2 使用缩放后的数据集训练模型 2. 输入值分布对模型性能的影响 3. ...

  5. Golang流媒体实战之六:lal拉流服务源码阅读

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos <Golang流媒体实战>系列的链接 体验 ...

  6. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID:Ubuntu D ...

  7. 速递!MongoDB最新书籍出版啦:MongoDB进阶与实战-微服务整合、性能优化、架构管理

    新书速递 近期,MongoDB中文社区核心成员之一唐卓章老师出了一本MongoDB最新书籍--<MongoDB进阶与实战:微服务整合.性能优化.架构管理>,全面涵盖了MongoDB的基本原 ...

  8. Apache CXF实战之六 创建安全的Web Service

    2019独角兽企业重金招聘Python工程师标准>>> 本文链接:http://blog.csdn.net/kongxx/article/details/7534035 Apache ...

  9. Java Socket实战之六 使用NIO包实现Socket通信

    2019独角兽企业重金招聘Python工程师标准>>> 本文地址:http://blog.csdn.net/kongxx/article/details/7288896 Java S ...

最新文章

  1. mysql数据库建表失败_mysql数据库文件太大导致建表失败,如何避免
  2. 构造 ---- 最小没出现过的数(逆向构造) D. Replace by MEX
  3. 计算机软件uml,计算机软件——UML旅游管理系统
  4. python界面散点图_Python数据可视化——散点图
  5. Linkis生产部署服务器配置参考指南
  6. mysql存储过程是什么
  7. Pixhawk代码分析-启动代码及入口函数
  8. 信息学奥赛一本通(1045:收集瓶盖赢大奖)
  9. java中equals理解(2)
  10. Android笔记 fragment入门 动态加载fragment demo+ 判断横竖屏
  11. dz开启php5.5,Discuz5.5.0代码高亮显示+运行代码框合成插件 下载第2/4页
  12. 由浅入深,逐步了解 Java 并发编程中的 Synchronized!
  13. Ora-00600 错误的代码含义及常用查询
  14. 编译原理教程_8 静态语义分析和中间代码生成
  15. Struts2 本是非单例的,与Spring集成就默认为单例
  16. matlab学霸表白公式,一个理科学霸的表白:数学公式的超酷表白
  17. 又降10%,Java人太南了!
  18. 当我们谈深度学习时,我们用它落地了什么?
  19. Deploy k8s(1.25)
  20. 多晴转云h_多晴转云htxt百度云

热门文章

  1. [5 算法] 31. 了解各种排序选择(partition,stable_partition,nth_element,partial_sort,sort,stable_sort)
  2. HDU 5984 Pocky (概率+简单微分方程)
  3. 兄弟俩今年的年龄和是35岁,当哥哥像弟弟现在这样大时,弟弟的年龄恰好是哥哥年龄的一半,哥哥今年几岁?
  4. Python实现undo操作
  5. 助力传统游戏转型GameFi,Web3Games推动游戏发展新航向
  6. 清明祭:缅怀手机领域的那些先烈厂商们,你可还记得?
  7. android gps 卫星数据格式,Gps开发实战——卫星数量获取
  8. 宽带、专线等傻傻分不清楚——广域网协议
  9. DTV/IPTV区别
  10. 基于AVR单片机: 两轮自平衡智能车