access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持

16caffc7c2467956bd576db83e624492.png

在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布!

474f0c2f7cb2a2a6aadd3e5eb5d72645.png

Apache Pulsar 2.6.1 修复了 2.6.0 版本中的诸多问题,改进了一些功能,新增了对 OAuth2 的支持,覆盖 Broker、Pulsar SQL、Pulsar Functions、Go Function、Java Client 和 C++ Client,进一步丰富了 Pulsar 作为云原生流数据平台的功能。

在 Pulsar 2.6.1 版本中,来自社区的 commit 有 102 个,越来越多的小伙伴开始参与到 Pulsar 社区建设中,成为 Contributor 的一员。下面一起来看看 2.6.1 版本有哪些更新吧。

Broker 相关改进

将批处理大小限制为 “maxNumberOfMessages” 和 “ maxSizeOfMessages” 的最小值

在 2.6.0 版本之前,BatchReceive 策略中 maxNumberOfMessagesmaxSizeOfMessages 的最小值不会影响批处理大小。当批量大小大于 consumer 中设置的 receiveQueue 大小时(假设使用的批量大小为 3000,receiveQ 为 500),会出现以下问题:

在 consumer 中使用多主题模式,client 被阻塞,导致不接收任何消息;即使用户在批处理中设置超时策略,client 也不会恢复。

在 2.6.1 版本中,我们把批处理大小设置为 “maxNumberOfMessages” 和 “maxSizeOfMessages” 中的最小值,修复了该问题。

更多详情查看 PR-6865:https://github.com/apache/pulsar/pull/6865。

解决 Key_Shared 中使用粘性 hash range 导致的哈希范围冲突问题

在以前的版本中,当用户在 Key_Shared 订阅模型中使用 “stickyHashRange” 时,consumer 指定的 hash 范围不允许重叠。例如,consumer-1 的哈希范围为:[[0,99],[400,65535]],consumer-2 的哈希范围为:[[100,399]]。

这是因为在 broker 端,没有对 stick hash range 中的 start 和 end 位置进行检查。正常情况下不允许 start 大于 end 的位置。在 2.6.1 版本中,我们加入了相应的 check 机制,来避免出现 hash range 冲突的问题。

更多详情查看 PR-7231:https://github.com/apache/pulsar/pull/7231。

修复获取 lookup 权限的错误

当前,当 Pulsar AuthorizationService 检查 lookup 权限时,拥有 canProducercanConsumer角色应该具备可以 canLookup 的能力,但实际上并没有该能力。代码如下:

java try { return canLookupAsync(topicName, role, authenticationData) .get(conf.getZooKeeperOperationTimeoutSeconds(), SECONDS); }

如果 canProducecanConsume 方法抛出异常,canLookup 只会抛出该异常,不检查其他权限。

在 2.6.1 版本中,使用 canLookupAsync 代替原来的行为,更多详情查看 PR-7234:https://github.com/apache/pulsar/pull/7234 。

修复创建 non-durable cursor 时无法删除 topic 的错误

当非持久游标创建失败时,会返回 NPE。因为程序发生 NPE 后,仍在继续创建订阅实例:

java try { cursor = ledger.newNonDurableCursor(startPosition, subscriptionName); } catch (ManagedLedgerException e) { subscriptionFuture.completeExceptionally(e); } return new PersistentSubscription(this, subscriptionName, cursor, false);

将导致该 topic 的引用计数加一。当用户想要删除这个 topic 时,由于引用计数没有清零,所以即使使用 --force 强制删除,也无法删除 topic。在 2.6.1 版本中,我们解决了无法删除 topic 的问题。

更多详情查看 PR-7355:https://github.com/apache/pulsar/pull/7355。

避免在 ManagedLedgerImpl.isOffloadedNeedsDelete 方法中发生 NPE

在 2.6.1 版本之前,offload-deletion-lag 的默认值为 null,导致了 NPE 问题。在 2.6.1 版本中,我们在 ManagedLedgerImpl.isOffloadedNeedsDelete 方法中添加对 null 值的检查,避免出现该问题。

更多详情查看 PR-7389:https://github.com/apache/pulsar/pull/7389 。

修复创建新 ledger 时引发 NPE 导致生产者卡死的问题

由于无法解析网络地址,在创建 ledger 时会引发 NPE。如果在添加超时任务之前引发了 NPE,则超时机制不起作用。无法解析的网络地址在 Kubernetes 环境中很常见。当 bookie pod 或工作程序节点重新启动时,可能会发生这种情况。

在 2.6.1 版本中,可通过以下操作来修复该问题:

  • 在创建一个新的 ledger 时,捕获这个 NPE;
  • 触发超时任务时,始终执行回调。因为回调只能触发一次;
  • 添加机制检测 “CreatingLedger” 状态是否发生变化。

更多详情查看 PR-7401:https://github.com/apache/pulsar/pull/7401。

修复使用 advertisedListeners 产生的 NPE 问题

当使用带有外部 listener 名称的 advertisedListeners = internal:pulsar:// node1:6650,external:pulsar://node1.external:6650 时,broker 无法获取名称空间包的所有权。如果未启用 TLS,我们需要更改 BrokerServiceUrlTls

更多详情查看 PR-7620:https://github.com/apache/pulsar/pull/7620 。

获取最后一条 entry 时,client 错误地读取 -1 这条 entry

在 2.6.1 版本之前,getLargestBatchIndexWhenPossible() 函数没有 return 语句,当 entry 为 -1 时,client 会对把相应的 MessageData 设置为当前位置的值,并将该值发送到 client,当 client 尝试读取该 entry,会出现如下问题:

16:34:25.779 [pulsar-io-54-7:org.apache.bookkeeper.client.LedgerHandle@748] ERROR org.apache.bookkeeper.client.LedgerHandle - IncorrectParameterException on ledgerId:0 firstEntry:-1 lastEntry:-1 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ConsumerImpl@1986] INFO org.apache.pulsar.client.impl.ConsumerImpl - [persistent://external-repl-prop/pulsar-function-admin/assignment][c-use-fw-localhost-0-function-assignment-initialize-reader-b21f7607c9] Successfully getLastMessageId 0:-1 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ClientCnx@602] WARN org.apache.pulsar.client.impl.ClientCnx - [id: 0xc78f4a0e, L:/127.0.0.1:55657 - R:localhost/127.0.0.1:55615] Received error from server: Failed to get batch size for entry org.apache.bookkeeper.mledger.ManagedLedgerException: Incorrect parameter input 16:34:25.779 [pulsar-client-io-82-1:org.apache.pulsar.client.impl.ClientCnx@612] WARN org.apache.pulsar.client.impl.ClientCnx - [id: 0xc78f4a0e, L:/127.0.0.1:55657 - R:localhost/127.0.0.1:55615] Received unknown request id from server: 10

PR-7495 在代码中增加了 return 语句,GetLastEntry() 会读取最后一条 entry,而不是 -1

更多详情查看 PR-7495:https://github.com/apache/pulsar/pull/7495。

ZooKeeper 相关改进

使用主机名进行 Bookie 机架感知映射

PR-5607 中添加了 useHostName()return false。这意味着机架式策略会尝试将 Bookie 主机名解析为 IP 地址,然后使用该 IP 地址来确定 Bookie 属于哪个机架。

这会导致如下两个问题:

  • IP 地址与在/ bookies z-节点中记录的主机名不匹配;
  • 如果在解析 bookie 主机名时发生错误(例如:瞬态 DNS 错误),会触发 NPE 异常;对 BookKeeper 客户端来说,该 bookie 在集群中一直不可用。

例如,在下面代码中的第 77 行会抛出 NPE,因为 getAddress() 给出了一个 null,而该地址没有解析:

java 74 if (dnsResolver.useHostName()) { 75 names.add(addr.getHostName()); 76 } else { 77 names.add(addr.getAddress().getHostAddress()); 78 }

默认情况下,DnsResolver.useHostName() 返回 true

更多详情参考 PR-7361:https://github.com/apache/pulsar/pull/7361。

Java Client 相关改进

修复了无法重命名 Athenz 身份验证中使用的 HTTP header 的问题

Athenz 的身份验证插件允许用户更改 HTTP header 的名称,并通过 roleHeader 参数将身份验证令牌发送到代理服务器。更改 HTTP header 名称会保留 “AuthenticationAthenz” 侧的 “roleHeader” 参数的值,并将其直接用作标头名称。

更多详情参考 PR-7311:https://github.com/apache/pulsar/pull/7311。

修复多次回收 batch ack 的集合

多次回收 batch ack 的根本原因是批量 Ack 刷新和累积确认中存在竞争条件。因此,为该 ackset 添加回收状态检查,避免多次回收 batch ack。

更多详情参考 PR-7409:https://github.com/apache/pulsar/pull/7409。

添加支持 OAuth2 身份验证的客户端

Pulsar 支持使用 OAuth 2.0 访问令牌验证客户端身份。可以使用令牌来标识 Pulsar 客户端,并将令牌关联到允许执行某些操作(例如:发布到主题或从主题消费)的某些 “principal”(或“role”)。

该模块直接支持 OAuth 2.0 的 Pulsar 客户端身份验证插件。客户端与 OAuth 2.0 服务器进行通信后,将从 OAuth 2.0 服务器获取“访问令牌”,并将该“访问令牌”传递给 Pulsar broker 进行身份验证。

因此,代理方仍然可以使用 “org.apache.pulsar.broker.authentication.AuthenticationProviderToken”,
用户也可以添加自己的 AuthenticationProvider 来使用此模块。

更多详情参考 PR-7420:https://github.com/apache/pulsar/pull/7420。

在 consumer 关闭之后,不再订阅这个 topic

当 consumer 重新连接到 broker 时,将竞争条件固定在 consumer 中。

在 consumer 重新连接到代理时会发生竞争条件,消费者重新连接到代理时连接设置为 null。如果此时关闭 cosnumer,客户端不再向代理发送关闭 consumer 的命令。因此,如果 consumer 重新连接到 broker,consuemr 将再次发送订阅命令。

在 2.6.1 版本中,当 consumer 的连接打开时,consumer 会添加状态检查。如果使用者状态为关闭或正在关闭,则无需发送订阅命令。

更多详情参考 PR-7589:https://github.com/apache/pulsar/pull/7589。

OAuth2 身份验证插件使用 AsyncHttpClient

在之前的版本中,OAuth2 客户端 auth 插件使用 Apache HTTP 客户端库发出请求,Apache HTTP 客户端仅用于主机名验证。如 PR-7612 所述,为了摆脱对 Apache HTTP 客户端库的依赖,在 2.6.1 版本中使用 AsyncHttpClient。AsyncHttpClient 在客户端和 broker 中的其他地方都有使用。

更多详情参考 PR-7615:https://github.com/apache/pulsar/pull/7615。

CPP Client 相关改进

在 CPP 客户端中支持 OAuth2 的认证方式

Pulsar 支持使用 OAuth 2.0 访问令牌对客户端进行身份验证。可以使用令牌来标识 Pulsar 客户端,并将其与允许执行某些操作(例如:发布到主题或从主题消费)的某些“principal”(或“role”)关联。

在 2.6.1 版本中,允许用户在 CPP 客户端中使用 OAuth2 的认证方式。

更多详情参考 PR-7467:https://github.com/apache/pulsar/pull/7467。

修复在关闭 callback 中 partition 索引的错误

在分区生产者/消费者中关闭 callback 时,分区索引始终为 0。我们需要将 ProducerImpl / ConsumerImpl 的内部 partition 索引字段传递给 PartitionedProducerImpl / PartitionedConsumerImpl 的 close 回调。

更多详情参考 PR-7282:https://github.com/apache/pulsar/pull/7282。

修复了 C++ 客户端中计时器的竞争状况导致的段崩溃

在 2.6.1 版本之前,竞争条件下会发生段崩溃:

  • 关闭操作,称为 “keepAliveTimer_.reset()”;
  • 同时,在 startConsumerStatsTimerhandleKeepAliveTimeout 方法中访问计时器。

在 2.6.1 版本中,我们修复了此问题,竞争条件下不再发生段崩溃。

更多详情参考 PR-7572:https://github.com/apache/pulsar/pull/7572。

支持从文件读取凭据

支持从文件读取凭据,使其与 Java 客户端保持一致。

更多详情参考 PR-7606:https://github.com/apache/pulsar/pull/7606。

修复在连接出错时多 topic consumer 的段错误

当创建 consumer 出现错误时,多主题 consumer 将触发段错误。这是使用 null 回调关闭部分使用者的调用所致。

在 2.6.1 版本中,我们修复了此问题。

更多详情参考 PR-7588:https://github.com/apache/pulsar/pull/7588。

Functions 相关改进

使用标准主机名作为 worker 的默认值

Java 8 和 Java 11 获取主机名的方法不同。在 Java 8 中,使用 InetAddress.getLocalHost()参数,getHostName()返回完全限定的主机名。在 Java 11 中,则是返回简单主机名。使用getCanonicalHostName()` 参数后,在Java 8 和 Java 11 中都能返回完全限定的主机名。

更多详情参考 PR-7360
https://github.com/apache/pulsar/pull/7360

修复 2.6.0 引入的向后兼容问题

PR-5985 破坏了向后兼容性。如果分开运行 Function Worker 与 Broker,Function Worker 和 broker 从 2.5 版本单独更新到 2.6 版本时会发生以下错误:

text java.lang.NullPointerException: nullntat java.net.URI$Parser.parse(URI.java:3104) ~[?:?] java.net.URI.<init>(URI.java:600) ~[?:?]ntat java.net.URI.create(URI.java:881) ~[?:?] org.apache.pulsar.functions.worker.WorkerUtils.initializeDlogNamespace(WorkerUtils.java:160) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.Worker.initialize(Worker.java:155) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.Worker.start(Worker.java:69) ~[org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT] org.apache.pulsar.functions.worker.FunctionWorkerStarter.main(FunctionWorkerStarter.java:67) [org.apache.pulsar-pulsar-functions-worker-2.7.0-SNAPSHOT.jar:2.7.0-SNAPSHOT]

错误原因:2.5 版本中 broker 会对包含 bookkeeperMetadataServiceUri 字段的请求做出响应,管理客户端将返回该字段为 null,从而导致 NPE。

在 2.6.1 版本中,当初始化 function worker 时,对 BookkeeperMetadataServiceUri 的 value 进行检查,判断其是否为 null

更多详情参考 PR-7528:https://github.com/apache/pulsar/pull/7528。

Pulsar Perf 相关改进

在 pulsar-perf 的 producer/consumer/reader 中支持 tlsAllowInsecureConnection

在命令行工具 pulsar-perf 中支持 tlsAllowInsecureConnection 配置,以支持对不安全的 TLS 连接的集群进行 producer/consumer/reader 的性能测试。

更多详情参考 PR-7300:https://github.com/apache/pulsar/pull/7300。

参考信息

  • Apache Pulsar 2.6.1 官网下载地址:https://pulsar.apache.org/en/download/
  • 更多关于 Apache Pulsar 2.6.1 的信息,可以参考下方:https://pulsar.apache.org/release-notes/#2.6.1
  • Pulsar 2.6.1 PR 列表:https://github.com/apache/pulsar/pulls?q=is%3Apr+label%3Arelease%2F2.6.1+is%3Aclosed

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英特尔显卡linux管理_英特尔 11 代酷睿大揭秘:这次全是大招

英特尔在今年九月份正式推出了第 11 代酷睿移动处理器&#xff0c;这次英特尔将 10 纳米 SuperFin 工艺全面带到移动处理器上&#xff0c;同时还有全新的 Willow Cove 内核、Iris Xe 显卡、全新的酷睿及英特尔标志。这次面向消费级市场的英特尔第 11 代酷睿移动处理器又有哪些变…

lnmp php文件访问不了,记一次lnmp环境下无法执行php文件

lnmp环境搭建好后却无法正常执行php文件&#xff0c;坑爹啊&#xff01;~[错误状况]页面直接打印出php代码内容&#xff1b;php文件无法执行&#xff1f;&#xff1b;查看nginx配置文件&#xff1a;server { listen80;server_name xxxxx.com;access_log/var/log/nginx/xxxxx.ac…

file 选择的图片作为背景图片_酷炫!用Python把桌面变成实时更新的地球图片

如何拥有够酷炫逼格够高的桌面&#xff1f;本文教你轻松定制自己的桌面背景(建议带上耳机听一下地球的声音)最近疯狂迷恋地球卫星图和地球的卫星视频&#xff0c;看上面的视频简直极度舒适。不禁想把这种图片作为桌面背景图。这就产生抓取其背景图片作为桌面的想法。思路其实很…

摇杆怎么映射到键盘_[评测]YAMAHA PSRSX900:雅马哈升级幅度最大的高端编曲键盘键盘中国原创评测...

本文图片均由本人亲自拍摄&#xff0c;转载请注明出处。年前就收到这台国行PSR-SX900了。在这一个月特殊的日子里&#xff0c;不能出门&#xff0c;幸好有sx900的陪伴&#xff0c;让我可以天天弹琴、唱歌打发时间...现在很多地方开始逐渐复工了&#xff0c;我抽时间写下了这一个…

微软黑屏补丁_慎装微软最新Win7补丁 部分用户更新补丁后无法关机

清波科技2月9日报道 使用微软windows系统的用户&#xff0c;对于蓝屏肯定不陌生&#xff0c;不过现在还有比蓝屏更可怕的系统故障&#xff1a;无法关机和重启。近日&#xff0c;在微软更新了一个最新的Win7补丁后&#xff0c;有部分用户反馈&#xff1a;在试图从开始菜单关机或…

php支持二级域名共享,PHP二级域名session共享方案

一般来讲网站都会有主站和子站&#xff0c;比如域名是linuxidc.com&#xff0c;那么一般来讲linuxidc.com和www.linuxidc.com就会是主站&#xff0c;而像bbs.linu一般来讲网站都会有主站和子站&#xff0c;比如域名是linuxidc.com&#xff0c;那么一般来讲linuxidc.com和就会是…

swift 滑动 iphone解锁_这10个iPhone隐藏功能,我就不信你全知道

Hi&#xff0c;大家好&#xff0c;我是爱倒腾电子产品的祈雨。从安卓阵营转到苹果已经快一年了&#xff0c;我从最初的束手束脚&#xff0c;到现在的乐得清闲&#xff0c;已经逐渐适应了苹果的这套系统。总的来说&#xff0c;安卓就像去吃自助餐&#xff1a;满眼的食物任你挑选…

hash hashcode变化_Web安全 | 没想到 Hash 冲突还能这么玩,你的服务中招了吗?

图 by: 石头背景 其实这个问题我之前也看到过&#xff0c;刚好在前几天&#xff0c;洪教授在某个群里分享的一个《一些有意思的攻击手段.pdf》&#xff0c;我觉得这个话题应该还是有不少人不清楚的&#xff0c;今天我就准备来“实战”一把&#xff0c;还请各位看官轻拍。洪强宁…

c#养老院老人信息管理系统源码 论文_包河区【失智老人养老院】

包河区【失智老人养老院】&#xff0c;光明老年护理院广受好评&#xff0c;本着“为政府分忧、帮子女尽孝”的服务宗旨;以“你把老人托给我&#xff0c;我把放心送给你”的服务理念;针对社会上有病的、子女无暇照顾的老年人&#xff0c;提供“爱心、耐心、热心”等全方位关怀服…

querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...

接英国文化教育协会通知&#xff0c;为满足广大考生日益增长的报考需求&#xff0c;英国文化教育协会(雅思考试主办方)即日宣布&#xff0c;在南京财经大学(仙林校区)增设用于英国签证及移民的雅思考试考点&#xff0c;首场考试日期为2019年12月21日。考点具体信息如下&#xf…

scandall pro找不到扫描仪_吉林机箱风扇灯条找哪家

吉林机箱风扇灯条找哪家&#xff0c;阶新科技&#xff0c;合作理念--开诚布公&#xff0c;互相信任&#xff0c;团结奋斗。吉林机箱风扇灯条找哪家&#xff0c; 拆开机箱的前置面板可以看到前置面板中间带有长条形的叉戟灯条设计&#xff0c;这样也就导致前置的机箱风扇只能装在…

PHP8编译swoole出错,swoole自定义错误的方法

创建错误处理器实现ErrorHandlerInterface接口namespace App;use Core\AbstractInterface\ErrorHandlerInterface;class Test implements ErrorHandlerInterface{function handler( $msg,$file null,$line null,$errorCode null,$trace ){echo "文件{$file}的第{$line}…

大数据技术架构_架构大数据图

大数据管理数据处理过程图大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察力。大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。随着业务的增长,大量和流程、规…

excel公式编辑器_Excel中自动更新超链接的文件目录,超简单

日常工作中&#xff0c;一个项目的文件往往会有很多个&#xff0c;在Excel中制作一个项目文件目录&#xff0c;可以快速方便的查看不同的文件。如下图所示&#xff0c;就是一个模拟的项目文件夹内的所有子文件夹&#xff0c;每个子文件夹内包含不同类型的文档&#xff0c;而且文…

蓝牙最新版本6.0_FIIL新品 T1 Lite,蓝牙5.2加持下的TWS耳机

说起汪峰老师&#xff0c;大家第一时间会想到他是国内内地著名男歌手、音乐创作人&#xff0c;摇滚先锋等几个身份&#xff0c;或者会联想到他是妻子著名国际影星章子怡。但如果你对音响或者耳机等音乐产品有所了解的话&#xff0c;你还会知道汪峰老师还亲自创立了一个知名的耳…

标准正态分布_正态分布,正态分布如何变换为标准正态分布

正态分布&#xff08;Normal distribution&#xff09;&#xff0c;又名高斯分布&#xff08;Gaussian distribution&#xff09;若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布&#xff0c;记为N(μ&#xff0c;σ^2)。其概率密度函数为正态分布的期望值μ决定了其位…

WSL安装Oracle,折腾记录:WSL(Windows Subsystem for Linux,Windows上的Linux子系统)安装后的环境配置-Go语言中文社区...

WSL(Windows Subsystem for Linux&#xff0c;Windows上的Linux子系统)的安装比较简单&#xff0c;教程网上较多&#xff0c;此处略过。安装后须要进行一系列配置(如软件源配置、中文配置、图形化配置、开发环境配置)才能投入使用&#xff0c;以Ubuntu为例(其他Debian、Kali、O…

cad钣金展开插件_户外垃圾桶顶盖钣金拆分展开方法

今天给大家讲解一个户外垃圾箱顶盖的拆分展开方法如下图拆分零件如下对称的两个零件如下打开SolidWorks&#xff0c;新建草图如下点击拉伸凸台命令设置参数如下点击倒圆角命令设置参数选择下面蓝色面绘制草图点击草图等距实体选择下图所示蓝色面向内偏移一个板厚1.5点击直线将下…

未能初始化appscan应用程序现在将关闭_企业区块链应用程序的两个关键问题

点击上方“蓝色字体”&#xff0c;选择 “设为星标”关键讯息&#xff0c;D1时间送达&#xff01;很多架构师在使用区块链技术之前需要考虑一些关键问题&#xff0c;而这些问题与数据隐私和区块链类型有关。公共区块链通过提供数据的透明度、完整性、可追踪性、真实性来协调信任…

laravel 分词搜索匹配度_搜索引擎工作原理

抓取网页。每个独立的搜索引擎都有自己的网页抓取程序爬虫(Spider)。爬虫顺着网页中的超链接&#xff0c;从这个网站爬到另一个网站&#xff0c;通过超链接分析连续访问抓取更多网页。被抓取的网页被称之为网页快照。由于互联网中超链接的应用很普遍&#xff0c;理论上&#xf…