We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
puppeteer是一款google开源的nodejs库,它提供了高阶API来控制chromium内核的浏览器。
现有的成果:我们在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的问题。报错日志大体如下所示,这个问题我暂时也没能解决:
{ Error: connect ECONNREFUSED 127.0.0.1:39491 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14) errno: 'ECONNREFUSED', code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 39491 })
服务规范、维护、研发体验和效率的问题。(案例:目前我们nodejs关于网络监控中间件的使用方式直接在应用层上做cat打点,应用层代码级别的问题,导致应用层以下的问题,更多是依赖运维发现,因为应用层以下出现的问题,基本不会在应用层上被捕获。所以你去观察cat监控日志全都是没问题的。下面是levi-api服务网关层的抓包截图,出现TCP rst,最后导致的网关层连接失败,但levi-api服务完全感知不到。因为我们服务发送rst之后,应用层根本没机会处理,cat对http request打点的代码都不会执行到。
测试和部署相关的问题。(目前node服务全部基于pm2部署,egg这种自带多进程管理模块的需要单独配置,不方便)
服务间(包括跨语言)消息调度的问题。(http、mq、rpc)
就拿用puppeteer爬虫举例,我们其实就想利用这个工具模拟浏览页面,把需要的页面内容copy下来,但是每次开发都要去写一套服务代码,而且几乎每次需求都可能又遇到未知的坑:
PS:设定讨论范围,我个人认为我们是要设计或者说是整合出一套针对puppeteer应用的框架。所以,对于存储、会话管理、安全等等不是重点讨论范围,但框架模版的设计,要很好的兼容这些场景的接入。
目标就是让开发只关注puppeteer能做什么?尽最大可能的让开发和部署保持一致性,你可以理解它几乎是一个小FasS平台,让交付保持一致性。
The text was updated successfully, but these errors were encountered:
周二(今天)16:00~18:00 23楼6号会议室,大家有时间针对这个主题进行一次简短的讨论吗?
讨论的主要内容是:
以puppeteer为解决方案的nodejs模版建设,目标让开发测尽量少考虑需求以外的事情。
cli的建设,目标是让开发更标准化,不仅限于(代码覆盖率、单元测试、e2e、常见问题提示、依赖升降级)
公司现有的监控平台有哪些?监控手段有哪些? 能不能复用或者抽取部分功能设计成容易帮我们定位pptr服务的。我们监控的重点在于内存+网络,因为docker可以保证交付的一致性,但是底层依赖的宿主环境线上和本地还是有差别的。我们如何通过内存+网络的数据结合错误堆栈,分析、过滤、总结问题发送的来源。
本次讨论内容限定在45分钟内,内容结果和过程将会以RFC的形式,记录在issue中。
Sorry, something went wrong.
No branches or pull requests
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打点的代码都不会执行到。
测试和部署相关的问题。(目前node服务全部基于pm2部署,egg这种自带多进程管理模块的需要单独配置,不方便)
服务间(包括跨语言)消息调度的问题。(http、mq、rpc)
现状与需求碰撞在一起后:
就拿用puppeteer爬虫举例,我们其实就想利用这个工具模拟浏览页面,把需要的页面内容copy下来,但是每次开发都要去写一套服务代码,而且几乎每次需求都可能又遇到未知的坑:
怎么提高开发体验、效率、减少心智负担?
** 讨论&&目标:**
PS:设定讨论范围,我个人认为我们是要设计或者说是整合出一套针对puppeteer应用的框架。所以,对于存储、会话管理、安全等等不是重点讨论范围,但框架模版的设计,要很好的兼容这些场景的接入。
目标就是让开发只关注puppeteer能做什么?尽最大可能的让开发和部署保持一致性,你可以理解它几乎是一个小FasS平台,让交付保持一致性。
The text was updated successfully, but these errors were encountered: