在这篇文章中,我们将讨论以下话题:
- 为什么 Kafka 如此流行?
- 搜索引擎如何工作?
- 9 个不能忽略的网站性能指标
- 6 大数据管理模式
- 不同 API 客户端对比
搜索引擎工作原理
下图显示了搜索引擎的高级工作流程。
步骤 1 - 爬虫
Web 爬虫扫描互联网上的网页。他们从一个页面到另一个页面跟踪 URL 链接,并将 URL 存储在 URL 存储中。爬虫发现新内容,包括网页、图像、视频和文件。
步骤 2 - 索引
一旦网页被爬取,搜索引擎解析页面并将页面上找到的内容索引到数据库中。内容被分析和分类。例如,评估关键词、站点质量、内容新鲜度和许多其他因素,以了解页面是关于什么的。
步骤 3 - 排名
搜索引擎使用复杂的算法来确定搜索结果的顺序。这些算法考虑各种因素,包括关键词、页面相关性、内容质量、用户参与度、页面加载速度以及许多其他因素。一些搜索引擎还根据用户的过去搜索历史、位置、设备和其他个人因素个性化结果。
步骤 4 - 查询
当用户执行搜索时,搜索引擎在其索引中筛选以提供最相关的结果。
9 个网站性能指标
加载时间:Web 浏览器下载和显示网页所需的时间。以毫秒为单位测量。
首字节时间(TTFB):浏览器从 Web 服务器接收第一个数据字节所需的时间。TTFB 至关重要,因为它指示服务器处理流量的一般能力。
请求计数:浏览器必须发出的 HTTP 请求数量才能完全加载页面。此计数越低,网站对用户来说感觉越快。
DOMContentLoaded(DCL):网页完整 HTML 代码加载所需的时间。这发生得越快,用户就越快看到有用的功能。此时间不包括加载 CSS 和其他资产。
首屏加载时间:“首屏”是适合浏览器窗口而无需用户向下滚动的网页区域。这是用户首先看到的内容,通常决定他们是否会继续阅读网页。
首次内容绘制(FCP):浏览器开始”绘制”内容的时间。它可以是文本、图像,甚至是背景颜色。
页面大小:这是页面上显示的所有内容和资产的总文件大小。在过去几年中,网站的页面大小一直在不断增长。网页越大,加载所需的时间就越长。
往返时间(RTT):往返所需的时间。往返包括从浏览器到源服务器的请求以及从服务器到浏览器的响应。减少 RTT 是提高网站性能的关键方法之一。
渲染阻塞资源:某些资源会阻止页面的其他部分加载。跟踪此类资源的数量很重要。网页拥有的渲染阻塞资源越多,浏览器加载页面的延迟就越大。
6 大数据管理模式
缓存模式(Cache Aside):当应用需要访问数据时,它首先检查缓存。如果数据不存在(缓存未命中),它从数据存储中获取数据,将其存储在缓存中,然后将数据返回给用户。此模式特别适用于数据频繁读取但较少更新的场景。
物化视图(Materialized View):物化视图是包含查询结果的数据库对象。它是物理存储的,意味着数据实际上是在磁盘上计算和存储的,而不是在每次请求时动态生成。这可以显著加快复杂计算或聚合的查询时间,否则需要即时计算。物化视图在数据仓库和商业智能场景中特别有益,其中查询性能至关重要。
CQRS:CQRS 是一种架构模式,将读取和写入数据的模型分开。这意味着用于查询数据(读取)的数据结构与用于更新数据(写入)的结构分开。这种分离允许独立优化每个操作,提高性能、可扩展性和安全性。CQRS 在读写操作有非常不同要求的复杂系统中特别有用。
事件溯源(Event Sourcing):事件溯源是一种模式,其中应用状态的变化存储为事件序列。事件溯源不是仅存储域中数据的当前状态,而是存储随时间发生的所有变化(事件)的日志。这允许应用重建过去的状态,并提供变化的审计跟踪。事件溯源在需要复杂业务交易、可审计性以及能够回滚或重放事件的场景中是有益的。
索引表(Index Table):索引表模式涉及在数据库中创建针对特定查询操作优化的附加表。这些表充当辅助索引,旨在加快数据检索,而无需对主数据存储进行全表扫描。索引表在具有大数据集且频繁执行某些查询的场景中特别有用。
分片(Sharding):分片是一种数据分区模式,其中数据被分成更小、更易于管理的部分或”分片”,每个部分可以存储在不同的数据库服务器上。此模式用于在多台机器上分布数据以提高可扩展性和性能。分片在高容量应用中特别有效,因为它允许水平扩展,在多台服务器上分散负载以处理更多用户和交易。
API 客户端对比
Postman:广泛使用的 API 生命周期平台。它作为一种全面且多功能的 API 客户端出现,适用于企业级开发。它对各种协议的支持、强大的功能集和强大的性能使其成为复杂项目的热门选择。凭借直观的设计、协作功能和庞大的社区,Postman 在需要广泛功能和社区支持的场景中表现出色。
Insomnia:一个功能强大的 API 客户端,具有广泛的功能,完全开源使其成为寻求灵活性和持续增长的开发者的好选择。Insomnia 适合那些重视开源环境和活跃社区的人。
ReadyAPI:凭借其简单性和对较小项目的关注,是首选轻量级和响应迅速的工具的场景的理想选择。它提供基本功能,适合复杂性较低的项目。然而,对于需要广泛功能的更大、更复杂的项目,它可能不是最佳选择。
ThunderClient:一个 VS Code 插件,免费且用户友好,适合喜欢集成测试环境的开发者。然而,它缺乏广泛的功能和社区支持,这对于更大或更复杂的项目至关重要,使其更适合具有更简单需求的较小团队。此外,它对 Visual Studio Code 的依赖可能会限制对喜欢替代开发环境的用户的吸引力。习惯于功能丰富工具的经验用户可能会遇到学习曲线,并且可能会发现 ThunderClient 在某些功能上有所欠缺。
Hoppscotch:一个免费开源工具,专注于功能而非设计,提供轻量级的 Web 版本,支持各种协议。虽然它缺乏广泛的文档和社区支持,但它为寻求简单性的开发者提供了一种具有成本效益的解决方案。
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP104: How do Search Engines Work?。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。