Open huenchao opened 4 years ago
周二(今天)16:00~18:00 23楼6号会议室,大家有时间针对这个主题进行一次简短的讨论吗?
讨论的主要内容是:
以puppeteer为解决方案的nodejs模版建设,目标让开发测尽量少考虑需求以外的事情。
cli的建设,目标是让开发更标准化,不仅限于(代码覆盖率、单元测试、e2e、常见问题提示、依赖升降级)
公司现有的监控平台有哪些?监控手段有哪些? 能不能复用或者抽取部分功能设计成容易帮我们定位pptr服务的。我们监控的重点在于内存+网络,因为docker可以保证交付的一致性,但是底层依赖的宿主环境线上和本地还是有差别的。我们如何通过内存+网络的数据结合错误堆栈,分析、过滤、总结问题发送的来源。
本次讨论内容限定在45分钟内,内容结果和过程将会以RFC的形式,记录在issue中。
puppeteer是什么:
puppeteer是一款google开源的nodejs库,它提供了高阶API来控制chromium内核的浏览器。
puppeteer能做什么:
现状:
现有的成果:我们在b端的业务需求中,几乎把puppeteer能做的事情全都做了。 现有的困难:虽然它功能很强大,使用很便捷,但使用它的过程中,我们总会遇到一些问题或者说考虑以下问题(当然不仅限只有以下几个点):
puppeteer本身的现有的bug。(案例:可以搜的到的去github issue看bug标签)
DevTools协议相关的问题。(案例:DevTools不支持file协议,所以别指望用puppeteer去做组件包测试的问题、低版本截图可能会出现空白:https://bugs.chromium.org/p/chromium/issues/detail?id=848161)
浏览器版本、兼容性相关的问题。(不熟悉浏览器启动参数组合配置,不清楚内核升级后的兼容性问题,例如chromium71后,不允许修改host等头部)
服务内存、日志、错误定位,排查,处理体系的问题。(怎么更友好的把服务与公司的监控体系结合在一起使用?案例: 下面就是多进程配合puppeteer使用导致的内存泄漏问题,僵尸进程的问题一直没能有效解决。首先,你没办法登上到服务器上看具体情况,第二错误不好复现。)
多进程的调度管理问题。 (案例: 我们每次开启、关闭一个浏览器的开销其实很大的,最好是利用websocket连接一个运行的chromium实例,跑完就断开连接,这样浏览器一直开着,只是需要程序连接上去的开销而已。这个在单pod上玩没有任何问题,一旦扩容会出现ECONNREFUSED的问题。报错日志大体如下所示,这个问题我暂时也没能解决:
服务规范、维护、研发体验和效率的问题。(案例:目前我们nodejs关于网络监控中间件的使用方式直接在应用层上做cat打点,应用层代码级别的问题,导致应用层以下的问题,更多是依赖运维发现,因为应用层以下出现的问题,基本不会在应用层上被捕获。所以你去观察cat监控日志全都是没问题的。下面是levi-api服务网关层的抓包截图,出现TCP rst,最后导致的网关层连接失败,但levi-api服务完全感知不到。因为我们服务发送rst之后,应用层根本没机会处理,cat对http request打点的代码都不会执行到。
![image](https://user-images.githubusercontent.com/14048126/82146194-21957b80-987d-11ea-92c9-4cbb9e88de4a.png)
测试和部署相关的问题。(目前node服务全部基于pm2部署,egg这种自带多进程管理模块的需要单独配置,不方便)
服务间(包括跨语言)消息调度的问题。(http、mq、rpc)
现状与需求碰撞在一起后:
就拿用puppeteer爬虫举例,我们其实就想利用这个工具模拟浏览页面,把需要的页面内容copy下来,但是每次开发都要去写一套服务代码,而且几乎每次需求都可能又遇到未知的坑:
怎么提高开发体验、效率、减少心智负担?
讨论&&目标:
PS:设定讨论范围,我个人认为我们是要设计或者说是整合出一套针对puppeteer应用的框架。所以,对于存储、会话管理、安全等等不是重点讨论范围,但框架模版的设计,要很好的兼容这些场景的接入。
目标就是让开发只关注puppeteer能做什么?尽最大可能的让开发和部署保持一致性,你可以理解它几乎是一个小FasS平台,让交付保持一致性。