关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

本文探讨了如何通过网站静态化技术提高动态网站的并发处理能力,包括利用缓存、CDN及动静分离等手段优化网站性能。

在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据库的网站是很难做到通过增加web服务器数量的方式来有效的增加网站并发访问能力的。但是现实情况是像淘宝、京东这样的大型动态网站在承担高并发的情况下任然能保证快速的响应,这其中有什么样的技术手段可以达到动态网站支撑高并发的场景了,这也许是每个做web开发的朋友都很感兴趣的问题,今天我将写一个新的系列来探讨下这个问题,希望我的经验和研究能给大多数人以启迪。这里要说明下,本系列的写法和存储的瓶颈的写法有所不同,本系列开始部分主要是讲解原理,后面部分会针对原理讲解具体的实现手段,如果有朋友感觉这种写法不适应,还请谅解。

  我个人总结下来,这些大型动态网站之所以可以做到能快速响应高并发,它们都是尽量让自己的网站静态化,当然这种静态化绝不是把网站就做成静态网站,而是在充分理解了静态网站在提升网站响应速度的基础上对动态网站进行改良,所以我这里首先要讨论下静态网站那些特点可以用于我们提升网站的响应速度。

  静态网站非常简单,它就是通过一个url访问web服务器上的一个网页,web服务器接收到请求后在网络上使用http协议将网页返回给浏览器,浏览器通过解析http协议最终将页面展示在浏览器里,有时这个网页会比较复杂点,里面包含了一些额外的资源例如:图片、外部的css文件、外部的js文件以及一些flash之类的多媒体资源,这些资源会单独使用http协议把信息返回给浏览器,浏览器从页面里的src,href、Object这样的标签将这些资源和页面组合在一起,最终在浏览器里展示页面。但是不管什么类型的资源,这些资源如果我们不是手动的改变它们,那么我们每次请求获得结果都是一样的。这就说明静态网页的一个特点:静态网页的资源基本是不会发生变化的。因此我们第一次访问一个静态网页和我们以后访问这个静态网页都是一个重复的请求,这种网站加载的速度基本都是由网络传输的速度,以及每个资源请求的大小所决定,既然访问的资源基本不会发生变化,那么我们重复请求这些资源,自己在那里空等不是很浪费时间吗?如是乎,浏览器出现了缓存技术,我们开发时候可以对那些不变的资源在http协议上编写相应指令,这些指令会让浏览器第一次访问到静态资源后缓存起这些静态资源,用户第二次访问这个网页时候就不再需要重复请求了,因为请求资源本地缓存,那么获取它的效率就变得异常高效。

  由于静态网站的请求资源是不会经常发生变化的,那么这种资源其实很容易被迁移,我们都知道网络传输的效率是和距离长短有关系的,既然静态资源很容易被迁移那么我们就可以把静态资源服务器按地域分布在多个服务节点上,当用户请求网站时候根据一个路由算法将请求落地在离用户最近的节点上,这样就可以减少网络传输的距离从而提升访问的效率,这就是我们长提的大名鼎鼎的CDN技术,内容分发网络技术。

  网络传输效率还和我们传输资源的大小有关,因此我们在资源传输前将其压缩,减小资源的大小从而达到提升传输效率的目的;另外,每个http请求其实都是一个tcp的请求,这些请求在建立连接和释放连接都会消耗很多系统资源,这些性能的消耗时常会比传输内容本身还要大,因此我们会尽力减少http请求的个数来达到提升传输效率的目的或者使用http长连接来消除建立连接和释放连接的开销(长连接的使用要看具体场景,这个我会在后面文章讲到)。

  其实雅虎提出的网站优化的14条建议大部分都是基于以上原理得出的,关于雅虎的14条件建议,本系列后面内容将做详细的讨论,这里就不展开了。

  我常常认为最佳的性能优化手段就是使用缓存了,但是缓存的数据一般都是那些不会经常变化的数据,上文里说到的浏览器缓存,CDN其实都是可以当做缓存手段来理解,它们也是提升网站性能最为有效的方式之一,但是这些缓存技术到了动态网站却变得异常不好实施,这到底是怎么回事了?

  首先动态网站和静态网站有何不同呢?我觉得动态网站和静态网站的区别就是动态网站网页虽然也有一个url,但是我们如果传输参数不同那么这个url请求的页面并不是完全一样,也就是说动态网站网页的内容根据条件不同是会发生改变的,但是这些变化的内容却是同一个url,url在静态网站里就是一个资源的地址,那么在动态网站里一个地址指向的资源其实是不同的。因为这种不同所以我们没法把动态的网页进行有效的缓存,而且不恰当的使用缓存还会引发错误,所以在动态网页里我们会在meta设定页面不会被浏览器缓存。

  如果每次访问动态的网页该网页的内容都是完全不同的,也许我们就没有必要写网站静态化的主题了,现实中的动态网页往往只是其中一部分会发生变化,例如电商网站的菜单、页面头部、页面尾部这些其实都不会经常发生变化,如果我们只是因为网页一小部分经常变化让用户每次请求都要重复访问这些重复的资源,这其实是非常消耗计算资源了,我们来做个计算吧,假如一个动态页面这些不变的内容有10k,该网页一天有1000万次的访问量,那么每天将消耗掉1亿kb的网络资源,这个其实很不划算的,而且这些重复消耗的宽带资源并没有为网站的用户体验带来好处,相反还拖慢了网页加载的效率。那么我们就得考虑拆分网页了,把网页做一个动静分离,让静态的部分当做不变的静态资源进行处理,动态的内容还是动态处理,然后在合适的地方将动静内容合并在一起。

  这里有个关键点就是动静合并的位置,这个位置的选择会直接导致我们整个web前端的架构设计。我们这里以java的web开发为例,来谈谈这个问题。

  java的web开发里我们一般使用jsp来编写页面,当然也可以使用先进点的模板引擎开发页面例如velocity,freemark等,不管我们页面使用的是jsp还是模板引擎,这些类似html的文件其实并不是真正的html,例如jsp本质其实是个servlet也就是一个java程序,所以它们的本质是服务端语言和html的一个整合技术,在实际运行中web容器会根据服务端的返回数据将jsp或模板引擎解析成浏览器能解析的html,然后传输这个html到浏览器进行解析。由此可见服务端语言提供的开发页面的技术其实是动静无法分离的源头,但是这些技术可以很好的完成动静资源中的动的内容,因此我们想做动静分离那么首先就要把静的资源从jsp或者模板语言里抽取出来,抽取出来的静态资源当然就要交给静态的web服务器来处理,我们常用的静态资源服务器一般是apache或ngnix,所以这些静态资源应该放置在这样的服务器上,那么我们是否可以在这些静态web服务器上做动静结合呢?答案是还真行,例如apache服务器有个模块就可以将它自身存储的静态资源和服务端传输的资源整合在一起,这种技术叫做ESI,这个时候我们可以把不变的静态内容制作成模板放置在静态服务器上,动态内容达到静态资源服务器时候,使用ESI或者CSI的标签,把动静内容结合在一起,这就完成了一个动静结合操作。这里就有一个问题了,我前面提到过CDN,CDN其实也是一组静态的web服务器,那么我们是否可以把这些事情放到CDN做了?理论上是可以做到,但是现实却是不太好做,因为除了一些超有钱的互联网公司,大部分公司使用的CDN都是第三方提供的,第三方的CDN往往是一个通用方案,再加上人家毕竟不是自己人,而且CDN的主要目的也不是为了做动静分离,因此大部分情况下在CDN上完成这类操作并不是那么顺利,因此我们常常会在服务端的web容器前加上一个静态web服务器,这个静态服务器起到一个反向代理的作用,它可以做很多事情,其中一件事情就是可以完成这个动静结合的问题。

  那么我们把这个动静结合点再往前推,推到浏览器,浏览器能做到这件事情吗?如果浏览器可以,那么静态资源也就可以缓存在客户端了,这比缓存在CDN效率还要高,其实浏览器还真的可以做到这点,特别是ajax技术出现后,浏览器来整合这个动静资源也就变得更加容易了。不过一般而言,我们使用ajax做动静分离都是都是从服务端请求一个html片段,到了浏览器后,使用dom技术将这个片段整合到页面里,虽然这个已经比全页面返回高效很多,但是他还是有问题的,服务端处理完请求最终返回结果其实都是很纯粹的数据,可是这些数据我们不得不转化为页面片段返回给浏览器,这本质是为纯粹的数据上加入了很多与服务端无用的结构,之所以说无用是因为浏览器自身也可以完成这些结构,为什么我们一定要让服务端做这个事情了?如是乎javascript的模板技术出现了,这些模板技术和jsp,velocity类似,只不过它们是通过javascript设计的模板语言,有了javascript模板语言,服务端可以完全不用考虑对页面的处理,它只需要将有效的数据返回到页面就行了,使用了javascript模板技术,可以让我们动静资源分离做的更加彻底,基本上所有的浏览器相关的东西都被静态化了,服务端只需要把最原始的数据传输到浏览器即可。讲到这里我们就说到了web前端最前沿的技术了:javascriptMVC架构了。

  好了今天就写到这里,本篇文章是网站静态化处理理论的总述,后面的文章我将会一点一滴的讲述实现网站静态化的各种技术实现细节。

帮我分析一下,这个算法大白话是什么意思 相关性是搜索最基础最重要的信号,旨在衡量搜索结果与用户查询的匹配程度。传统判别式模型直接输出标签或分数,在复杂语义建模方面能力有限。推动相关性建模从判别式向生成式演进,并融入思维链(Chain-of-Thought)推理能力,已成为重要研究方向。然而,现有方法大多依赖大量人工标注或合成的思维链数据进行监督微调,导致模型泛化能力不足,同时领域无关、自由形式的推理往往过于笼统,难以满足工业场景中复杂的业务标准。为解决上述问题,小红书搜索团队提出分段优势掩码策略(Stepwise Advantage Masking, SAM),在多步骤推理中引入轻量级过程监督,改进强化学习中的信用分配机制,从而提升模型对复杂业务相关性标准的理解与内化能力。该方法在业务实践中取得显著效果,相关研究成果已被 KDD 2026 录用。 论文标题:Optimizing Generative Ranking Relevance via Reinforcement Learning in Xiaohongshu Search论文地址:https://arxiv.org/abs/2512.00968 在当今互联网时代,搜索引擎已经成为人们获取信息的第一入口。无论是谷歌还是小红书,每天都有海量用户在搜索框中输入问题,希望得到最合适、最有价值的内容列表。然而,想要真正让用户满意,并不是把“最热门”的结果排在前面那么简单——核心挑战在于:什么才是“相关”的?系统怎样判断一条内容和用户的搜索意图是否真的匹配? 传统的搜索相关性模型大多是判别式模型,它们接收一个“查询 + 内容”的组合,然后输出一个分数或概率,表示两者是否相关。这类模型虽然运行稳定,但有两个长期痛点:(1)像黑盒一样,不解释理由:模型给出“相关/不相关”,却无法说明为什么,导致搜索业务同学也难以判断模型犯错的原因;(2)理解能力有限:用户搜索意图越来越复杂,仅靠单一分值,很难捕捉语义细节,比如隐含需求、场景差异、跨概念关联等。 随着大语言模型(Large Language Models,LLMs)的快速发展,搜索行业开始尝试一种全新的相关性建模方式 —— 生成式相关性模型(Generative Relevance Models, GRMs)。与传统只输出一个数字的模型不同,GRMs 会像人一样“解释过程”:先分析,再推理,然后再给结论,使搜索排序不仅更准确,也更可解释。 一个实例说明了显式推理增强了相关性评估的可解释性和有效性。对于查询“为什么植物需要光来生长?”,基于推理的模型利用与光合作用相关内容识别出部分相关性,而没有推理的模型则无法识别这种联系。 但目前行业方案仍面临两大瓶颈:(1)大多数方法依赖人工或其他模型合成的推理数据,成本极高且最终模型泛化性不足;(2)开域搜索语义复杂、意图多变,仅靠通用推理很难稳定泛化,尤其是小红书这种开放内容生态中,用户搜索话题覆盖生活、商品、问答、知识等多维场景,推理逻辑如果没有领域规则指引,往往会“想太多或者想错方向”,和业务团队的预期相差较远。 针对以上挑战,我们提出了一种在小红书搜索中生成式相关性建模新范式:基于强化学习的生成式推理相关性建模框架。  核心思想是 —— 让模型像人类评审员一样遵循规则、循序推理,而不是一上来拍脑袋给答案。 整个方案有两个关键设计: 2.1 将相关性建模转化为基于相关性标准的分步推理任务 模型不再直接输出标签,而是通过类似 Chain-of-Thought 的方式进行多步推理。我们直接接入:小红书内部专家制定通用的相关性标准针对模糊场景的细则 这些规则就像“行业版数学公理”,让模型不再盲猜,而是带着业务知识思考。这也是我们能在开放领域搜索中取得显著提升的关键原因。 总的来说共分为三大步:通用语义理解:查询与内容是否同类目、同主题、关键词是否有命中、核心内容占比是否足够多、通用的相关性打分是多少规则约束:是否触发业务发展所积累的特殊case(如多实体对比、问答等特殊场景)结果反思:依据前两步综合得出最终等级(共 5 档分级) 这样,模型输出的不仅是一个无法解释的相关性档位,而是一条有解释、有逻辑、有依据的推理链。 2.2 Stepwise Advantage Masking(SAM):让 RL 真正学会“思考相关性” 传统强化学习做相关性任务只看最终结果对不对,但在推理任务中:最终答案错,不代表前面每步都错;最终答案对,也可能是瞎蒙的。 SAM 的贡献就在于解决这一痛点:在推理链每一步让模型给出中间分数;自动比对每一步是否正确;只奖励正确的推理步骤,只惩罚真正有问题的步骤。 这让模型能够:学到可复用的推理逻辑;避免错误逻辑被强化; 过程监督的训练效率远高于人工训练过程监督模型或在线价值估计; 一句话总结:SAM 让强化学习从“只看结果”变为“理解过程” 总的来说,我们的工作首次在小红书搜索中验证了一条可规模化落地的新路径:用 RL 驱动生成式相关性判断,通过规则引导推理链,并利用 SAM 精准分配奖励信号。 3.1 离线指标为了全面地衡量线上分布,我们使用了两个基准数据集:RANDOM (随机分布)和 LONGTAIL(长尾分布),每个数据集包含 15000 个 人工标注的 查询-笔记对。 3.1.1 推理机制对监督微调(SFT)有益还是有害? 实验设置:基于相同SFT初始化模型,在固定数据、提示和奖励定义下,在SFT范式下,对比不同数据类型(w/wo reasoning)差异。 监督基线模型对比:SFT-Label(标签监督模型) 使用20万条纯标签数据训练,在RANDOM数据集上的2-ACC/5-ACC达90.26/78.64,在LONGTAIL数据集上达89.11/77.66,确立强基准性能。 监督推理模型 SFT-Reasoning v115万条思维链(CoT)数据训练 RANDOM:80.10/59.44 LONGTAIL:77.50/59.22 SFT-Reasoning v2:50万条CoT数据训练(数据量提升3.3倍) RANDOM:83.04/63.06 LONGTAIL:81.15/63.55 关键发现:即使增加3.3倍训练数据,推理模型性能仍显著落后于纯标签模型(RANDOM数据集差距>7%) 结论:直接引入多步推理链进行监督训练非但未提升效果,反而导致性能下降,这说明"多步推理并不能天然提升排序质量"。我们考虑,相较于纯优化 label 的 sft 方式,没有额外优化的带思维链的建模方式,由于其优化目标的增多,故而会导致指标天然不如前者。 3.1.2 过程监督强化学习能否真正增强相关性推理?基于上述发现,我们认为引入强化学习(RL)对思维轨迹进行额外的筛选优化是十分必要的 实验设置:基于相同SFT初始化模型,在固定数据、提示和奖励定义下,对比三种RL变体(PPO、OutcomeRL、ProcessRL),聚焦信用分配机制差异。 核心发现:1. PPO-Reasoning: 在SFT基础上采用PPO进行训练,依赖价值函数估计进行信用分配。优点是相对SFT有提升;缺点是价值估计偏差与不稳定的信用分配,难以充分利用推理结构,性能仅在random测试集上优于基线。 2. OutcomeRL-Reasoning:采用组级奖励归一化(归因到整条轨迹),避免价值估计误差并稳定策略优化。优点是整体性能优于PPO;局限是对轨迹中所有token均匀分配优势,无法区分各步对最终决策的真实贡献。性能:RANDOM(80.90 5-ACC)、LONGTAIL(77.03 5-ACC),多数指标超越PPO局限:轨迹内均匀分配奖励,忽略步骤贡献。 3. ProcessRL-Reasoning(SAM机制):该机制进行分步信用分配,将奖励更精确地归因到关键推理步骤,缓解虚假奖励传播,改善过程层面的学习信号质量。综合性能最优: RANDOM:81.23 5-ACC / 73.55 Macro F1LONGTAIL:77.72 5-ACC / 66.39 Macro F1显著提升稳健性与泛化能力(Macro F1指标) 结论:分步信用分配(SAM)较均匀分配(OutcomeRL)带来持续增益,尤其在复杂场景(LONGTAIL)。信用分配机制是优化推理模型的关键因素,SAM机制实现最均衡的性能提升。 3.2 在线指标teacher model 效果蒸馏到一个轻量级的 0.1B  BERT 模型中进行在线实验 我们做了为期7天的线上实验,在用户互动与检索结果相关性两方面均取得了显著且可量化的双重提升。结果证明了方案的有效性。 我们的长期目标是一次性训练模型,使业务团队能够在提示词中动态更新准则,从而让模型适应不断演变的业务逻辑。 我们将这一概念称为“Instruction Relevance-LLM”。该模型能够通过利用一套持续更新的规则来适应变化的业务需求。然而,实验结果显示,当前经强化学习(RL)微调的模型对训练期间使用的固定规则集发生了过拟合。当在推理阶段修改规则时,模型仍倾向于基于训练中学到的原始逻辑进行推理。我们推测,这种现象的原因在于RL训练期间的准则体系是静态的,模型未曾接触到动态的规则变化。未来工作将重点在训练过程中引入动态准则的变化,以提升鲁棒性并降低过拟合,确保模型在推理阶段能更有效地处理准则修改。
最新发布
01-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值