`

京东架构师“强娃”对CloudFoundry的架构优化

阅读更多

转:http://www.cb.com.cn/index.php?m=content&c=index&a=show&catid=32&id=1053606&all

  本人作为京东云擎(JAE)的架构师,在从事云平台特别是PASS平台的架构、开发多年,有一些体会以及一些解决方案。下面,我想对开源 PaaS框架CloudFoundry的一个NATS单节点的问题发表一下个人看法。目前京东云擎也是基于这种方案来实现,大大减小了NATS 单节点的风险问题,避免了单个NATS节点挂掉而导致整个云擎无法运行的情况发生,从而提高云擎的高可靠性。

  为了避免有宣传个人之嫌疑,希望小编屏蔽自己的名字,改用本人之“艺名”--- 强娃。

  一、概述

  云擎是基于CloudFoundry(后文统一使用CF作为简称)开源系统进行二次开发的,我们利用CF开源系统的基本框架,然后整合了京东自己的各个云服务产品,并且根据需求开发了智能路由、弹性伸缩、智能启动和资源隔离等扩展功能。

  CF开源系统作为一个通用的PaaS平台解决方案,很好的满足了大部分基本需求,但是要打造一个高可靠的PaaS平台,还需要做很多架构容错和改进。

   CF由很多组件构成,有一些核心组件是必不可少的,还有很多可选组件可以根据需求选择性使用。其中NATS、Router和 Cloudontroller三个组件更是整个CF的最关键的组件,其中任何一个组件不可用都会导致整个PaaS平台不可用,所以这三个组件的容错显得更 加重要。 Router的容错可以VIP实现,Cloudontroller本身通过Router的软域名映射进行容错。NATS作为整个CF各个组件的连接枢纽, 一旦不可用所有CF组件都出问题,所以NATS的重要性不言而喻,但是目前业界普遍使用单实例。虽然NATS的稳定性不容置疑,但是不能解决由于网络、服 务器硬件故障和操作系统故障导致的不可用,特别是由于服务器不可用导致的故障,恢复成本很高,时间也是很长的。开源的NATS组件也有集群版本,但是普遍 反映不够稳定,都没有在生产环境使用。本人表达一下对NATS升级改造的一点看法。

  二、NATS集群化方案设计

  为了提高京东云擎的可靠性,京东云擎团队基于GO语言版本的NATS设计并实现了NATS的集群化方案,这个方案在预发布环境运行了一个月,现在也正式上线,表现都非常稳定。下面就对我们的NATS集群化方案和实现进行阐述。

  首先看看NATS集群化方案的架构图,如下:

  通过上面的架构图可以知道,NATS服务器各个节点采用了zookeeper进行心跳存活的管理,这样可以保证所有NATS客户端获取到的NATS服务器节点都是存活的;NATS服务器各个节点直接也会相互通信,主要是保证订阅信息的同步。

  这个NATS集群化方案有如下优点:

  (1)方便的横向扩展,随时上线下线NATS服务器节点;

  (2)通过zookeeper管理NATS服务器节点的存活,保证了客户端得到的NATS服务器实例都是可用的;

  (3)通过最多两次的消息转发,极大的提高了消息转发的性能。

  三、NATS集群化方案实现

  NATS集群化实现的难点主要在于怎样保证消息的订阅与发布能够在各个NATS节点之间进行同步。下面分别从NATS服务器节点启动、订阅消息、发布消息和NATS客户端改进等方面说明NATS集群化方案的实现。

  1. NATS服务器节点启动

   为了保证各个NATS服务器节点订阅信息的同步,启动一个NATS服务器节点的时候需要判断是否已存在其他NATS服务器节点,如果存在那么需要连接其 他NATS服务器节点进行订阅消息的同步。NATS服务器节点的各个功能或者服务初始化完毕以后将自己的地址以临时节点的方式注册到zookeeper集 群中,这样就可以开始对外提供服务了。

  2. 消息订阅

  集群化版本的NATS对于NATS客户端发布订阅消息是透明的,即不管NATS客户端选择的哪一个NATS服务器节点都只需要向这一台进行消息订阅与发布。

  NATS服务器节点收到订阅消息以后,首先加入自己的消息订阅队列,然后广播到其他NATS服务器节点,在广播的时候做了一点点优化,就是看这个主题的消息订阅是否已经被广播过了,那么就不需要重复广播,防止订阅信息过多,并且这些都是不需要的垃圾订阅消息。

  最后如果某一个客户端取消订阅消息,同样需要广播取消订阅消息。

  3. 消息发布

   NATS服务器节点接收到NATS客户端发布的消息以后,还是首先根据消息订阅列表进行转发,和单机NATS不同的是,这次转发可能会转发到其他 NATS服务器节点,只要其他NATS服务器节点也有同样的消息主题订阅,那么这种情况就存在一次中间转发的过程,但是也最多只存在一次中间转发过程,所 以性能基本上不受什么影响。

  4. NATS客户端改进

  NATS客户端的改进主要是支持从zookeeper集群上获 取NATS服务器的节点地址,并且能够兼容以前老的直接配置某一个NATS服务器节点地址。当客户端第一次连接NATS服务器节点时,需要从 zookeeper集群获取所有可用的NATS服务器节点地址并且缓存到本地,然后随机选择一个NATS服务器节点建立连接并且进行消息订阅与发布。缓存 所有NATS服务器节点地址主要是防止zookeeper不可用的时候并且NATS服务器节点有挂掉的情况不影响客户端切换NATS服务器节点,在切换的 时候需要把NATS客户端以前订阅的消息全部重新订阅一次。

  四、其他改进

  本次针对NATS单点问题进行整个京东云擎的架构升级,完成升级以后整体运行很稳定。不过除了NATS集群化,本次架构升级还做了其他很多改进,本次架构升级主要目的是让京东云擎具有高可靠。下面在简单介绍本次架构升级其他方面的改进:

  (1)使用分布式文件系统替换原来的单磁盘存放droplet,解决了由于用户猛增导致droplet存储空间受限的问题;

  (2)用户控制台界面dashboard的改变;

  (3)Router对后端多实例包括CloudController的容错;

  (4)独立域名绑定支持;

  (5)应用打包部署流程优化;

  (6)同组件的不同实例分别部署到不同物理机的云主机上;

  (7)其他组件功能优化。

  五、总结

  云擎是京东给个人开发者、微小中型企业提供的一站式应用免费托管平台,所以保证云擎高可靠性就是保证所有个人开发者和微小中型的应用的可靠性。

   通过对核心CF的组件进行多实例或者集群化容错处理来保证和提供云擎的可靠性,尤其在对消息中间件这个核心组件,云擎团队设计和实现了自己的集群化方 案,保证了消息通信的可靠性,并且通过GO语言进行开发扩展了单机NATS的消息通信的性能。我们设计的NATS集群化方案具有方便横向扩展的能力,由此 京东云擎团队解决了消息中间通信的瓶颈。

  云擎团队后面考虑对NATS集群化方案进行服务提供给京东云擎的用户使用,让用户也能够通过消息中间件开发分布式的应用。

  最后,自己也不忘给京东云擎打个小广告:免费得应用托管平台,稳定、可靠,服务态度好,欢迎访问云擎官网:http://jae.jd.com。

分享到:
评论

相关推荐

    CloudFoundry的架构优化

    京东架构师“强娃”对CloudFoundry的架构优化,实战经验很有参考意义

    基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip

    【资源说明】 基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    2024xxx市智能静态交通系统运营项目可行性实施方案[104页Word].docx

    2024xxx市智能静态交通系统运营项目可行性实施方案[104页Word].docx

    Cadence-Sigrity-PowerDC-2023.1版本的用户手册.pdf

    Sigrity PowerDC technology provides comprehensive DC analysis for today's low voltage, high-current PCB and IC package designs. It is available with integrated thermal analysis to enable electrical and thermal co-simulation. Using PowerDC, you can assess critical end-to-end voltage margins for every device to ensure reliable power delivery. PowerDC quickly identifies areas of excess current density and thermal hotspots to minimize the risk of field failure in your design.

    node-v0.12.10-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v4.8.3-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v4.3.1-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Pannellum开发的VR漫游系统.zip

    VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

    管道焊缝质量检测数据集VOC+YOLO格式1134张2类别.7z

    数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1134 标注数量(xml文件个数):1134 标注数量(txt文件个数):1134 标注类别数:2 标注类别名称:["bad","good"] 每个类别标注的框数: bad 框数 = 565 good 框数 = 431 总框数:996 使用标注工具:labelImg 标注规则:对类别进行画矩形框 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注 更多信息参考:blog.csdn.net/FL1623863129/article/details/138728848

    node-v0.10.34-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习

    数维杯简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习 简历是展示个人经历、技能和能力的重要文档,以下是一个常见的简历格式和内容模板,供您参考: 简历格式: 头部信息:包括姓名、联系方式(电话号码、电子邮件等)、地址等个人基本信息。 求职目标(可选):简短描述您的求职意向和目标。 教育背景:列出您的教育经历,包括学校名称、所学专业、就读时间等。 工作经验:按时间顺序列出您的工作经历,包括公司名称、职位、工作时间、工作职责和成就等。 技能和能力:列出您的专业技能、语言能力、计算机技能等与职位相关的能力。 实习经验/项目经验(可选):如果您有相关实习或项目经验,可以列出相关信息。 获奖和荣誉(可选):列出您在学术、工作或其他领域获得的奖项和荣誉。 自我评价(可选):简要描述您的个人特点、能力和职业目标。 兴趣爱好(可选):列出您的兴趣爱好,展示您的多样性和个人素质。 参考人(可选):如果您有可提供推荐的人员,可以在简历中提供其联系信息。 简历内容模板: 姓名: 联系方式: 地址: 求职目标: (简短描述您的

    Navicat16安装包

    Navicat16的安装包,下载即用

    node-v4.0.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    计算机语言python面向对象介绍

    面向对象是把构成问题的事务分解成各个对象,每个对象都有自己独立的属性和行为, 对象可以将整个问题事务进行分工, 不同的对象做不同的事情, 这种面向对象的编程思想由于更加贴近实际生活, 所以被计算机语言广泛应用。 > 常见的面向对象编程语言:Java / C++ / Python等等; 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 > 面向过程:C 总之,Python中万事万物皆对象,而面向对象的三大特性:封装、继承和多态。 # 类的定义

    python函数基础使用

    Python中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。 除了可以直接使用的内置函数外,Python 还支持自定义函数,将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。 Python 提供了一个功能,即允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)

    SSM项目:校园通讯录信息管理系统

    该系统将课程和通讯录联系起来,教师或学生主要可以通过课程添加联系方式从而进行互发短信。 主要功能模块有个人信息管理、联系人管理、课程管理、消息通知管理和短信管理。 教师可以向管理员申请创建和结束课程,学生可以向课程教师申请加入和退出课程,通过课程,学生和教师可以进行通讯录操作,相应的操作会有消息通知功能。 使用Spring、SpringMVC、Mybatis框架搭建系统的整体框架 使用MySQL数据库 使用html/js/css/bootstrap框架/Layui框架建前端页面 java源码,无数据库脚本。

    node-v5.8.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    [动手学强化学习]系列,基于pytorch。.zip

    [动手学强化学习]系列,基于pytorch。 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一。它主要用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。强化学习的特点在于没有监督数据,只有奖励信号。 强化学习的常见模型是标准的马尔可夫决策过程(Markov Decision Process, MDP)。按给定条件,强化学习可分为基于模式的强化学习(model-based RL)和无模式强化学习(model-free RL),以及主动强化学习(active RL)和被动强化学习(passive RL)。强化学习的变体包括逆向强化学习、阶层强化学习和部分可观测系统的强化学习。求解强化学习问题所使用的算法可分为策略搜索算法和值函数(value function)算法两类。 强化学习理论受到行为主义心理学启发,侧重在线学习并试图在探索-利用(exploration-exploitation)间保持平衡。不同于监督学习和非监督学习,强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数。强化学习问题在信息论、博弈论、自动控制等领域有得到讨论,被用于解释有限理性条件下的平衡态、设计推荐系统和机器人交互系统。一些复杂的强化学习算法在一定程度上具备解决复杂问题的通用智能,可以在围棋和电子游戏中达到人类水平。 强化学习在工程领域的应用也相当广泛。例如,Facebook提出了开源强化学习平台Horizon,该平台利用强化学习来优化大规模生产系统。在医疗保健领域,RL系统能够为患者提供治疗策略,该系统能够利用以往的经验找到最优的策略,而无需生物系统的数学模型等先验信息,这使得基于RL的系统具有更广泛的适用性。 总的来说,强化学习是一种通过智能体与环境交互,以最大化累积奖励为目标的学习过程。它在许多领域都展现出了强大的应用潜力。

    基于MAX78000的猫咪识别喂食器+全部资料+详细文档(高分项目

    【资源说明】 基于MAX78000的猫咪识别喂食器,基于SSD目标检测网络,在单片机的CNN加速器上进行神经网络计算+全部资料+详细文档(高分项目基于MAX78000的猫咪识别喂食器,基于SSD目标检测网络,在单片机的CNN加速器上进行神经网络计算+全部资料+详细文档(高分项目 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    网站爬虫 pyppeteer

    pyppeteer 通用爬虫(爬取几乎任何网站)

Global site tag (gtag.js) - Google Analytics