php 搜索引擎优化

php 搜索引擎优化

解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2022-09-21 17:10 • 来自相关话题

  解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地
  网站SEO搜索引擎优化培训(实训入门)——让理论落地
  网站SEO搜索引擎优化培训(注意,是导师面对面指导培训,非课堂理论培训),以移动网站为突破口(即移动优先的SEO优化策略和方法)),带动PC站的整体提升,给你一套快速可复用的解决方案。培训地点为广州,时间为1天。面向广州、深圳、东莞、长沙的在职人员(非个人站长)。通过周末的刻意练习,可以突破瓶颈,强化技能,提升SEO在企业应用领域的实践能力。.
  SEO不缺理论,缺的是实践验证。网站SEO搜索优化培训(实战),帮助学员将所学的SEO理论转化为实际应用能力,基于SEO理论+cms系统(使用wordpress),去除存井,付费关注核心,不是学习wordpress或者seo,而是将wordpress建站系统与seo网站优化理论和原理相结合,构建一个对搜索引擎友好的搜索引擎SEO规范。,移动优先内容类型网站,然后结合百度站长资源平台,第三方高权重自媒体平台等SEO工具,研究关键词,做好内容施工,学生最终将掌握是的,
  网站SEO搜索引擎优化培训(培训大纲)
  培训模块
  实用知识点
  知识点关键词
  学习模式
  WordPress 构建响应式 SEO 规范 网站
  网站环境:域名+空间选择/购买和解析
  域名空间解析 PHP7 mysql SSL 阿里云
  实践指导/刻意练习
  文件上传:使用 FTP 工具 (FileZilla)
  FTP FileZilla 文件上传/下载
  WordPress 使用:网站 上的版本选择和安装
  在 3 分钟内安装 WordPress
  WordPress使用:后台设置和SEO优化URL结构
  常规选项 媒体选项 永久链接 伪静态 .htaccess
  WordPress使用:主题模板的选择和购买
  免费/付费/安装主题响应式(自适应)_用户体验
  WordPress使用:主题模板的安装和配置
  自定义类别菜单主题选项小部件
  WordPress 全站优化:网站核心关键词确定和布局
  
  关键词研究/战略/布局/密度/长尾
  WordPress全站优化:首页/栏目/TAG/内容页TDK写作技巧
  标题描述关键字不堆叠关键词
  WordPress 全站优化:SEO 和 网站安全和实用插件
  自动内链远程图片提速 SITEMAP robots.txt 网站安全木马清理优化百度站长网站备份
  WordPress 全站优化:SEO 清单(独家)和搜索引擎提交
  检查缺少的站长平台提交站点
  两个基于 SEO 的 网站 内容构建点
  了解文章发帖和更新点、添加标签和页面的异同
  文章发布添加标签添加页面
  实践指导/刻意练习
  结合关键词布局,制定内容建设的长期策略
  关键词开发与扩展文章更新频率数
  使用内容采集 工具(确保内容新鲜度)
  内容实时度伪原创技术权威
  百度官方优质内容标准解读与理解
  如何制作优质内容?
  3百度站长资源平台等SEO工具的使用
  百度站长资源平台的使用
  站点属性 提交 SITEMAP Express收录 使用关键词 抓取诊断索引流量
  实践指导/刻意练习
  爱站 和 5118 工具的使用(付费功能)
  网站权重排名关键词库
  资源提供者/关键词库
  
  四大第三方高权平台做SEO
  第三方高权限平台有哪些?
  案例描述/操作要点
  机构注册/申请自媒体
  企业SEO优化的五个方向
  SEO外包策略
  如何找到靠谱的SEO外包公司
  探索交流/学习材料
  百度小程序
  认知百度小程序及规划指南
  注:大纲为整体参考。参加培训的学员可以根据自己的需求进行选择或关注,但不要偏离SEO主题。同时,也欢迎您带着问题前来参加培训。
  网站SEO搜索引擎优化培训(培训说明)
  时间:一天(8小时)
  地点:广州天河汽车站星巴克咖啡厅
  费用:800元
  *参加者需携带笔记本电脑。
  *学习者需要基础,了解一定的SEO理论和实践。另外,如果你能熟悉html、css,以及js/jquery和php+mysql建站方案(训练不需要改代码,但知道代码的意思就更好了) ,对于手机网站和回复网站对公式有一定了解,最好用网页编辑软件,比如dreamweaver。
  另外:SEO发展多年,不乏理论。您可以通过网络学习,也可以观看我们导师录制的一些视频(即将上线)。
  附:正确理解网站优化
  网站优化,主要指SEO部分,但不限于SEO。为什么?因为网站优化的意义更大,搜索引擎的SEO优化是其中的一部分,用户体验的网站优化也是其中的一部分。
  狭义的网站优化,即搜索引擎优化(SEO),是一种利用搜索引擎的搜索规则来提高目的网站在相关搜索引擎中排名的方式。
  广义上的网站优化,考虑的因素不仅仅是搜索引擎,还要充分满足用户的需求和特点,清晰的网站导航,完整的在线帮助。在此基础上,网站的功能和信息效果最好。
  网站优化包括SEO,两者是包容的,不是等价的。一句话概括就是:网站优化的目的是让网站更容易被搜索引擎收录搜索到,提升用户体验和转化率,进而创造价值。
  核心方法:搜索引擎优化的方法,怎么优化搜索引擎排名
  1:优化网站内容
  优化搜索引擎的方法有很多,但其中最重要的一种是优化网站内容。
  网站内容包括文字、图片、视频等,如果这个内容不引起人们的注意,那么网站就不是很有用。因此,网站要想在搜索引擎中排名靠前,就必须保证网站内容的质量。
  具体来说是为了保证文字内容的准确性和可读性,图片内容的质量和可视性,视频内容的流畅度和清晰度。只有这样,人们才会愿意在线浏览您的 网站。而如果你的网站能吸引人浏览,那它肯定是搜索引擎中的佼佼者。
  3:优化网站链接
  如果您想在搜索引擎优化方面取得成功,链接优化是您业务不可或缺的一部分。内部和外部链接对于 SEO 都很重要。
  链接优化的主要目的是吸引尽可能多的有效外部链接。这些外部链接对于增加 网站 的权限和流量至关重要。此外,有效的外部链接可以帮助 网站 在 SERP 中获得更好的排名。
  
  那么我们如何才能实现有效的链接优化呢?这里有一些简单易行的方法。
  找到有效的外部链接方法并不难,您只需做一些简单的市场调查。根据自己的行业选择合适的关键词进行市场调研。例如,您可以使用“衣服”、“裤子”、“上衣”等关键词 来选择对应的竞争对手。当然,您也可以使用 Google AdWords 工具进行竞争分析。
  内容优化并不难,你只需要保证你的内容能吸引其他网站或博客引用即可。此外,内容也应该有一定的多样性,而不是一成不变的。这样,别人是否愿意引用你作为信息或信息的来源?当然,您也可以通过内容广告鼓励他人引用您的内容。
  内容会随着时间的推移而过时。因此,如果你想保持网站上的内容比较新鲜,就需要不断的更新和补充内容。
  2:优化网站目录
  搜索引擎优化的方法有很多种,其中一个非常重要的方法是优化网站目录。
  网站目录优化可以让搜索引擎更容易理解你的网站内容,从而为你的网站带来更好的搜索排名。
  我们来看看如何优化网站目录。
  
  首先,对于网站目录,最好使用静态目录。
  静态目录让搜索引擎更容易理解你的网站内容,也可以帮助你的网站获得更好的搜索排名。
  其次,注意目录中文件名的命名。
  文件名必须准确反映文件的内容,以便搜索引擎能够识别。另外,不要在文件名中使用特殊字符,这会导致识别困难。
  最后,注意在目录中创建一个文件,告诉搜索引擎相关信息。该文件通常是 robots.txt。
  robots.txt 文件收录有关如何访问和使用您的 网站 内容的一些信息。因此,如果您希望搜索引擎首先读取和使用您的内容,则必须将其写入此文件中。
  使用上述方法优化您的网站目录将有助于您的网站在搜索引擎中排名更高。 查看全部

  解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地
  网站SEO搜索引擎优化培训(实训入门)——让理论落地
  网站SEO搜索引擎优化培训(注意,是导师面对面指导培训,非课堂理论培训),以移动网站为突破口(即移动优先的SEO优化策略和方法)),带动PC站的整体提升,给你一套快速可复用的解决方案。培训地点为广州,时间为1天。面向广州、深圳、东莞、长沙的在职人员(非个人站长)。通过周末的刻意练习,可以突破瓶颈,强化技能,提升SEO在企业应用领域的实践能力。.
  SEO不缺理论,缺的是实践验证。网站SEO搜索优化培训(实战),帮助学员将所学的SEO理论转化为实际应用能力,基于SEO理论+cms系统(使用wordpress),去除存井,付费关注核心,不是学习wordpress或者seo,而是将wordpress建站系统与seo网站优化理论和原理相结合,构建一个对搜索引擎友好的搜索引擎SEO规范。,移动优先内容类型网站,然后结合百度站长资源平台,第三方高权重自媒体平台等SEO工具,研究关键词,做好内容施工,学生最终将掌握是的,
  网站SEO搜索引擎优化培训(培训大纲)
  培训模块
  实用知识点
  知识点关键词
  学习模式
  WordPress 构建响应式 SEO 规范 网站
  网站环境:域名+空间选择/购买和解析
  域名空间解析 PHP7 mysql SSL 阿里云
  实践指导/刻意练习
  文件上传:使用 FTP 工具 (FileZilla)
  FTP FileZilla 文件上传/下载
  WordPress 使用:网站 上的版本选择和安装
  在 3 分钟内安装 WordPress
  WordPress使用:后台设置和SEO优化URL结构
  常规选项 媒体选项 永久链接 伪静态 .htaccess
  WordPress使用:主题模板的选择和购买
  免费/付费/安装主题响应式(自适应)_用户体验
  WordPress使用:主题模板的安装和配置
  自定义类别菜单主题选项小部件
  WordPress 全站优化:网站核心关键词确定和布局
  
  关键词研究/战略/布局/密度/长尾
  WordPress全站优化:首页/栏目/TAG/内容页TDK写作技巧
  标题描述关键字不堆叠关键词
  WordPress 全站优化:SEO 和 网站安全和实用插件
  自动内链远程图片提速 SITEMAP robots.txt 网站安全木马清理优化百度站长网站备份
  WordPress 全站优化:SEO 清单(独家)和搜索引擎提交
  检查缺少的站长平台提交站点
  两个基于 SEO 的 网站 内容构建点
  了解文章发帖和更新点、添加标签和页面的异同
  文章发布添加标签添加页面
  实践指导/刻意练习
  结合关键词布局,制定内容建设的长期策略
  关键词开发与扩展文章更新频率数
  使用内容采集 工具(确保内容新鲜度)
  内容实时度伪原创技术权威
  百度官方优质内容标准解读与理解
  如何制作优质内容?
  3百度站长资源平台等SEO工具的使用
  百度站长资源平台的使用
  站点属性 提交 SITEMAP Express收录 使用关键词 抓取诊断索引流量
  实践指导/刻意练习
  爱站 和 5118 工具的使用(付费功能)
  网站权重排名关键词库
  资源提供者/关键词库
  
  四大第三方高权平台做SEO
  第三方高权限平台有哪些?
  案例描述/操作要点
  机构注册/申请自媒体
  企业SEO优化的五个方向
  SEO外包策略
  如何找到靠谱的SEO外包公司
  探索交流/学习材料
  百度小程序
  认知百度小程序及规划指南
  注:大纲为整体参考。参加培训的学员可以根据自己的需求进行选择或关注,但不要偏离SEO主题。同时,也欢迎您带着问题前来参加培训。
  网站SEO搜索引擎优化培训(培训说明)
  时间:一天(8小时)
  地点:广州天河汽车站星巴克咖啡厅
  费用:800元
  *参加者需携带笔记本电脑。
  *学习者需要基础,了解一定的SEO理论和实践。另外,如果你能熟悉html、css,以及js/jquery和php+mysql建站方案(训练不需要改代码,但知道代码的意思就更好了) ,对于手机网站和回复网站对公式有一定了解,最好用网页编辑软件,比如dreamweaver。
  另外:SEO发展多年,不乏理论。您可以通过网络学习,也可以观看我们导师录制的一些视频(即将上线)。
  附:正确理解网站优化
  网站优化,主要指SEO部分,但不限于SEO。为什么?因为网站优化的意义更大,搜索引擎的SEO优化是其中的一部分,用户体验的网站优化也是其中的一部分。
  狭义的网站优化,即搜索引擎优化(SEO),是一种利用搜索引擎的搜索规则来提高目的网站在相关搜索引擎中排名的方式。
  广义上的网站优化,考虑的因素不仅仅是搜索引擎,还要充分满足用户的需求和特点,清晰的网站导航,完整的在线帮助。在此基础上,网站的功能和信息效果最好。
  网站优化包括SEO,两者是包容的,不是等价的。一句话概括就是:网站优化的目的是让网站更容易被搜索引擎收录搜索到,提升用户体验和转化率,进而创造价值。
  核心方法:搜索引擎优化的方法,怎么优化搜索引擎排名
  1:优化网站内容
  优化搜索引擎的方法有很多,但其中最重要的一种是优化网站内容。
  网站内容包括文字、图片、视频等,如果这个内容不引起人们的注意,那么网站就不是很有用。因此,网站要想在搜索引擎中排名靠前,就必须保证网站内容的质量。
  具体来说是为了保证文字内容的准确性和可读性,图片内容的质量和可视性,视频内容的流畅度和清晰度。只有这样,人们才会愿意在线浏览您的 网站。而如果你的网站能吸引人浏览,那它肯定是搜索引擎中的佼佼者。
  3:优化网站链接
  如果您想在搜索引擎优化方面取得成功,链接优化是您业务不可或缺的一部分。内部和外部链接对于 SEO 都很重要。
  链接优化的主要目的是吸引尽可能多的有效外部链接。这些外部链接对于增加 网站 的权限和流量至关重要。此外,有效的外部链接可以帮助 网站 在 SERP 中获得更好的排名。
  
  那么我们如何才能实现有效的链接优化呢?这里有一些简单易行的方法。
  找到有效的外部链接方法并不难,您只需做一些简单的市场调查。根据自己的行业选择合适的关键词进行市场调研。例如,您可以使用“衣服”、“裤子”、“上衣”等关键词 来选择对应的竞争对手。当然,您也可以使用 Google AdWords 工具进行竞争分析。
  内容优化并不难,你只需要保证你的内容能吸引其他网站或博客引用即可。此外,内容也应该有一定的多样性,而不是一成不变的。这样,别人是否愿意引用你作为信息或信息的来源?当然,您也可以通过内容广告鼓励他人引用您的内容。
  内容会随着时间的推移而过时。因此,如果你想保持网站上的内容比较新鲜,就需要不断的更新和补充内容。
  2:优化网站目录
  搜索引擎优化的方法有很多种,其中一个非常重要的方法是优化网站目录。
  网站目录优化可以让搜索引擎更容易理解你的网站内容,从而为你的网站带来更好的搜索排名。
  我们来看看如何优化网站目录。
  
  首先,对于网站目录,最好使用静态目录。
  静态目录让搜索引擎更容易理解你的网站内容,也可以帮助你的网站获得更好的搜索排名。
  其次,注意目录中文件名的命名。
  文件名必须准确反映文件的内容,以便搜索引擎能够识别。另外,不要在文件名中使用特殊字符,这会导致识别困难。
  最后,注意在目录中创建一个文件,告诉搜索引擎相关信息。该文件通常是 robots.txt。
  robots.txt 文件收录有关如何访问和使用您的 网站 内容的一些信息。因此,如果您希望搜索引擎首先读取和使用您的内容,则必须将其写入此文件中。
  使用上述方法优化您的网站目录将有助于您的网站在搜索引擎中排名更高。

解决方案:佛山招聘seo搜索引擎优化工程师信息

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-09-21 17:09 • 来自相关话题

  解决方案:佛山招聘seo搜索引擎优化工程师信息
  工作职责:
  1.监控网站关键词排名变化,监控和研究竞争对手及其他网站相关做法,并制定优化公司的战略和计划网站 ,使用seo规则优化网站源码,维护网站关键词排名;
  2.负责站外链接的创建和维护,负责官方微博和微信公众号的运营和推广,利用微信公众号和官方微博提升公司形象和知名度;
  3.利用互联网资源,通过门户网站、论坛、分类信息、搜索引擎、微博、sns、视频网站、博客等第三方渠道推广家庭网络, 和电子邮件各种平台,与第三方网站交换流量、数据、反向链接或服务,以增加网站的流量和知名度;
  4.制定推广流程,不断开发整合推广资源;配合其他部门举办各类活动,做好宣传推广工作;
  
  5.确定推广目标,制定有效的推广方式,根据各媒体特点进行专项推广,跟踪反馈市场计划的推广执行情况;
  6.参与网站广告、营销等主题活动如创意、文案等工作,撰写广告标语、宣传视频脚本等;
  建立促销效果评估模型,编写促销效果分析报告,规划和调整促销方案,通过对促销资源数据和客户反馈的分析,不断调整促销策略,最大限度地利用促销资源。
  工作要求:
  1.大专以上学历,1-2年以上互联网seo推广经验;
  2.熟悉搜索引擎优化原理,熟悉网站alexa排名,掌握以百度为首的搜索引擎的基本排名规则,精通搜索引擎优化;
  
  3.熟悉div+css,对js、mysql、php、python、apache server等一种或多种编程语言有一定了解;熟练使用各种seo工具和数据分析工具;
  4.对数据变化敏感,具有强大的数据分析和挖掘能力;研究竞争对手和其他网站seo/sem营销策略,提出合理建议和对策;
  5.具有良好的沟通能力、强烈的责任心、创新意识和学习能力;
  6.思路清晰,组织能力强,学习能力强,数据分析能力强,与程序员沟通合作的能力和团队合作意识。
  工作地址:-广东-佛山-乐从镇河滨北路248号欧普皇庭1楼(欧普家居)
  优化的解决方案:移动seo的关键词如何优化
  1:移动端seo的基本原则
  移动端SE0优化方法:
  根据目前市场上主流的手机操作系统的不同,将移动端SEO分为安卓和苹果两类。
  安卓手机搜索优化:谷歌是安卓手机默认的搜索引擎,所以安卓手机的SEO基本原则就是针对谷歌。针对谷歌的优化方法也和PC端差不多,都是要做好关键词优化、内容优化、外链优化、速度优化等。
  与PC端不同之处在于:
  (1)在安卓手机上,很多应用都内置了浏览器,如UC浏览器、QQ浏览器、360浏览器、搜狗浏览器。这些应用内置的浏览器只要能够上网就可以访问一般的网站。但是这些应用内置的浏览器并不能使用cookie来保存用户数据。而且这些浏览器对javascript也不是很友好。因此我们在开发安卓手机端的时候要注意这些问题。
  
  (2)在安卓手机上, Googlebot-Mobile是一个很重要的因素。Googlebot-Mobile只能通过wifi来抓取数据,而且数据相对来说也不是很全面。因此我们在开发安卓手机端的时候要注意这些问题。
  (3)安卓手机由于使用的是webkit内核的浏览器,因此我们可以使用webkit开发工具来开发我们安卓手机端的页面。
  (4)对于一些ajax请求,我们要使用jsonp来代替ajax请求来避免数据丢失问题。
  2:如何优化移动端seo
  移动SEO优化关键词的首要任务是确定搜索量和转化率。要做到这一点,需要了解搜索引擎的工作原理,并对关键词进行适当的分析。
  根据搜索引擎的工作原理,关键词的优化主要有两个方面:一是根据关键词的相关性来优化;二是根据关键词的流量来优化。
  
  对关键词进行相关性优化意味着通过分析关键词之间的相关性来找出与目标关键词最相似或最相关的一些词语,并将这些词语用于网站内容中。这样做能够帮助我们在搜索引擎中获得更好的排名。
  对关键词进行流量优化意味着通过分析用户在不同时间或不同地点对不同关键词的使用情况来找出能够带来流量最大化的一些可选方案。使用这些方法可以使我们的网站在不同时间、不同地点获得最佳流量。
  3:seo优化工具
  移动SEO优化关键词有很多方法可以使用,但是要想真正优化关键词,需要从多方面入手。下面我就来介绍几个比较常用的方法。
  在进行移动SEO优化时,关键词选择是非常重要的。如果你选择的关键词不够准确或者不能代表你的产品或者服务,就会导致用户无法找到你的网站。而且,如果你选择的关键词过于热门,势必会被竞争对手压制,导致用户无法找到你的网站。因此,在选择关键词时一定要仔细斟酌。
  在进行移动SEO优化时,一定要将关键词分为不同的类别。这样可以帮助你进行有效的优化。例如:将关键词分为品牌关键词、产品关键词、服务关键词、地域性关键词等。这样可以使你的优化工作更加有效率。
  使用关键词工具可以帮助你准确找到相应的关键词。而且,如果你使用的是好的工具,还可以帮助你监测竞争对手的关键词。这样一来,你就能够及时更新自己的优化方案,避开竞争对手的压制。 查看全部

  解决方案:佛山招聘seo搜索引擎优化工程师信息
  工作职责:
  1.监控网站关键词排名变化,监控和研究竞争对手及其他网站相关做法,并制定优化公司的战略和计划网站 ,使用seo规则优化网站源码,维护网站关键词排名;
  2.负责站外链接的创建和维护,负责官方微博和微信公众号的运营和推广,利用微信公众号和官方微博提升公司形象和知名度;
  3.利用互联网资源,通过门户网站、论坛、分类信息、搜索引擎、微博、sns、视频网站、博客等第三方渠道推广家庭网络, 和电子邮件各种平台,与第三方网站交换流量、数据、反向链接或服务,以增加网站的流量和知名度;
  4.制定推广流程,不断开发整合推广资源;配合其他部门举办各类活动,做好宣传推广工作;
  
  5.确定推广目标,制定有效的推广方式,根据各媒体特点进行专项推广,跟踪反馈市场计划的推广执行情况;
  6.参与网站广告、营销等主题活动如创意、文案等工作,撰写广告标语、宣传视频脚本等;
  建立促销效果评估模型,编写促销效果分析报告,规划和调整促销方案,通过对促销资源数据和客户反馈的分析,不断调整促销策略,最大限度地利用促销资源。
  工作要求:
  1.大专以上学历,1-2年以上互联网seo推广经验;
  2.熟悉搜索引擎优化原理,熟悉网站alexa排名,掌握以百度为首的搜索引擎的基本排名规则,精通搜索引擎优化;
  
  3.熟悉div+css,对js、mysql、php、python、apache server等一种或多种编程语言有一定了解;熟练使用各种seo工具和数据分析工具;
  4.对数据变化敏感,具有强大的数据分析和挖掘能力;研究竞争对手和其他网站seo/sem营销策略,提出合理建议和对策;
  5.具有良好的沟通能力、强烈的责任心、创新意识和学习能力;
  6.思路清晰,组织能力强,学习能力强,数据分析能力强,与程序员沟通合作的能力和团队合作意识。
  工作地址:-广东-佛山-乐从镇河滨北路248号欧普皇庭1楼(欧普家居)
  优化的解决方案:移动seo的关键词如何优化
  1:移动端seo的基本原则
  移动端SE0优化方法:
  根据目前市场上主流的手机操作系统的不同,将移动端SEO分为安卓和苹果两类。
  安卓手机搜索优化:谷歌是安卓手机默认的搜索引擎,所以安卓手机的SEO基本原则就是针对谷歌。针对谷歌的优化方法也和PC端差不多,都是要做好关键词优化、内容优化、外链优化、速度优化等。
  与PC端不同之处在于:
  (1)在安卓手机上,很多应用都内置了浏览器,如UC浏览器、QQ浏览器、360浏览器、搜狗浏览器。这些应用内置的浏览器只要能够上网就可以访问一般的网站。但是这些应用内置的浏览器并不能使用cookie来保存用户数据。而且这些浏览器对javascript也不是很友好。因此我们在开发安卓手机端的时候要注意这些问题。
  
  (2)在安卓手机上, Googlebot-Mobile是一个很重要的因素。Googlebot-Mobile只能通过wifi来抓取数据,而且数据相对来说也不是很全面。因此我们在开发安卓手机端的时候要注意这些问题。
  (3)安卓手机由于使用的是webkit内核的浏览器,因此我们可以使用webkit开发工具来开发我们安卓手机端的页面。
  (4)对于一些ajax请求,我们要使用jsonp来代替ajax请求来避免数据丢失问题。
  2:如何优化移动端seo
  移动SEO优化关键词的首要任务是确定搜索量和转化率。要做到这一点,需要了解搜索引擎的工作原理,并对关键词进行适当的分析。
  根据搜索引擎的工作原理,关键词的优化主要有两个方面:一是根据关键词的相关性来优化;二是根据关键词的流量来优化。
  
  对关键词进行相关性优化意味着通过分析关键词之间的相关性来找出与目标关键词最相似或最相关的一些词语,并将这些词语用于网站内容中。这样做能够帮助我们在搜索引擎中获得更好的排名。
  对关键词进行流量优化意味着通过分析用户在不同时间或不同地点对不同关键词的使用情况来找出能够带来流量最大化的一些可选方案。使用这些方法可以使我们的网站在不同时间、不同地点获得最佳流量。
  3:seo优化工具
  移动SEO优化关键词有很多方法可以使用,但是要想真正优化关键词,需要从多方面入手。下面我就来介绍几个比较常用的方法。
  在进行移动SEO优化时,关键词选择是非常重要的。如果你选择的关键词不够准确或者不能代表你的产品或者服务,就会导致用户无法找到你的网站。而且,如果你选择的关键词过于热门,势必会被竞争对手压制,导致用户无法找到你的网站。因此,在选择关键词时一定要仔细斟酌。
  在进行移动SEO优化时,一定要将关键词分为不同的类别。这样可以帮助你进行有效的优化。例如:将关键词分为品牌关键词、产品关键词、服务关键词、地域性关键词等。这样可以使你的优化工作更加有效率。
  使用关键词工具可以帮助你准确找到相应的关键词。而且,如果你使用的是好的工具,还可以帮助你监测竞争对手的关键词。这样一来,你就能够及时更新自己的优化方案,避开竞争对手的压制。

解决方案:网站内部优化怎么做?

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-09-21 16:17 • 来自相关话题

  解决方案:网站内部优化怎么做?
  把主要的关键词放在首页,并且必须出现在首页的标题和第一段文章,关键词的出现频率会影响收录@的程度>,但是不要叠加关键词,否则被搜索引擎处理的后果会很严重。主页的颜色和布局非常重要。如果不是大门户网站或者特殊需要,建议首页边框颜色不要超过三种,内容不要太复杂,最重要和最常用的信息应该是显示。出来吧。首页的优化也要注意页眉和页脚的优化,尽量把导航键、友情链接等放在这两个位置,这样客户也方便使用,搜索引擎也喜欢通过这些职位搜索网站内部链接或姓名链接。首页的链接一定要做好,不能有断链或者死链,可能会影响搜索引擎对内容的判断,造成网站收录@>问题。
  内页优化
  指通过首页访问的公司介绍、产品目录、信息反馈等栏目。一般我们把通过首页访问的内容称为内页。内页也应该像首页一样注重优化,内页也要针对每个不同的页面进行优化。关键词的页码内容设置,规则与首页类似,但内容权重没有首页高。访问内页内容时,注意入口和出口。入口是指从网站入口到内页的地方。应该尽可能的显眼、方便、直接,除非特别避免打开内页然后弹出页面。会给客户浏览造成障碍,也会给搜索引擎造成判断困难。内页的退出是指通过内容链接到其他地方。一般可以在首页、侧边栏、底部等,也可以通过产品栏目、网站推荐、网站热帖等引导客户去比较热门的地方或我们希望客户浏览的地方。
  
  网站静态化问题
  最原创的 网站 是一个静态页面。比如首页是index.html这样的格式,后来又引入了asp php等建站代码。网站为了提高信息生成速度,减轻网站硬件的负担,采用了动态显示方式。这种模式的好处是可以及时显示网站的动态,文章的发布,以及用户的动态,但是不会生成html文章,这个是一种虚拟的文章显示方式,我们看到的内容不需要直接存入网络硬盘,而是通过asp php代码动态显示。这对客户浏览来说是没有问题的,而且非常快捷方便,但是对于搜索引擎来说却很陌生,比如index.asp?jas=1453的格式,搜索引擎不认为是文章文章,认为只是代码,所以会影响收录@>。当然,这种情况越来越好。例如,谷歌的 收录@> 动态文件与静态文件基本相同。为了更好的迎合搜索引擎的爱好,我们只能把文章写成静态的。静态文件会相对增加硬盘空间,如果读取量大,会增加服务器的负担。所以有得也有失。于是产生了一种伪静态技术,就是通过代码将index.php?main=1234格式的文件伪装成1234.html的格式。其实文章本身的格式并没有改变,
  搜索引擎优化
  
  其实上面讨论的内容都和搜索引擎优化有关,大家也可以互相参考。除了网站内部网站的优化,搜索引擎优化中最重要的就是外部优化,也就是外链推广。外部链接为网站带来了强大的动力,为网站增加了更多的价值。有很多方法可以增加外部链接。最原创的就是友情链接,还可以添加一些流量链接,可以登录一些导航网站,也可以在一些热门论坛发帖,写博客,开分站等。当然,主要的问题是把流量导向你自己的网站,让更多的人浏览你自己的网站。搜索引擎优化的特点是可以' 不考虑人类思维的问题,而是根据搜索机器人访问的方式。如果机器人喜欢去,你就得去更多的地方,发帖写文章,一些主要门户网站的论坛搜索引擎网站几乎每隔几分钟就爬一次。如果做得好,你的网站很快就会被搜索引擎按照联想的原则找到!
  优化网站的使用和管理,
  为什么这也被提出来了?因为我们的 网站 是为人们使用和管理而构建的。如果这些不优化,再好的网站也是没用的。我们知道,如果一个人在注册您的用户名时需要经过 4-5 个步骤,他可能只需关闭 网站 并离开。但如果注册太容易,如果没有限制,很快就会成为垃圾帖和机器帖的天堂。所以一定要优化使用,注册时合理控制,注册后尽快使用。在管理方面,功能要全面,反馈要及时,管理人员能有效控制网站的内容和用户的浏览权限。. . 这些只能为每个 网站 设置不同,
  整套解决方案:SEO优化教程 | 手机移动端该怎么优化?
  移动互联网的推出,各位站长也纷纷的挤入了移动化网站,移动网站可以说是一个比一个做的漂亮,那么既然做了移动化的网站,那少不了的自然是SEO优化,在PC端上你的网站可能在某个词上有排名,但在移动搜索引擎上,未必你会优先排名展现。
  首先来看看我们需要针对的搜索引擎吧,也就是今年的移动搜索引擎使用份额。其他的可以忽略不计,重点我们考虑在百度,因为他在移动搜索引擎中份额占比是79%。
  一、URL
  
  大部分的移动网站都是有一个二级域名或者一个二级栏目做移动网站,其实这是不科学的,试想一下,你发布一篇文章,有两个URL有一模一样的内容,那就算你是一篇原创文章,那是不是也会变成了伪原创呢?在SEO的角度考虑,原创和伪原创差距是甚大呀!所以,如果条件允许,建议还是做自动响应的移动化站点,比如我的博客,你试着用浏览器的放大功能看看,是不是根据分辨率网站也有少许的变化呢?
  二、代码
  移动网站我们可以理解成一个微网站,在微网站的基础上,我们没必要把网站做的如此复杂(特殊功能除外),所以在代码上能够简洁就简洁,再说用户看网站不是看你网站代码多复杂,网站多美观,而是看你网站能不能在最短的时间找到他想要的答案。其次是通常情况下,手机浏览器是没有PC端浏览器那么强大,也就是说不是每一个JS在移动网站上都可以解析到,万一用户用的浏览器解析不了你的一个JS呢,那岂不是看到乱糟糟的?还有一个非常严肃的问题,当用户使用2G网络,要是你把网站做的如此复杂,一时半会儿加载不出来咋办呢?
  三、避免耗费用户流量
  在移动互联网上,用户最关心的啥?流量嘛,如果你做一个网站,一打开就是视频、flash、弹窗,用户会感觉到可怕,你可能会认为用户不知情在你网站上耗费的流量,但如果有一个铁杆粉丝一直在关注你的网站,却因为你网站耗费流量过多,没到月底没流量了,你觉得这事儿是好事还是坏事。在技术层面来讲,Apple产品不支持Flash功能,很大一部分智能手机用户用不了这项功能,同样,很多智能手机也不支持Java,所以这只是两方面都是不讨好的做法。
  
  四、页面细节优化
  与PC端的网站一样,页面不可确实keywords、description,可能在PC端上,我们不加上关键词和描述搜索引擎一样可以识别到你的具体内容是什么,但是我们并无法确定到移动搜索引擎是否可以识别这一点,所以我们做到多一事不如少一事,尽量按照常规出牌。
  移动化网站也非常在乎死链接和到处链接,所以尽量做好404、403 等,如果内容死链希望重定向到首页,最好通过302跳转,不要使用javascript 跳转。其次是外部链接,都说外部链接影响排名的并不多,但出于刚刚兴趣的移动搜索引擎,我们没有办法不做到面面俱到!
  五、跳转
  一般情况下我们的PC网站上都可以看到一个手机版的按钮,或者是当手机输入域名的时候会自动跳转到手机网站,这一技术改变了手机用户的用户体验,如果还有不懂的朋友,可以去学习学习网站自动识别手机端与PC端,但跳转归跳转,偏偏还有用户就是喜欢用手机看PC网站,所以我们还的在手机网站上做一个按钮让移动网站跳回PC端,这就是用户体验的一个细节处理。 查看全部

  解决方案:网站内部优化怎么做?
  把主要的关键词放在首页,并且必须出现在首页的标题和第一段文章,关键词的出现频率会影响收录@的程度>,但是不要叠加关键词,否则被搜索引擎处理的后果会很严重。主页的颜色和布局非常重要。如果不是大门户网站或者特殊需要,建议首页边框颜色不要超过三种,内容不要太复杂,最重要和最常用的信息应该是显示。出来吧。首页的优化也要注意页眉和页脚的优化,尽量把导航键、友情链接等放在这两个位置,这样客户也方便使用,搜索引擎也喜欢通过这些职位搜索网站内部链接或姓名链接。首页的链接一定要做好,不能有断链或者死链,可能会影响搜索引擎对内容的判断,造成网站收录@>问题。
  内页优化
  指通过首页访问的公司介绍、产品目录、信息反馈等栏目。一般我们把通过首页访问的内容称为内页。内页也应该像首页一样注重优化,内页也要针对每个不同的页面进行优化。关键词的页码内容设置,规则与首页类似,但内容权重没有首页高。访问内页内容时,注意入口和出口。入口是指从网站入口到内页的地方。应该尽可能的显眼、方便、直接,除非特别避免打开内页然后弹出页面。会给客户浏览造成障碍,也会给搜索引擎造成判断困难。内页的退出是指通过内容链接到其他地方。一般可以在首页、侧边栏、底部等,也可以通过产品栏目、网站推荐、网站热帖等引导客户去比较热门的地方或我们希望客户浏览的地方。
  
  网站静态化问题
  最原创的 网站 是一个静态页面。比如首页是index.html这样的格式,后来又引入了asp php等建站代码。网站为了提高信息生成速度,减轻网站硬件的负担,采用了动态显示方式。这种模式的好处是可以及时显示网站的动态,文章的发布,以及用户的动态,但是不会生成html文章,这个是一种虚拟的文章显示方式,我们看到的内容不需要直接存入网络硬盘,而是通过asp php代码动态显示。这对客户浏览来说是没有问题的,而且非常快捷方便,但是对于搜索引擎来说却很陌生,比如index.asp?jas=1453的格式,搜索引擎不认为是文章文章,认为只是代码,所以会影响收录@>。当然,这种情况越来越好。例如,谷歌的 收录@> 动态文件与静态文件基本相同。为了更好的迎合搜索引擎的爱好,我们只能把文章写成静态的。静态文件会相对增加硬盘空间,如果读取量大,会增加服务器的负担。所以有得也有失。于是产生了一种伪静态技术,就是通过代码将index.php?main=1234格式的文件伪装成1234.html的格式。其实文章本身的格式并没有改变,
  搜索引擎优化
  
  其实上面讨论的内容都和搜索引擎优化有关,大家也可以互相参考。除了网站内部网站的优化,搜索引擎优化中最重要的就是外部优化,也就是外链推广。外部链接为网站带来了强大的动力,为网站增加了更多的价值。有很多方法可以增加外部链接。最原创的就是友情链接,还可以添加一些流量链接,可以登录一些导航网站,也可以在一些热门论坛发帖,写博客,开分站等。当然,主要的问题是把流量导向你自己的网站,让更多的人浏览你自己的网站。搜索引擎优化的特点是可以' 不考虑人类思维的问题,而是根据搜索机器人访问的方式。如果机器人喜欢去,你就得去更多的地方,发帖写文章,一些主要门户网站的论坛搜索引擎网站几乎每隔几分钟就爬一次。如果做得好,你的网站很快就会被搜索引擎按照联想的原则找到!
  优化网站的使用和管理,
  为什么这也被提出来了?因为我们的 网站 是为人们使用和管理而构建的。如果这些不优化,再好的网站也是没用的。我们知道,如果一个人在注册您的用户名时需要经过 4-5 个步骤,他可能只需关闭 网站 并离开。但如果注册太容易,如果没有限制,很快就会成为垃圾帖和机器帖的天堂。所以一定要优化使用,注册时合理控制,注册后尽快使用。在管理方面,功能要全面,反馈要及时,管理人员能有效控制网站的内容和用户的浏览权限。. . 这些只能为每个 网站 设置不同,
  整套解决方案:SEO优化教程 | 手机移动端该怎么优化?
  移动互联网的推出,各位站长也纷纷的挤入了移动化网站,移动网站可以说是一个比一个做的漂亮,那么既然做了移动化的网站,那少不了的自然是SEO优化,在PC端上你的网站可能在某个词上有排名,但在移动搜索引擎上,未必你会优先排名展现。
  首先来看看我们需要针对的搜索引擎吧,也就是今年的移动搜索引擎使用份额。其他的可以忽略不计,重点我们考虑在百度,因为他在移动搜索引擎中份额占比是79%。
  一、URL
  
  大部分的移动网站都是有一个二级域名或者一个二级栏目做移动网站,其实这是不科学的,试想一下,你发布一篇文章,有两个URL有一模一样的内容,那就算你是一篇原创文章,那是不是也会变成了伪原创呢?在SEO的角度考虑,原创和伪原创差距是甚大呀!所以,如果条件允许,建议还是做自动响应的移动化站点,比如我的博客,你试着用浏览器的放大功能看看,是不是根据分辨率网站也有少许的变化呢?
  二、代码
  移动网站我们可以理解成一个微网站,在微网站的基础上,我们没必要把网站做的如此复杂(特殊功能除外),所以在代码上能够简洁就简洁,再说用户看网站不是看你网站代码多复杂,网站多美观,而是看你网站能不能在最短的时间找到他想要的答案。其次是通常情况下,手机浏览器是没有PC端浏览器那么强大,也就是说不是每一个JS在移动网站上都可以解析到,万一用户用的浏览器解析不了你的一个JS呢,那岂不是看到乱糟糟的?还有一个非常严肃的问题,当用户使用2G网络,要是你把网站做的如此复杂,一时半会儿加载不出来咋办呢?
  三、避免耗费用户流量
  在移动互联网上,用户最关心的啥?流量嘛,如果你做一个网站,一打开就是视频、flash、弹窗,用户会感觉到可怕,你可能会认为用户不知情在你网站上耗费的流量,但如果有一个铁杆粉丝一直在关注你的网站,却因为你网站耗费流量过多,没到月底没流量了,你觉得这事儿是好事还是坏事。在技术层面来讲,Apple产品不支持Flash功能,很大一部分智能手机用户用不了这项功能,同样,很多智能手机也不支持Java,所以这只是两方面都是不讨好的做法。
  
  四、页面细节优化
  与PC端的网站一样,页面不可确实keywords、description,可能在PC端上,我们不加上关键词和描述搜索引擎一样可以识别到你的具体内容是什么,但是我们并无法确定到移动搜索引擎是否可以识别这一点,所以我们做到多一事不如少一事,尽量按照常规出牌。
  移动化网站也非常在乎死链接和到处链接,所以尽量做好404、403 等,如果内容死链希望重定向到首页,最好通过302跳转,不要使用javascript 跳转。其次是外部链接,都说外部链接影响排名的并不多,但出于刚刚兴趣的移动搜索引擎,我们没有办法不做到面面俱到!
  五、跳转
  一般情况下我们的PC网站上都可以看到一个手机版的按钮,或者是当手机输入域名的时候会自动跳转到手机网站,这一技术改变了手机用户的用户体验,如果还有不懂的朋友,可以去学习学习网站自动识别手机端与PC端,但跳转归跳转,偏偏还有用户就是喜欢用手机看PC网站,所以我们还的在手机网站上做一个按钮让移动网站跳回PC端,这就是用户体验的一个细节处理。

php搜索引擎优化应该从两方面来解决,欢迎批评

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-09-08 22:23 • 来自相关话题

  php搜索引擎优化应该从两方面来解决,欢迎批评
  php搜索引擎优化主要是对网站进行站内优化,通过改进网站结构和服务器配置,从而提高网站在搜索引擎中的关键词排名,这些都需要长期的坚持做,可以说没有捷径可走。做好搜索引擎优化可以帮助提高您网站的网站访问量以及提高您网站在seo中的排名。
  关键字以及页面结构。关键字可以是长尾词,也可以是短语,关键字还可以是从站外搜过来的词。对于页面结构,这个要看你是做购物频道还是针对人群的,不同的需求会使用不同的网站结构。
  说说个人见解,写的不好请见谅!我从事网站优化工作四年,具体见识浅薄,欢迎批评指正!我觉得网站seo优化应该从两方面来解决,
  
  1、网站seo优化工作:一般来说,每个域名平台都会设置一个icp备案号,一般是在域名注册人那里设置。登录域名注册人的工作邮箱,可以从他们那里查到一个验证码。
  1、按照他们工作邮箱里的验证码输入验证码之后,就可以查询到一个账号是否成功。
  2、假如查询不到账号密码的话,那就是属于某一台电脑才能注册到你的网站,一般来说,淘宝京东都是用阿里云服务器做网站的,价格不贵。
  
  3、可以跟这台电脑的主人联系,让他帮你注册一个账号,你也可以解绑一些账号,更换一个电脑。这样注册的账号就可以直接登录你的网站。
  4、淘宝京东的邮箱要么是一些大企业的站点,所以,邮箱等级可能比较高,有可能有验证码。换手机账号,验证码可能不通过。
  5、解绑一些账号,登录后,就可以登录了。接下来就是接近网站本身的优化和排名了。
  2、网站主题和标题优化:知道自己的网站的标题,就可以根据上文讲到的按照验证码输入进去,再通过常规手段验证一遍验证码,看账号是否有问题。 查看全部

  php搜索引擎优化应该从两方面来解决,欢迎批评
  php搜索引擎优化主要是对网站进行站内优化,通过改进网站结构和服务器配置,从而提高网站在搜索引擎中的关键词排名,这些都需要长期的坚持做,可以说没有捷径可走。做好搜索引擎优化可以帮助提高您网站的网站访问量以及提高您网站在seo中的排名。
  关键字以及页面结构。关键字可以是长尾词,也可以是短语,关键字还可以是从站外搜过来的词。对于页面结构,这个要看你是做购物频道还是针对人群的,不同的需求会使用不同的网站结构。
  说说个人见解,写的不好请见谅!我从事网站优化工作四年,具体见识浅薄,欢迎批评指正!我觉得网站seo优化应该从两方面来解决,
  
  1、网站seo优化工作:一般来说,每个域名平台都会设置一个icp备案号,一般是在域名注册人那里设置。登录域名注册人的工作邮箱,可以从他们那里查到一个验证码。
  1、按照他们工作邮箱里的验证码输入验证码之后,就可以查询到一个账号是否成功。
  2、假如查询不到账号密码的话,那就是属于某一台电脑才能注册到你的网站,一般来说,淘宝京东都是用阿里云服务器做网站的,价格不贵。
  
  3、可以跟这台电脑的主人联系,让他帮你注册一个账号,你也可以解绑一些账号,更换一个电脑。这样注册的账号就可以直接登录你的网站。
  4、淘宝京东的邮箱要么是一些大企业的站点,所以,邮箱等级可能比较高,有可能有验证码。换手机账号,验证码可能不通过。
  5、解绑一些账号,登录后,就可以登录了。接下来就是接近网站本身的优化和排名了。
  2、网站主题和标题优化:知道自己的网站的标题,就可以根据上文讲到的按照验证码输入进去,再通过常规手段验证一遍验证码,看账号是否有问题。

10 亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-08-29 18:15 • 来自相关话题

  10 亿级流量的搜索前端,是怎么做架构升级的?
  - 前言 -
  前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  - 什么是前端架构? -
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  - 百度移动端背景及问题 -
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  图 2:业务需求的三个方向
  - 解决思路 -
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  
  图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  - 落地方案 -
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  
  图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  一、跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  图 11:平台过渡的三个阶段
  二、页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  - 总结 -
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。 查看全部

  10 亿级流量的搜索前端,是怎么做架构升级的?
  - 前言 -
  前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  - 什么是前端架构? -
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  - 百度移动端背景及问题 -
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  图 2:业务需求的三个方向
  - 解决思路 -
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  
  图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  - 落地方案 -
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  
  图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  一、跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  图 11:平台过渡的三个阶段
  二、页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  - 总结 -
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。

php搜索引擎优化主要有3种:1.常规

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-08-16 15:06 • 来自相关话题

  php搜索引擎优化主要有3种:1.常规
  php搜索引擎优化主要有3种:1.常规seo:专业的搜索引擎优化一般都是由专业的人员来操作的,很多是没有专业的人员来操作,前期会有一些前期的投入,会有一些页面的建设,短期内可能获得一定的效果,但是长期来看,对网站的伤害是很大的。2.关键词排名优化:经常有人会把php搜索引擎优化和seo混在一起的,或者都分在seo和php这两个词,其实真正的php搜索引擎优化应该是属于seo中的,真正的关键词排名优化的话还是要从网站内部的内容来进行改进,最终实现用户能够搜索到你,每个关键词都有对应的一些关键词的排名优化作用。
  
  3.泛站整站优化:顾名思义,就是在全站资源中,某些网站做一个整站快照、百度快照等等。好像不同的厂商,提供的快照是不一样的,有的提供:1篇,2篇等等,只要按照各自厂商的要求进行整站的优化即可。笔者最常接触到的是泛站整站优化,像:博客、论坛、自媒体等等的网站,都可以在设置的时候整站快照,把百度快照也一并设置为你的百度快照,优化的话,这个整站快照对你网站是有些许的作用的。
  
  以上只是几个最常见的小说php搜索引擎优化的相关情况,但是整站优化这个可以根据你自己公司的需求来确定,每个公司对php搜索引擎优化的要求会有不同。不管怎么样,如果你真想要做好,笔者还是建议如果你自己能够做好这块工作的话,找一个专业的人员来操作,毕竟作为搜索引擎的厂商而言,是不希望自己的公司被其他网站超越的。
  另外,不要自己做seo,请专业的团队操作一些,如果你自己做的话,这些一般都需要花钱的,如果只是一些seo基础的话,可以做一些wordpress优化,在小程序、安卓应用等等进行优化,如果你有足够的经验来做这些,其实基本对于你而言,反而可以省去一大笔钱。 查看全部

  php搜索引擎优化主要有3种:1.常规
  php搜索引擎优化主要有3种:1.常规seo:专业的搜索引擎优化一般都是由专业的人员来操作的,很多是没有专业的人员来操作,前期会有一些前期的投入,会有一些页面的建设,短期内可能获得一定的效果,但是长期来看,对网站的伤害是很大的。2.关键词排名优化:经常有人会把php搜索引擎优化和seo混在一起的,或者都分在seo和php这两个词,其实真正的php搜索引擎优化应该是属于seo中的,真正的关键词排名优化的话还是要从网站内部的内容来进行改进,最终实现用户能够搜索到你,每个关键词都有对应的一些关键词的排名优化作用。
  
  3.泛站整站优化:顾名思义,就是在全站资源中,某些网站做一个整站快照、百度快照等等。好像不同的厂商,提供的快照是不一样的,有的提供:1篇,2篇等等,只要按照各自厂商的要求进行整站的优化即可。笔者最常接触到的是泛站整站优化,像:博客、论坛、自媒体等等的网站,都可以在设置的时候整站快照,把百度快照也一并设置为你的百度快照,优化的话,这个整站快照对你网站是有些许的作用的。
  
  以上只是几个最常见的小说php搜索引擎优化的相关情况,但是整站优化这个可以根据你自己公司的需求来确定,每个公司对php搜索引擎优化的要求会有不同。不管怎么样,如果你真想要做好,笔者还是建议如果你自己能够做好这块工作的话,找一个专业的人员来操作,毕竟作为搜索引擎的厂商而言,是不希望自己的公司被其他网站超越的。
  另外,不要自己做seo,请专业的团队操作一些,如果你自己做的话,这些一般都需要花钱的,如果只是一些seo基础的话,可以做一些wordpress优化,在小程序、安卓应用等等进行优化,如果你有足够的经验来做这些,其实基本对于你而言,反而可以省去一大笔钱。

php搜索引擎优化哪家强?官方的有阿里云、谷歌

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-08-06 07:05 • 来自相关话题

  php搜索引擎优化哪家强?官方的有阿里云、谷歌
  php搜索引擎优化哪家强?官方的有阿里云、腾讯云、谷歌。一般企业很难搞定他们,因为他们都是搞大系统的,一般他们在某地区只有一个数据中心。这次小峰给大家介绍一个做php搜索引擎优化的公司,非常好用,在他们的官网找了专人全程负责。主要是独家解析,只有小峰这里才能买得到,这就算是王牌了!据说他们一个月是做20000+php的搜索引擎优化,不是小峰吹,这些流量和效果都是其他竞争对手抢不走的,所以才能保证每月销售额20000+。
  
  目前小峰市场的使用率是90%以上。这个公司叫做贝索斯汇讯优化公司,大家要注意它是隶属于杭州昆仑信息科技股份有限公司。请看下图,打开官网可以根据地区查看业务。总的来说这家公司专门研究phpseo优化,php竞价,seosem,做的非常专业。希望能给大家带来一定的帮助。内容运营:说通俗点,就是通过文章把你的企业品牌、产品关键词发布在百度、谷歌等搜索引擎上。
  只要能够被搜索引擎收录,你的网站一定会排名靠前,优质文章还会获得搜索优化的流量扶持,获得谷歌、百度官方信任,获得排名,就会获得很多收入。销售:销售分为两部分,一部分是在线网站销售,一部分是线下实体店销售。这个很重要,线上线下联合才能获得最大的利益,在线上做的好,必须线下门店要做的非常好,线下如果做的不好,在线上做的再好,也是白搭。
  
  客服:一定要拥有专业销售人员,和客服沟通以及售后服务,可以快速为公司带来经济效益。我们了解到,使用贝索斯汇讯优化平台做phpseo优化,在线上门店只需要每月补助1.5万元的租金即可。可以说使用phpseo优化,是一次性投入,但是回报率是长远的投资。网站建设:网站也要进行优化,内部优化就是页面优化,简单点就是对网站打造布局和内容进行优化。
  外部优化就是竞价,竞价引流。这样网站才能获得流量,收入才能起来。因为phpseo优化是必须通过长期的努力才能见到效果的,而且见效慢,只有坚持使用才能看到效果。没有多大的持续性,但是前景好,现在百度相继推出app搜索排名优化之后,选择一个好的seo排名是必须的,否则难以获得流量,也难以达到营收。以上这些就是贝索斯汇讯优化这个平台为大家详细解析phpseo优化,希望给phpseo优化工作带来一定的帮助。
  还有一点,要注意要看他们的分工,而不是一个人操刀。然后这家公司前面也介绍过,公司做企业站建设。这个公司都在上海。独特的专业优势是很多企业都需要做关键词排名优化的,所以必须要了解这个公司做什么。 查看全部

  php搜索引擎优化哪家强?官方的有阿里云、谷歌
  php搜索引擎优化哪家强?官方的有阿里云、腾讯云、谷歌。一般企业很难搞定他们,因为他们都是搞大系统的,一般他们在某地区只有一个数据中心。这次小峰给大家介绍一个做php搜索引擎优化的公司,非常好用,在他们的官网找了专人全程负责。主要是独家解析,只有小峰这里才能买得到,这就算是王牌了!据说他们一个月是做20000+php的搜索引擎优化,不是小峰吹,这些流量和效果都是其他竞争对手抢不走的,所以才能保证每月销售额20000+。
  
  目前小峰市场的使用率是90%以上。这个公司叫做贝索斯汇讯优化公司,大家要注意它是隶属于杭州昆仑信息科技股份有限公司。请看下图,打开官网可以根据地区查看业务。总的来说这家公司专门研究phpseo优化,php竞价,seosem,做的非常专业。希望能给大家带来一定的帮助。内容运营:说通俗点,就是通过文章把你的企业品牌、产品关键词发布在百度、谷歌等搜索引擎上。
  只要能够被搜索引擎收录,你的网站一定会排名靠前,优质文章还会获得搜索优化的流量扶持,获得谷歌、百度官方信任,获得排名,就会获得很多收入。销售:销售分为两部分,一部分是在线网站销售,一部分是线下实体店销售。这个很重要,线上线下联合才能获得最大的利益,在线上做的好,必须线下门店要做的非常好,线下如果做的不好,在线上做的再好,也是白搭。
  
  客服:一定要拥有专业销售人员,和客服沟通以及售后服务,可以快速为公司带来经济效益。我们了解到,使用贝索斯汇讯优化平台做phpseo优化,在线上门店只需要每月补助1.5万元的租金即可。可以说使用phpseo优化,是一次性投入,但是回报率是长远的投资。网站建设:网站也要进行优化,内部优化就是页面优化,简单点就是对网站打造布局和内容进行优化。
  外部优化就是竞价,竞价引流。这样网站才能获得流量,收入才能起来。因为phpseo优化是必须通过长期的努力才能见到效果的,而且见效慢,只有坚持使用才能看到效果。没有多大的持续性,但是前景好,现在百度相继推出app搜索排名优化之后,选择一个好的seo排名是必须的,否则难以获得流量,也难以达到营收。以上这些就是贝索斯汇讯优化这个平台为大家详细解析phpseo优化,希望给phpseo优化工作带来一定的帮助。
  还有一点,要注意要看他们的分工,而不是一个人操刀。然后这家公司前面也介绍过,公司做企业站建设。这个公司都在上海。独特的专业优势是很多企业都需要做关键词排名优化的,所以必须要了解这个公司做什么。

亿级流量搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 89 次浏览 • 2022-07-18 05:01 • 来自相关话题

  亿级流量搜索前端,是怎么做架构升级的?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  <p>特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:</p>
  <p style="text-align: center;">长按订阅更多精彩▼
  如有收获,点个在看,诚挚感谢</p> 查看全部

  亿级流量搜索前端,是怎么做架构升级的?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  <p>特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:</p>
  <p style="text-align: center;">长按订阅更多精彩▼
  如有收获,点个在看,诚挚感谢</p>

金沙数据-《大话搜索引擎》第一季之初遇搜索(二)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2022-07-07 06:32 • 来自相关话题

  金沙数据-《大话搜索引擎》第一季之初遇搜索(二)
  本季内容概览:大概会花费4篇左右的文章为大家讲解一个普适率80%左右的垂直搜索引擎,内容涵盖需求分析、架构设计、模块切分、各种填坑、效果评测 直至上线运行。
  本篇知识点概览:工程切分、倒排、分词
  一、放水篇(如果时间少请直接跳过阅读 干货篇 ; 特别声明:如果有时间建议放水篇也阅读一下,无水万物枯萎凋零 搜索亦然)
  上篇话说架构模块切分完毕,按照国际惯例我以为一切准备就绪只等光膀子开始码砖了,然而如大家所想我以为我以为的就是我以为的!就像帝都雾霾来袭站在国贸看到的天空中飘着一个小三角板似的怪物,走近一看才知道是这么大一个大裤衩!!
  进入A公司的前一个周基本上都是在熟悉一些东西(对我来说应该是调研,因为对搜索啥都不知道),记得杨总当时安排了3人日让我把solr tutorial看一遍并且将里面的demo也做一遍。对于我大学四年英文考试是否需要补考全看阅卷老师心情的水平来说当时面对满篇的e文网页也是压力山大, 现在想象也是醉了,本身不多的内容我竟然吭哧了三天才算理清楚solr到底是个啥玩意!但是一路走过来才发现自己是幸运的,solr tutorial寥寥数页文章无疑是对搜索小白最好的入门教材,它使你能快速上手感知搜索是个什么东东而又不至于一开始就陷入各种烧脑无聊的理论知识甚至算法无法自拔。
  这几年遇见过刚入搜索的许多朋友直接一上来就要来高大上的比如自己写分词、自己定制排序、几十条数据用solrcloud,其中理由大都很有趣 比如领导要求、公司要求、xxx公司就是这么搞的、还有的更搞笑的是好不容易有一次自己做主的机会自己想挑战一把极限!其实按照他们实际需求来说大部分并无必要 。最后的结果大部分可能是搜索做的焦头烂额,被挑战的头晕眼花在搜索的职业发展道路上中途退场了,凡此种种不免深感惋惜。
  solr tutorial熟悉完毕后我迎来了第一个3人日的小任务LogCleaner, 对 你没看错是LogCleaner(日志清理工),也许你会纳闷这是什么鬼和搜索有毛关系? 咱们看看这个LogCleaner工程要实现的功能:A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。是的这个工程本身和搜索没什么关系,我当时也很纳闷 这难道是进少林寺学武术先要做一年扫地僧考验一下不成。当天回家想了一下四个人的团队除了杨总外地主和老曹都是五年以上的搬砖老司机,这些打扫卫生的活当然非我莫属了,于是也便释然了。接下来如你所猜,又来了LogStorer(日志存储工)、LogDumper(日志转储工) ,就这样我在日志中死扛度过了两个月(后来才知道这些项目也都是整个搜索中的一块块积木,是不是有点像武侠了`(*∩_∩*)′)。当然在这两个月期间课余时间也没敢懈怠,几乎是在公交车上看完了《搜索引擎lucene+Heritix》,然后又拉着老曹跑人大打印店把《lucene in action》的英文第一版打印了厚厚一摞继续啃(当时lucene in action只有第一版英文版,并且一直缺货,老曹说人民大学的打印店打印很便宜就索性下个电子版的去打印了)这两本书跟随我在北京搬家搬了无数次,直到最近才把它们拿去送给后来者了。
  由于项目紧张晚上加班经常一块吃饭,私下里我也好奇地主和老曹都在做什么高大上的东西,这一看也是惊呆了。 老曹一直在倒腾词(那时候对词库没概念),将老的银杏搜索的热搜词一堆一堆的弄过来然后从网上找一些餐饮相关的词合并进来,还有天天分析餐厅标题,将那些和餐饮八竿子都打不找的词肉眼一个个找出来去掉,天天满屏词乱飞也是头要炸了。开了几次会议后终于确定我们选择自己做分词采用正向匹配最小的算法(餐饮行业的词大部分是菜谱和餐厅名,大部分都在2-5个汉字左右 2-3个的占到80%以上,并且根据老曹整理的实际餐厅数据场景和杨总跟大家的分析正向匹配最小算法效率相对较高并且歧义很小即使有歧义也可以自己修改词库控制)。这样也就带来了一个问题如果ABC是个词 AB也是个词,则ABC永远不会被切分出来,那么词库中到底是留AB呢还是留ABC呢?只有把这类的词找出来看具体场景才能人工判断决定留谁。于是老曹开始写一个脚本处理大约20w的词库将这种包含关系的词找出来,比较清晰的记得当时老曹特意让我们等一下他让脚本跑起来再一块去吃晚饭,吃完晚饭回来跑了一个多小时的脚本还是没有跑完,一直到晚上九点半大家准备撤了回家的时候老曹突发警告说“脚本还没跑完大家都别懂我电脑啊!”,第二天一大早大家好奇的聚集在一起准备看看脚本跑出的结果,这一看心里拔凉拔凉的, word 哥 竟然还在跑!!!疯掉了! 后来大家一块查原因才知道由于是临时脚本没怎么估计性能问题,结果脚本里有几个for循环,计算量超万万亿了!!!
  与此同时地主正在设计一个mysql大表并和业务人员去理各种字段关系以及triger设计,由于涉及的数据源和表都超多所以工作也是不轻松,这工作也持续了近两个月中间也开了无数次的评审会。杨总一直在辅导我们每个人应该如何做各自模块和工程并时刻做着救火队员的工作。
  是的,如大家所见我们前两个月并没有大家期望的高大上的搜索技术,相反大都是些世俗的脏活累活,甚至以后也很少会有多么高大上的技术工程。现在回过头来看,一个好的搜索的确离不开甚至80%以上的活都是很平常的脏活累活。每个细节、模块、工程的精细雕琢才有可能做出一些还不错的成绩。搜索就像生活,相对于诗和远方更多的还是些柴米油盐酱醋茶,时不时的换个尿不湿也是常事o(* ̄▽ ̄*)o。
  二、干货篇(友情提醒:如果您是一名搜索初学者这部分请仔细阅读,以免出现整个系列文章读完后搜索技术点忘得一干二净,而每篇里面扯的蛋都历历在目、栩栩如生的情况!)
  工程拆分细节
  架构中模块拆分和工程拆分大部分时候会不一样,一般来说模块拆分更抽象将意思表达出来即可,更侧重宏观上的控制;工程拆分则要侧重团队之间的沟通协作方便和代码依赖交叉最小化,以及大块的代码如何解耦和复用上 相对来说会细一些。上篇里提到过的架构图中的模块大家可能还有印象,下面这幅图里是整个工程图,给大家一个直观的感受后接下来会对每个工程做详细描述。
  如上图所示,我把大概15个工程按优先级的维度分成了三大部分,因为业务需求的不同大部分第一次做垂直搜索的人员可能只需要用到其中的一部分或两部分,这样整理应该会更通俗易懂一些。
  core(核心): 这部分是必须有的,也就是作为一个搜索引擎必须具备的工程组件,就像作为一辆汽车起码要有四个轮子,作为一个人起码要有四肢和大脑一样。
  
  extend(扩展) :这部分可有可无,按照我接触的一些初次需要搜索功能的平台来说真实需求几乎90%的情况不需要,然而你懂的,实际上大部分情况下需求会被放大。现在回过头来看这些就像我们的生活,有车有房的并不比月光族的生活质量和幸福感会高一样,同样对于搜索刚刚起步的阶段做了这一部分扩展如果驾驭不了往往会使得整个搜索更差,甚至整个项目远远超期或者中途夭折。
  assistant(辅助):这部分比较难以形容也相对杂乱些,几个词形容一下大家自己悟吧:锦上添花、打酱油、工匠精神、吃瓜群众、未雨绸缪、杞人忧天。(整个《大话搜索引擎》系列会有好多工程会属于这部分,也许只能系列文章全写完后才能确切讲清楚这部分是干啥的)
  core(核心):
  1.DataCollector(数据采集工程) 将变更餐厅相关信息近实时的采集到搜索库中。 输入:分属于两个类型的数据库(mysql,oracle)的20多张餐厅相关信息表。输出:整理好的单表数据到SeachDB。此工程在部署的时候是一个单独的后台守护进程运行。
  2.IndexBuilder(索引创建工程) 负责将采集好的变更的餐厅数据近实时的发给solr让其创建索引。输入:SearchDB中的数据源; 输出:整理好的xml文档发给solr。 此工程在部署的时候是一个单独的后台守护进程运行。
  3.SearchService(搜索服务工程) 接受web发来的搜索请求执行搜索操作,并做一些业务转换。 输入:搜索请求参数、业务配置文件、solr返回的源数据; 输出:整理好的规范化的xml数据。 此工程在部署的时候是一运行在web容器中的标准http服务。
  4.triger(数据触发器) 数据源DB上的触发器,负责将变更的数据触发到对应的表中。输入:20多张餐厅信息表的变更事件;输出:变更信息表中的数据(只标识增删改和餐厅业务主键)。此“工程”是DB上的机制,只是开发些triger脚本即可。
  extend(扩展):
  1.WordSegmentation(分词工程) 将索引和查询的字符串分词,包含正向匹配最小的分词器(主分词器)、特殊符号分词器、儿话音分词器、全半角转化分词器。输入:字符串 ; 输出:一个个词。比如输入:“西直门肯德基餐厅” 输出:“西直门” ”肯德基“ “餐厅”。此工程在部署的时候是以jar包的形式内嵌到solr中的。(分词这块具体在搜索中是啥意思文章后半部分会细讲)
  2.SearchProxy(搜索代理工程) 接受SearchService的业务api参数进行审核解析为solr的复杂语法,并查询solr数据返回原生xml信息。 输入:SearchService查询请求参数 输出:solr返回的原生xml数据;此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  3.UpdateFacetCfg(切面数据配置更新工程) 负责将数据库变更的需要做切面统计的数据从数据库下载好组织好生成xml文件供SearchService使用,例如:区域、菜系、价格区间、地铁沿线 等等。 输入:数据库原始信息或者运营人员提的数据变更; 输出:树状facet.xm结构文件。此工程在部署的时候是一个单独的后台守护进程运行,定期向SearchService中输送最新的切面数据文件facet.xml,SearchService则有自动检测文件变更的线程将最新文件加载到内存中使用。两个工程通过文件的形式解耦。
  4.SearchLogic(搜索逻辑功能) 扩展solr功能提供一些灵活的查询模型。例如And, OR, Mix(分词查询语句之间先And查询,无结果自动切换到OR查询)。输入:模型参数;输出:改写的查询语法解析。 这块要改写不少solr的代码,至于当时为什么要做这块原因大概这么几点。A:SearchService提供给多个业务系统用,查询精确度要求不一样 B:solr当时的版本(1.4)在语法解析上会有一些错误在配置同义词的情况下 And和OR关系解析不正确导致同义词配置形同虚设(餐饮行业好多同义词 比如 菜花花菜 土豆山药蛋 等等)。C:对于先And后Or的查询在solr层hack会减少一次网络传输,性能会更好些。此工程在部署的时候是以jar包的形式内嵌到solr中的。
  5.SearchSimilarity(搜索相关度工程) 修改solr的相关度函数代码使其更适合垂直行业搜索。其实改动的很少,但是效果很不错。这块暂时不细讲,因为涉及的内容太多,后续的文章中会花费大的篇幅去讲解。感兴趣的同学可以提前看看了解一下下图的lucene评分公式,在没讲解这个公式前很难把修改的东西起了什么作用讲明白。
  score(q,d)=(overlap/maxOverlap)·(1/(q.getBoost()^2·∑(idf(t)·t.getBoost())^2))·∑(tf(tin d)·idf(t)^2·t.getBoost()·doc.getBoost()·lengthNorm·∏f.getBoost())
  6.Monitor(搜索监控工程)监控系统主要负责两个工作,一个是发现任何solr服务不可用则自动发邮件通知搜索团队每个人,另一个则是将solr服务下线通知LB让SearchService端立即停止请求不可用的solr,并同时周期性检测服务是否已经恢复,恢复的话则会自动通知LB上线并发邮件通知搜索团队每个人。此工程在部署的时候是一个单独的后台守护进程运行。
  assistant(辅助):
  1. LoadBalance(负责均衡工程) load balance这个模块是用来做负载均衡,比如三个solr slave可能有一台机器配置好,则在流量分配上可以多分一些。另外比如solr服务挂掉了 LB则不会上SearchService上的请求打过来。此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  2. ResParticiple(餐饮行业分词测试工程) 这个工程本来可以不提的,本身上线的时候也不会用到,但是它的确又扮演了非常重要的角色。这个工程在分词器进行修改后会拿餐厅标题、热搜字符串等经常被检索的字段分类随机跑出来一定数量(上万)的分词效果供大家检测分词是否合理词库是否完善。这几乎也是初次建立自己词库和分词器的必经之路,尽管繁琐甚至大部分是人肉工作,但是相当有必要!! 此工程不需要部署,通俗点讲是良心活、工匠活。3.LogCleaner(日志清理工程)主要负责 A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。 上线部署的时候是多部署,多个运行在后台的守护进程,主要工作是给各个搜索工程吐出的搜日志做清理或保留工作。(其实现在来看这块的功能更常规的做法应该是log4j+shell脚本去处理) 4.LogStorer(日志存储工程) 将SearchService的文件日志读取存储到关系数据库中,以备后续统计分析使用。主要是针对搜索参数的比如:搜索词、ip、用户id、选择的筛选条件、排序条件等等。这块其实是搜索用户数据采集的雏形,后面的经历中会对这块做更深入讲解,其实大部分搜索的后期优化来源于和搜索相关甚至不相关的数据仓库数据。此工程在部署的时候是一个单独的后台守护进程运行。 5.LogDumper(日志转储工程) 将一个月前的搜索日志信息转储到搜索日志历史表中,这块就不多解释了把,你懂的。此工程在部署的时候是一个单独的后台守护进程行。
  
  搜索引擎基本术语
  文档(doc):搜索引擎中的一条数据记录,比如一个餐厅、一个商品。
  文档id(docId):搜索引擎内部唯一标识一篇文档的标记,就像我们的身份证编号一样。
  词:查询、索引 存储的最小原子单位。比如汉字的最细粒度一个字也可以说是一个词。
  分词器:将文本或字符串分解成一个一个词的工具。
  倒排索引表:以词为索引记录每个词都在哪些文档中出现过。
  正排索引表:以文档id为索引,记录相应的文档存储的位置。
  正排倒排讲解
  搜索引擎中常听的的两个术语是正排索引和倒排索引(高大上的称呼可以是 forward index和 inverted index),到底是什么意思呢?大家对索引这个词应该并不陌生,比如说目录索引,邮编索引等等。通俗的讲我们经常阅读书籍的目录索引就是一种正排索引,比如你有天想唱《儿歌三百首》中的“葫芦娃”这首歌,通过目录很快找到了“葫芦娃”的页码(docId:文档id)在36页,于是很快找到了整个歌曲。再比如有天你的领导发你的紧急邮件中有一字“擦”,你认识但是不知道什么意思,于是拿起了祖传的《新华字典》查到了这个"擦"字在第585页,此处的585即可理解场倒排索引id,字典的组织结构是比较像搜索引擎的倒排索引结构的。
  ok? 如果这个不太好理解,拿我们就那更正规的讲法讲解一遍。
  假如有一天你的女神脑洞大开让你将包含“妈妈”这个词的儿歌全部唱一遍,那我们看如果根据正排索引来找出所有歌曲的话则只能一个一个歌曲看,如果那天《儿歌三百首》增长到《儿歌三亿首》是不是这种场景要崩溃香菇的感觉?那如果我们用倒排索引来查呢? “妈妈”这个词对应的倒排列表(文档Id列表)为 1、6、9 而根据这三个文档id再到正排表中快速查到 “妈妈带我沙滩跑”、“傻妈妈”、“喂妈妈” so fast !so easy!咱们再加点难度,又假设你女神突然想起一首歌叫 ”xxx小雪人“而xxx以及记不清具体是啥了,现在我们使用正排索引无疑还是蓝廋香菇!那看看伟大的倒排表如何呢:“小雪人”分词为 “小” “雪人”,对应的倒排docid列表分别是 “小”:2、5、7 ; “雪人“:2,两个docid列表取交集得到docid列表为2,则根据正排表快速找到”门口有个小雪人“ 于是你的女神向你投来了崇拜的目光,如此估计你下个双十一不用一个人过了。
  分词讲解
  聊搜索引擎,分词就不可能避开,也许有人说外文比如英文搜索引擎应该不用分词吧,是的你猜错了!分词的好坏直接影响到召回率(查询出来的真正相关的文档数/总相关的文档数)和查准率(查询出来的真正相关的文档数/查询出来的文档总数)。词是在搜索引擎中的最小原子单位,在lucene的体系又称之为term或token。既然是最小的原子单位就意味着不可再分,不管是查询还是索引都是以这个最小单位为基础。 那么什么叫分词的,就是将一个长字符串通过一定的规则或者词库分解成多个小字符串的过程而这里被分解后的小字符串即是搜索引擎中的最小单位的一个实体--词。所以搜索引擎中的”词“和我们生活中说的”词“并不是同一个概念!! ”张三买了一张三角桌子“ 可以分词为 ”张三、买了、一张、三角、桌子“ , 也可以分词为”张三、买了、一、张三、桌子“ ,如果乐意也可以分词为”张三买了、一张三角、桌子“ , 上面提到的“张三” “张三买了”都是一种词,至于是不是词全是分词器说了算,就像每年评优秀员工一样,领导说你是你就是不是也是!
  好,接下来我们做个智力题,说:”兔妈妈出门前让小白兔把一个胡萝卜切成了10小段放进锅里煮,结果兔妈妈回来了要它从锅里捞出来一条完好无损的整根萝卜,请问小白兔能做到吗?“,是的你回答正确显然不能, 那么难度加大说:”兔妈妈出门前让小白兔把一个胡萝卜切成了无数萝卜丝放进锅里煮,结果兔妈妈回来了要它从锅里捞出来10小段萝卜,请问小白兔能做到吗?“,是的你又答对了肯定不可能做到。然而初入搜索者经常会犯懵,时不时的去让自己扮演兔妈妈,让搜索引擎扮演小白兔,让搜索引擎蓝瘦的香菇!不信你看下面这个例子:我文档里面有"中国东北大学“,为什么搜索“中国大学”搜不出来, 反而搜索“北大”把 中国东北大学搜索出来了!
  如何选择分词器?分词的问题也是搜索技术社区里面经常甚至每天都会问到的一类问题。典型问题如:“我用什么分词器好 ik、庖丁、mmseg、ansj还是hanlp?” 这个就好比问ruby、java、python、php那个更牛X?再打个比方这些开源的分词器就像做好的鞋子(大部分有其固定特点),你直接问柜员要最漂亮的鞋子,结果给你推荐一个红色女士高跟鞋结果哪知道你是个大老爷们并且有着48的大脚!分词的选择脱离开业务场景和自己的数据场景无异于缘木求鱼,关于如何选择分词我以后会根据自己趟过的坑让大家一步步去理解加深,实际中没有最好的只有合适不合适的!
  今天就先罗嗦到这里吧,感谢各位看官看到了文章末尾,若是无意挑战中挑战了各位亲的忍耐力还请海涵。其实本身不打算把文章搞这么长并让大家等这么久的,但是权衡再三还是感觉放在一篇中知识点相对比较完整独立,前后篇耦合度也低一些,作为一个码农的洁癖,你是知道的O(∩_∩)O。 查看全部

  金沙数据-《大话搜索引擎》第一季之初遇搜索(二)
  本季内容概览:大概会花费4篇左右的文章为大家讲解一个普适率80%左右的垂直搜索引擎,内容涵盖需求分析、架构设计、模块切分、各种填坑、效果评测 直至上线运行。
  本篇知识点概览:工程切分、倒排、分词
  一、放水篇(如果时间少请直接跳过阅读 干货篇 ; 特别声明:如果有时间建议放水篇也阅读一下,无水万物枯萎凋零 搜索亦然)
  上篇话说架构模块切分完毕,按照国际惯例我以为一切准备就绪只等光膀子开始码砖了,然而如大家所想我以为我以为的就是我以为的!就像帝都雾霾来袭站在国贸看到的天空中飘着一个小三角板似的怪物,走近一看才知道是这么大一个大裤衩!!
  进入A公司的前一个周基本上都是在熟悉一些东西(对我来说应该是调研,因为对搜索啥都不知道),记得杨总当时安排了3人日让我把solr tutorial看一遍并且将里面的demo也做一遍。对于我大学四年英文考试是否需要补考全看阅卷老师心情的水平来说当时面对满篇的e文网页也是压力山大, 现在想象也是醉了,本身不多的内容我竟然吭哧了三天才算理清楚solr到底是个啥玩意!但是一路走过来才发现自己是幸运的,solr tutorial寥寥数页文章无疑是对搜索小白最好的入门教材,它使你能快速上手感知搜索是个什么东东而又不至于一开始就陷入各种烧脑无聊的理论知识甚至算法无法自拔。
  这几年遇见过刚入搜索的许多朋友直接一上来就要来高大上的比如自己写分词、自己定制排序、几十条数据用solrcloud,其中理由大都很有趣 比如领导要求、公司要求、xxx公司就是这么搞的、还有的更搞笑的是好不容易有一次自己做主的机会自己想挑战一把极限!其实按照他们实际需求来说大部分并无必要 。最后的结果大部分可能是搜索做的焦头烂额,被挑战的头晕眼花在搜索的职业发展道路上中途退场了,凡此种种不免深感惋惜。
  solr tutorial熟悉完毕后我迎来了第一个3人日的小任务LogCleaner, 对 你没看错是LogCleaner(日志清理工),也许你会纳闷这是什么鬼和搜索有毛关系? 咱们看看这个LogCleaner工程要实现的功能:A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。是的这个工程本身和搜索没什么关系,我当时也很纳闷 这难道是进少林寺学武术先要做一年扫地僧考验一下不成。当天回家想了一下四个人的团队除了杨总外地主和老曹都是五年以上的搬砖老司机,这些打扫卫生的活当然非我莫属了,于是也便释然了。接下来如你所猜,又来了LogStorer(日志存储工)、LogDumper(日志转储工) ,就这样我在日志中死扛度过了两个月(后来才知道这些项目也都是整个搜索中的一块块积木,是不是有点像武侠了`(*∩_∩*)′)。当然在这两个月期间课余时间也没敢懈怠,几乎是在公交车上看完了《搜索引擎lucene+Heritix》,然后又拉着老曹跑人大打印店把《lucene in action》的英文第一版打印了厚厚一摞继续啃(当时lucene in action只有第一版英文版,并且一直缺货,老曹说人民大学的打印店打印很便宜就索性下个电子版的去打印了)这两本书跟随我在北京搬家搬了无数次,直到最近才把它们拿去送给后来者了。
  由于项目紧张晚上加班经常一块吃饭,私下里我也好奇地主和老曹都在做什么高大上的东西,这一看也是惊呆了。 老曹一直在倒腾词(那时候对词库没概念),将老的银杏搜索的热搜词一堆一堆的弄过来然后从网上找一些餐饮相关的词合并进来,还有天天分析餐厅标题,将那些和餐饮八竿子都打不找的词肉眼一个个找出来去掉,天天满屏词乱飞也是头要炸了。开了几次会议后终于确定我们选择自己做分词采用正向匹配最小的算法(餐饮行业的词大部分是菜谱和餐厅名,大部分都在2-5个汉字左右 2-3个的占到80%以上,并且根据老曹整理的实际餐厅数据场景和杨总跟大家的分析正向匹配最小算法效率相对较高并且歧义很小即使有歧义也可以自己修改词库控制)。这样也就带来了一个问题如果ABC是个词 AB也是个词,则ABC永远不会被切分出来,那么词库中到底是留AB呢还是留ABC呢?只有把这类的词找出来看具体场景才能人工判断决定留谁。于是老曹开始写一个脚本处理大约20w的词库将这种包含关系的词找出来,比较清晰的记得当时老曹特意让我们等一下他让脚本跑起来再一块去吃晚饭,吃完晚饭回来跑了一个多小时的脚本还是没有跑完,一直到晚上九点半大家准备撤了回家的时候老曹突发警告说“脚本还没跑完大家都别懂我电脑啊!”,第二天一大早大家好奇的聚集在一起准备看看脚本跑出的结果,这一看心里拔凉拔凉的, word 哥 竟然还在跑!!!疯掉了! 后来大家一块查原因才知道由于是临时脚本没怎么估计性能问题,结果脚本里有几个for循环,计算量超万万亿了!!!
  与此同时地主正在设计一个mysql大表并和业务人员去理各种字段关系以及triger设计,由于涉及的数据源和表都超多所以工作也是不轻松,这工作也持续了近两个月中间也开了无数次的评审会。杨总一直在辅导我们每个人应该如何做各自模块和工程并时刻做着救火队员的工作。
  是的,如大家所见我们前两个月并没有大家期望的高大上的搜索技术,相反大都是些世俗的脏活累活,甚至以后也很少会有多么高大上的技术工程。现在回过头来看,一个好的搜索的确离不开甚至80%以上的活都是很平常的脏活累活。每个细节、模块、工程的精细雕琢才有可能做出一些还不错的成绩。搜索就像生活,相对于诗和远方更多的还是些柴米油盐酱醋茶,时不时的换个尿不湿也是常事o(* ̄▽ ̄*)o。
  二、干货篇(友情提醒:如果您是一名搜索初学者这部分请仔细阅读,以免出现整个系列文章读完后搜索技术点忘得一干二净,而每篇里面扯的蛋都历历在目、栩栩如生的情况!)
  工程拆分细节
  架构中模块拆分和工程拆分大部分时候会不一样,一般来说模块拆分更抽象将意思表达出来即可,更侧重宏观上的控制;工程拆分则要侧重团队之间的沟通协作方便和代码依赖交叉最小化,以及大块的代码如何解耦和复用上 相对来说会细一些。上篇里提到过的架构图中的模块大家可能还有印象,下面这幅图里是整个工程图,给大家一个直观的感受后接下来会对每个工程做详细描述。
  如上图所示,我把大概15个工程按优先级的维度分成了三大部分,因为业务需求的不同大部分第一次做垂直搜索的人员可能只需要用到其中的一部分或两部分,这样整理应该会更通俗易懂一些。
  core(核心): 这部分是必须有的,也就是作为一个搜索引擎必须具备的工程组件,就像作为一辆汽车起码要有四个轮子,作为一个人起码要有四肢和大脑一样。
  
  extend(扩展) :这部分可有可无,按照我接触的一些初次需要搜索功能的平台来说真实需求几乎90%的情况不需要,然而你懂的,实际上大部分情况下需求会被放大。现在回过头来看这些就像我们的生活,有车有房的并不比月光族的生活质量和幸福感会高一样,同样对于搜索刚刚起步的阶段做了这一部分扩展如果驾驭不了往往会使得整个搜索更差,甚至整个项目远远超期或者中途夭折。
  assistant(辅助):这部分比较难以形容也相对杂乱些,几个词形容一下大家自己悟吧:锦上添花、打酱油、工匠精神、吃瓜群众、未雨绸缪、杞人忧天。(整个《大话搜索引擎》系列会有好多工程会属于这部分,也许只能系列文章全写完后才能确切讲清楚这部分是干啥的)
  core(核心):
  1.DataCollector(数据采集工程) 将变更餐厅相关信息近实时的采集到搜索库中。 输入:分属于两个类型的数据库(mysql,oracle)的20多张餐厅相关信息表。输出:整理好的单表数据到SeachDB。此工程在部署的时候是一个单独的后台守护进程运行。
  2.IndexBuilder(索引创建工程) 负责将采集好的变更的餐厅数据近实时的发给solr让其创建索引。输入:SearchDB中的数据源; 输出:整理好的xml文档发给solr。 此工程在部署的时候是一个单独的后台守护进程运行。
  3.SearchService(搜索服务工程) 接受web发来的搜索请求执行搜索操作,并做一些业务转换。 输入:搜索请求参数、业务配置文件、solr返回的源数据; 输出:整理好的规范化的xml数据。 此工程在部署的时候是一运行在web容器中的标准http服务。
  4.triger(数据触发器) 数据源DB上的触发器,负责将变更的数据触发到对应的表中。输入:20多张餐厅信息表的变更事件;输出:变更信息表中的数据(只标识增删改和餐厅业务主键)。此“工程”是DB上的机制,只是开发些triger脚本即可。
  extend(扩展):
  1.WordSegmentation(分词工程) 将索引和查询的字符串分词,包含正向匹配最小的分词器(主分词器)、特殊符号分词器、儿话音分词器、全半角转化分词器。输入:字符串 ; 输出:一个个词。比如输入:“西直门肯德基餐厅” 输出:“西直门” ”肯德基“ “餐厅”。此工程在部署的时候是以jar包的形式内嵌到solr中的。(分词这块具体在搜索中是啥意思文章后半部分会细讲)
  2.SearchProxy(搜索代理工程) 接受SearchService的业务api参数进行审核解析为solr的复杂语法,并查询solr数据返回原生xml信息。 输入:SearchService查询请求参数 输出:solr返回的原生xml数据;此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  3.UpdateFacetCfg(切面数据配置更新工程) 负责将数据库变更的需要做切面统计的数据从数据库下载好组织好生成xml文件供SearchService使用,例如:区域、菜系、价格区间、地铁沿线 等等。 输入:数据库原始信息或者运营人员提的数据变更; 输出:树状facet.xm结构文件。此工程在部署的时候是一个单独的后台守护进程运行,定期向SearchService中输送最新的切面数据文件facet.xml,SearchService则有自动检测文件变更的线程将最新文件加载到内存中使用。两个工程通过文件的形式解耦。
  4.SearchLogic(搜索逻辑功能) 扩展solr功能提供一些灵活的查询模型。例如And, OR, Mix(分词查询语句之间先And查询,无结果自动切换到OR查询)。输入:模型参数;输出:改写的查询语法解析。 这块要改写不少solr的代码,至于当时为什么要做这块原因大概这么几点。A:SearchService提供给多个业务系统用,查询精确度要求不一样 B:solr当时的版本(1.4)在语法解析上会有一些错误在配置同义词的情况下 And和OR关系解析不正确导致同义词配置形同虚设(餐饮行业好多同义词 比如 菜花花菜 土豆山药蛋 等等)。C:对于先And后Or的查询在solr层hack会减少一次网络传输,性能会更好些。此工程在部署的时候是以jar包的形式内嵌到solr中的。
  5.SearchSimilarity(搜索相关度工程) 修改solr的相关度函数代码使其更适合垂直行业搜索。其实改动的很少,但是效果很不错。这块暂时不细讲,因为涉及的内容太多,后续的文章中会花费大的篇幅去讲解。感兴趣的同学可以提前看看了解一下下图的lucene评分公式,在没讲解这个公式前很难把修改的东西起了什么作用讲明白。
  score(q,d)=(overlap/maxOverlap)·(1/(q.getBoost()^2·∑(idf(t)·t.getBoost())^2))·∑(tf(tin d)·idf(t)^2·t.getBoost()·doc.getBoost()·lengthNorm·∏f.getBoost())
  6.Monitor(搜索监控工程)监控系统主要负责两个工作,一个是发现任何solr服务不可用则自动发邮件通知搜索团队每个人,另一个则是将solr服务下线通知LB让SearchService端立即停止请求不可用的solr,并同时周期性检测服务是否已经恢复,恢复的话则会自动通知LB上线并发邮件通知搜索团队每个人。此工程在部署的时候是一个单独的后台守护进程运行。
  assistant(辅助):
  1. LoadBalance(负责均衡工程) load balance这个模块是用来做负载均衡,比如三个solr slave可能有一台机器配置好,则在流量分配上可以多分一些。另外比如solr服务挂掉了 LB则不会上SearchService上的请求打过来。此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  2. ResParticiple(餐饮行业分词测试工程) 这个工程本来可以不提的,本身上线的时候也不会用到,但是它的确又扮演了非常重要的角色。这个工程在分词器进行修改后会拿餐厅标题、热搜字符串等经常被检索的字段分类随机跑出来一定数量(上万)的分词效果供大家检测分词是否合理词库是否完善。这几乎也是初次建立自己词库和分词器的必经之路,尽管繁琐甚至大部分是人肉工作,但是相当有必要!! 此工程不需要部署,通俗点讲是良心活、工匠活。3.LogCleaner(日志清理工程)主要负责 A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。 上线部署的时候是多部署,多个运行在后台的守护进程,主要工作是给各个搜索工程吐出的搜日志做清理或保留工作。(其实现在来看这块的功能更常规的做法应该是log4j+shell脚本去处理) 4.LogStorer(日志存储工程) 将SearchService的文件日志读取存储到关系数据库中,以备后续统计分析使用。主要是针对搜索参数的比如:搜索词、ip、用户id、选择的筛选条件、排序条件等等。这块其实是搜索用户数据采集的雏形,后面的经历中会对这块做更深入讲解,其实大部分搜索的后期优化来源于和搜索相关甚至不相关的数据仓库数据。此工程在部署的时候是一个单独的后台守护进程运行。 5.LogDumper(日志转储工程) 将一个月前的搜索日志信息转储到搜索日志历史表中,这块就不多解释了把,你懂的。此工程在部署的时候是一个单独的后台守护进程行。
  
  搜索引擎基本术语
  文档(doc):搜索引擎中的一条数据记录,比如一个餐厅、一个商品。
  文档id(docId):搜索引擎内部唯一标识一篇文档的标记,就像我们的身份证编号一样。
  词:查询、索引 存储的最小原子单位。比如汉字的最细粒度一个字也可以说是一个词。
  分词器:将文本或字符串分解成一个一个词的工具。
  倒排索引表:以词为索引记录每个词都在哪些文档中出现过。
  正排索引表:以文档id为索引,记录相应的文档存储的位置。
  正排倒排讲解
  搜索引擎中常听的的两个术语是正排索引和倒排索引(高大上的称呼可以是 forward index和 inverted index),到底是什么意思呢?大家对索引这个词应该并不陌生,比如说目录索引,邮编索引等等。通俗的讲我们经常阅读书籍的目录索引就是一种正排索引,比如你有天想唱《儿歌三百首》中的“葫芦娃”这首歌,通过目录很快找到了“葫芦娃”的页码(docId:文档id)在36页,于是很快找到了整个歌曲。再比如有天你的领导发你的紧急邮件中有一字“擦”,你认识但是不知道什么意思,于是拿起了祖传的《新华字典》查到了这个"擦"字在第585页,此处的585即可理解场倒排索引id,字典的组织结构是比较像搜索引擎的倒排索引结构的。
  ok? 如果这个不太好理解,拿我们就那更正规的讲法讲解一遍。
  假如有一天你的女神脑洞大开让你将包含“妈妈”这个词的儿歌全部唱一遍,那我们看如果根据正排索引来找出所有歌曲的话则只能一个一个歌曲看,如果那天《儿歌三百首》增长到《儿歌三亿首》是不是这种场景要崩溃香菇的感觉?那如果我们用倒排索引来查呢? “妈妈”这个词对应的倒排列表(文档Id列表)为 1、6、9 而根据这三个文档id再到正排表中快速查到 “妈妈带我沙滩跑”、“傻妈妈”、“喂妈妈” so fast !so easy!咱们再加点难度,又假设你女神突然想起一首歌叫 ”xxx小雪人“而xxx以及记不清具体是啥了,现在我们使用正排索引无疑还是蓝廋香菇!那看看伟大的倒排表如何呢:“小雪人”分词为 “小” “雪人”,对应的倒排docid列表分别是 “小”:2、5、7 ; “雪人“:2,两个docid列表取交集得到docid列表为2,则根据正排表快速找到”门口有个小雪人“ 于是你的女神向你投来了崇拜的目光,如此估计你下个双十一不用一个人过了。
  分词讲解
  聊搜索引擎,分词就不可能避开,也许有人说外文比如英文搜索引擎应该不用分词吧,是的你猜错了!分词的好坏直接影响到召回率(查询出来的真正相关的文档数/总相关的文档数)和查准率(查询出来的真正相关的文档数/查询出来的文档总数)。词是在搜索引擎中的最小原子单位,在lucene的体系又称之为term或token。既然是最小的原子单位就意味着不可再分,不管是查询还是索引都是以这个最小单位为基础。 那么什么叫分词的,就是将一个长字符串通过一定的规则或者词库分解成多个小字符串的过程而这里被分解后的小字符串即是搜索引擎中的最小单位的一个实体--词。所以搜索引擎中的”词“和我们生活中说的”词“并不是同一个概念!! ”张三买了一张三角桌子“ 可以分词为 ”张三、买了、一张、三角、桌子“ , 也可以分词为”张三、买了、一、张三、桌子“ ,如果乐意也可以分词为”张三买了、一张三角、桌子“ , 上面提到的“张三” “张三买了”都是一种词,至于是不是词全是分词器说了算,就像每年评优秀员工一样,领导说你是你就是不是也是!
  好,接下来我们做个智力题,说:”兔妈妈出门前让小白兔把一个胡萝卜切成了10小段放进锅里煮,结果兔妈妈回来了要它从锅里捞出来一条完好无损的整根萝卜,请问小白兔能做到吗?“,是的你回答正确显然不能, 那么难度加大说:”兔妈妈出门前让小白兔把一个胡萝卜切成了无数萝卜丝放进锅里煮,结果兔妈妈回来了要它从锅里捞出来10小段萝卜,请问小白兔能做到吗?“,是的你又答对了肯定不可能做到。然而初入搜索者经常会犯懵,时不时的去让自己扮演兔妈妈,让搜索引擎扮演小白兔,让搜索引擎蓝瘦的香菇!不信你看下面这个例子:我文档里面有"中国东北大学“,为什么搜索“中国大学”搜不出来, 反而搜索“北大”把 中国东北大学搜索出来了!
  如何选择分词器?分词的问题也是搜索技术社区里面经常甚至每天都会问到的一类问题。典型问题如:“我用什么分词器好 ik、庖丁、mmseg、ansj还是hanlp?” 这个就好比问ruby、java、python、php那个更牛X?再打个比方这些开源的分词器就像做好的鞋子(大部分有其固定特点),你直接问柜员要最漂亮的鞋子,结果给你推荐一个红色女士高跟鞋结果哪知道你是个大老爷们并且有着48的大脚!分词的选择脱离开业务场景和自己的数据场景无异于缘木求鱼,关于如何选择分词我以后会根据自己趟过的坑让大家一步步去理解加深,实际中没有最好的只有合适不合适的!
  今天就先罗嗦到这里吧,感谢各位看官看到了文章末尾,若是无意挑战中挑战了各位亲的忍耐力还请海涵。其实本身不打算把文章搞这么长并让大家等这么久的,但是权衡再三还是感觉放在一篇中知识点相对比较完整独立,前后篇耦合度也低一些,作为一个码农的洁癖,你是知道的O(∩_∩)O。

十亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-26 19:48 • 来自相关话题

  十亿级流量的搜索前端,是怎么做架构升级的?
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  招聘信息
  百度搜索前端团队负责百度搜索()在各场景下的展现交互和底层框架的研发,致力于让人们平等便捷地获取信息,找到所求。这是一个喜匠心,善始终,追极致的90后攻城狮/程序媛群体,团队男女比例1:1。我们给优秀的人以自由的空间,欢迎有志者加入:。
  ---------- END ----------
  百度架构师
  百度官方技术公众号上线啦!
  技术干货·行业资讯 ·线上沙龙·行业大会
  招聘信息 ·内推信息 ·技术书籍·百度周边
  欢迎各位同学关注!
  一键三连,好运连连,bug不见 查看全部

  十亿级流量的搜索前端,是怎么做架构升级的?
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  招聘信息
  百度搜索前端团队负责百度搜索()在各场景下的展现交互和底层框架的研发,致力于让人们平等便捷地获取信息,找到所求。这是一个喜匠心,善始终,追极致的90后攻城狮/程序媛群体,团队男女比例1:1。我们给优秀的人以自由的空间,欢迎有志者加入:。
  ---------- END ----------
  百度架构师
  百度官方技术公众号上线啦!
  技术干货·行业资讯 ·线上沙龙·行业大会
  招聘信息 ·内推信息 ·技术书籍·百度周边
  欢迎各位同学关注!
  一键三连,好运连连,bug不见

php搜索引擎优化应该是目前为止最重要的一个优化方面

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-06-25 23:01 • 来自相关话题

  php搜索引擎优化应该是目前为止最重要的一个优化方面
  php搜索引擎优化应该是目前为止最重要的一个优化方面,php服务器占有全球99%的网站。seo就是利用php语言对服务器、php框架对index.php进行处理、优化,php框架和index.php完全是来自于hackwood的seo专家团队,从而实现php语言优化,接着由该团队撰写php语言核心内容、hackwoodseo团队提供后台支持等,而php框架本身仅负责一部分的索引优化工作,这个过程是完全可逆的,但做为整个seo框架的核心,就是要提供系统化的seo框架。
  php框架也有很多主流的php框架,groovy语言的pre-hook语言,xpath编写等。技术上面面有不少常见的php优化方法:/分布式管理(集群、缓存等),加权平衡(链路维护等),丰富的异步通信手段等。接下来hackwood在这里为大家介绍4个关于php优化的方法,大家可以积极下载后学习php优化相关知识。
  
  1.分布式管理学过php开发的人都知道分布式管理相关概念和协议,google大一统的数据库架构(oracle,mysql)也要求php服务器具有足够的独立性,如php服务器管理集群数据库等。分布式管理可提供整体化的管理,有效的提高整体服务器的利用率和节能。而对于php框架不同的阶段,提供不同的规范也是正常。
  比如,初级阶段,可以进行单点优化(单点优化高级版),高级阶段,则可以按照规范去做分布式的集群管理(并发控制)。2.加权平衡seo优化中有经常需要设计一些专页,那么不断提高服务器资源的利用率也是必不可少的。当服务器利用率不高的时候,有人为了解决资源使用率低的问题,采用定时发送链接过去的方式,该策略要求服务器要有足够的承载能力,如随着服务器使用率低,网站速度急剧下降,这个时候就要考虑定时推送链接的策略。
  因此,加权平衡也是一个seo相关技术,合理利用资源,进行对搜索引擎的权重优化。3.异步通信+高级回调通信对于常见的回调分两种:在线调用和回调分布式调用。在线调用:通过回调函数指定哪些任务要通过api接口来交给服务器来实现,服务器汇总这些需要发送给客户端,同时客户端在接受这些任务后,把任务打包为war包发送给服务器。
  在线调用的缺点在于api回调的方式性能不高,因为其没有客户端与服务器的直接交互,可能是因为其io处理代价比较高。所以,一般的情况下用在线调用来优化。客户端使用回调就好像在服务器端对客户端说我需要接收回调我在服务器端发送我的需求,我想做一个网站首页我先把需求发过去你把这个接受过来我来做一下缓存你做一下seo后台。当api接口的首页达到用户预期时就关闭api调用给客户端就好了。 查看全部

  php搜索引擎优化应该是目前为止最重要的一个优化方面
  php搜索引擎优化应该是目前为止最重要的一个优化方面,php服务器占有全球99%的网站。seo就是利用php语言对服务器、php框架对index.php进行处理、优化,php框架和index.php完全是来自于hackwood的seo专家团队,从而实现php语言优化,接着由该团队撰写php语言核心内容、hackwoodseo团队提供后台支持等,而php框架本身仅负责一部分的索引优化工作,这个过程是完全可逆的,但做为整个seo框架的核心,就是要提供系统化的seo框架。
  php框架也有很多主流的php框架,groovy语言的pre-hook语言,xpath编写等。技术上面面有不少常见的php优化方法:/分布式管理(集群、缓存等),加权平衡(链路维护等),丰富的异步通信手段等。接下来hackwood在这里为大家介绍4个关于php优化的方法,大家可以积极下载后学习php优化相关知识。
  
  1.分布式管理学过php开发的人都知道分布式管理相关概念和协议,google大一统的数据库架构(oracle,mysql)也要求php服务器具有足够的独立性,如php服务器管理集群数据库等。分布式管理可提供整体化的管理,有效的提高整体服务器的利用率和节能。而对于php框架不同的阶段,提供不同的规范也是正常。
  比如,初级阶段,可以进行单点优化(单点优化高级版),高级阶段,则可以按照规范去做分布式的集群管理(并发控制)。2.加权平衡seo优化中有经常需要设计一些专页,那么不断提高服务器资源的利用率也是必不可少的。当服务器利用率不高的时候,有人为了解决资源使用率低的问题,采用定时发送链接过去的方式,该策略要求服务器要有足够的承载能力,如随着服务器使用率低,网站速度急剧下降,这个时候就要考虑定时推送链接的策略。
  因此,加权平衡也是一个seo相关技术,合理利用资源,进行对搜索引擎的权重优化。3.异步通信+高级回调通信对于常见的回调分两种:在线调用和回调分布式调用。在线调用:通过回调函数指定哪些任务要通过api接口来交给服务器来实现,服务器汇总这些需要发送给客户端,同时客户端在接受这些任务后,把任务打包为war包发送给服务器。
  在线调用的缺点在于api回调的方式性能不高,因为其没有客户端与服务器的直接交互,可能是因为其io处理代价比较高。所以,一般的情况下用在线调用来优化。客户端使用回调就好像在服务器端对客户端说我需要接收回调我在服务器端发送我的需求,我想做一个网站首页我先把需求发过去你把这个接受过来我来做一下缓存你做一下seo后台。当api接口的首页达到用户预期时就关闭api调用给客户端就好了。

百度十亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-06-20 07:20 • 来自相关话题

  百度十亿级流量的搜索前端,是怎么做架构升级的?
  <br />
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选择 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  往期推荐
  <p data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-color-16019974160118="rgb(163, 163, 163)" data-darkmode-original-color-16019974160118="rgb(62, 62, 62)" data-darkmode-original-color="rgb(62, 62, 62)" data-darkmode-bgcolor-16020863323024="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16020863323024="rgb(255, 255, 255)" data-darkmode-color-16020863323024="rgb(163, 163, 163)" data-darkmode-original-color-16020863323024="rgb(62, 62, 62)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-bgcolor-16024232380271="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16024232380271="rgb(255, 255, 255)" data-darkmode-color-16024232380271="rgb(163, 163, 163)" data-darkmode-original-color-16024232380271="rgb(62, 62, 62)" data-darkmode-bgcolor-16025172440432="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16025172440432="rgb(255, 255, 255)" data-darkmode-color-16025172440432="rgb(163, 163, 163)" data-darkmode-original-color-16025172440432="rgb(62, 62, 62)" style="text-align: center;white-space: normal;word-spacing: 0.5px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0.5px;line-height: 1.75em;">   END     
  #技术人必备#
  <br /></p>
  点个在看,让更多人看见 查看全部

  百度十亿级流量的搜索前端,是怎么做架构升级的?
  <br />
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选择 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  往期推荐
  <p data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-color-16019974160118="rgb(163, 163, 163)" data-darkmode-original-color-16019974160118="rgb(62, 62, 62)" data-darkmode-original-color="rgb(62, 62, 62)" data-darkmode-bgcolor-16020863323024="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16020863323024="rgb(255, 255, 255)" data-darkmode-color-16020863323024="rgb(163, 163, 163)" data-darkmode-original-color-16020863323024="rgb(62, 62, 62)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-bgcolor-16024232380271="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16024232380271="rgb(255, 255, 255)" data-darkmode-color-16024232380271="rgb(163, 163, 163)" data-darkmode-original-color-16024232380271="rgb(62, 62, 62)" data-darkmode-bgcolor-16025172440432="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16025172440432="rgb(255, 255, 255)" data-darkmode-color-16025172440432="rgb(163, 163, 163)" data-darkmode-original-color-16025172440432="rgb(62, 62, 62)" style="text-align: center;white-space: normal;word-spacing: 0.5px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0.5px;line-height: 1.75em;">   END     
  #技术人必备#
  <br /></p>
  点个在看,让更多人看见

如何利用搜索引擎,提高10倍的工作效率?(建议收藏)

网站优化优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-18 20:16 • 来自相关话题

  如何利用搜索引擎,提高10倍的工作效率?(建议收藏)
  
  之前说过在互联网上95%的信息都可以通过搜索找到,即绝大多数的信息都可以通过搜索渠道找到解决问题的答案。
  本文应该属于科普篇,做外贸的,做跨境电商的,我相信绝大多数人都懂得搜索引擎的指令,有效的利用搜索引擎的查询指令可以极大的提高工作的效率。
  过去我通过这些指令,为我的工作提供了巨大的帮助,也把这些必要的搜索指令分享给大家,建议所有人都要掌握。
  通过这些搜索语句,你可以;
  可以针对竞争对手的关键词布局,外链建设,页面优化的情况,网站收录,网站权重等等都可以通过搜索引擎的指令来分析
  可以过滤不需要的信息,精确的查想要的资料,如特定的文件格式,只查找标题,链接中资料等等。
  我认为下面的这些指令是所有人都应该要学会的,你将从中挖掘到巨大的宝藏。
  
  1、双引号
  把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。百度和Google 都支持这个指令。如假发的关键词搜索: “hair extension”
  从搜索上来看,Hair Extension 必须是完全匹配的,不会泛搜索。使用双引号搜索可以更准确的找到特地的关键词的竞争对手。
  2、减号
  有时候不想看搜索结果出来的一些关键词,那么就可以利用减号的指令来排除。比如你想查看的是苹果的手机,不想看关于苹果的电影,那么这个时候减号的作用就很有效。
  减号(-)代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和百度都支持这个指令。例如:苹果 -电影 返回的则是包含“苹果”这个词,却不包含“电影”这个词的结果
  3、星号
  星号是常用的通配符,也可以用在搜索中。百度不支持号搜索指令。比如在Google 中搜索:搜索*擎其中的号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。
  我经常有些成语忘记了,只是大概的记得2个字,那么我也会用星号来代表,如下图,我会这样查询 成语 作舍** ,如下图
  这样作舍道边这个成语就被我找到了。这种方法对于经常似懂非懂的问题都可以解决的。
  4、inurl
  linurl:指令用于搜索查询词出现在url 中的页面。百度和Google 都支持inurl 指令。inurl 指令支持中文和英文。
  比如搜索:inurl:hair extension返回的结果都是网址url 中包含“hair extension”的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。
  5、inanchor
  inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor。
  比如在Google 搜索 :inanchor:点击这里返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。
  可以用来找到某个关键词的竞争对手,而且这些竞争对手往往是做过SEO 的。研究竞争对手页面有哪些外部链接,就可以找到很多链接资源。
  6、intitle
  intitle: 指令返回的是页面title 中包含关键词的页面。Google 和百度都支持intitle 指令。
  使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。
  7、allintitle
  allintitle:搜索返回的是页面标题中包含多组关键词的文件。例如 :allintitle:hair extension就相当于:intitle:hair intitle:extension返回的是标题中中既包含“hair”,也包含“extension”的页面
  8、allinurl
  与allintitle: 类似。
  allinurl:hair extension 就相当于:inurl:hair inurl:extension
  当然也可以用下面的查询语句 inurl:hair/extension/love
  9、filetype
  用于搜索特定文件格式。
  Google 和百度都支持filetype 指令。比如搜索filetype:pdf hair extension返回的就是包含hair extension 这个关键词的所有pdf 文件。
  百度只支持下面几种文件格式:pdf,doc,xls,ppt,rtf,all。其中的“all”表示搜索百度所有支持的文件类型。Google则支持所有能索引的文件格式,包括HTML、PHP等。
  10、site
  site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。
  site的指令现在不是很准确,这个只能作为参考来用.比如查询 site: 返回的是这个域名的所有页面。
  11、related
  related:指令只适用于Google,返回的结果是与某个网站有关联的页面。比如搜索related:我们就可以得到Google 所认为的与点石网站有关联的其他页面。
  这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。上面介绍的这几个高级搜索指令,单独使用可以找到不少资源,或者可以更精确地定位竞争对手。把这些指令混合起来使用则更强大。
  inurl:gov 减肥
  返回的就是url 中包含gov,页面中有“减肥”这个词的页面。
  很多SEO 人员认为Gov和学校网站有比较高的权重,找到相关的Gov和学校网站,就找到了最好的链接资源。
  
  或者使用一个更精确的搜索:
  inurl:hair extension intitle:guest post
  返回的则是包含hair extension这个关键词,标题中包含“guest post”这四个字的页面,返回的结果大部分是标题中包含guest post 并在连接中包含 hair extension
  一个合格的SEO必须熟练掌握这几个常用指令的意义及组合方法,才能更有效率地找到更多竞争对手和链接资源。找外链的时候你可以用这几种命令组合,
  比如:
  下面这个指令:inurl:/forum/*register返回的结果是在.域名上,url 中包含“forum”以及“register”这两个单词的页面,也就是学校论坛的注册页面。找到这些论坛,也就找到了能在高权重域名上留下签名的很多机会
  inurl:/客座博客
  查询的是特定网站下的关键词搜索
  再比如:
  site:.com inurl:blog “post a comment” -”comments closed” -”you must be logged in” “输入你的关键词“,site:.com 是 指, 只显示.com的网站。
  如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。“post a comment” -”comments closed” -”you must be logged in” 是指, “能够写评论的” 减去“ 关闭评论的” 再减去“ 必须要登录才能写评论的”
  上面这些查询语句,如果大家熟练运用的话会对工作效率有着极大提高,建议大家多经常使用。(强烈推荐) 查看全部

  如何利用搜索引擎,提高10倍的工作效率?(建议收藏)
  
  之前说过在互联网上95%的信息都可以通过搜索找到,即绝大多数的信息都可以通过搜索渠道找到解决问题的答案。
  本文应该属于科普篇,做外贸的,做跨境电商的,我相信绝大多数人都懂得搜索引擎的指令,有效的利用搜索引擎的查询指令可以极大的提高工作的效率。
  过去我通过这些指令,为我的工作提供了巨大的帮助,也把这些必要的搜索指令分享给大家,建议所有人都要掌握。
  通过这些搜索语句,你可以;
  可以针对竞争对手的关键词布局,外链建设,页面优化的情况,网站收录,网站权重等等都可以通过搜索引擎的指令来分析
  可以过滤不需要的信息,精确的查想要的资料,如特定的文件格式,只查找标题,链接中资料等等。
  我认为下面的这些指令是所有人都应该要学会的,你将从中挖掘到巨大的宝藏。
  
  1、双引号
  把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。百度和Google 都支持这个指令。如假发的关键词搜索: “hair extension”
  从搜索上来看,Hair Extension 必须是完全匹配的,不会泛搜索。使用双引号搜索可以更准确的找到特地的关键词的竞争对手。
  2、减号
  有时候不想看搜索结果出来的一些关键词,那么就可以利用减号的指令来排除。比如你想查看的是苹果的手机,不想看关于苹果的电影,那么这个时候减号的作用就很有效。
  减号(-)代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和百度都支持这个指令。例如:苹果 -电影 返回的则是包含“苹果”这个词,却不包含“电影”这个词的结果
  3、星号
  星号是常用的通配符,也可以用在搜索中。百度不支持号搜索指令。比如在Google 中搜索:搜索*擎其中的号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。
  我经常有些成语忘记了,只是大概的记得2个字,那么我也会用星号来代表,如下图,我会这样查询 成语 作舍** ,如下图
  这样作舍道边这个成语就被我找到了。这种方法对于经常似懂非懂的问题都可以解决的。
  4、inurl
  linurl:指令用于搜索查询词出现在url 中的页面。百度和Google 都支持inurl 指令。inurl 指令支持中文和英文。
  比如搜索:inurl:hair extension返回的结果都是网址url 中包含“hair extension”的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。
  5、inanchor
  inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor。
  比如在Google 搜索 :inanchor:点击这里返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。
  可以用来找到某个关键词的竞争对手,而且这些竞争对手往往是做过SEO 的。研究竞争对手页面有哪些外部链接,就可以找到很多链接资源。
  6、intitle
  intitle: 指令返回的是页面title 中包含关键词的页面。Google 和百度都支持intitle 指令。
  使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。
  7、allintitle
  allintitle:搜索返回的是页面标题中包含多组关键词的文件。例如 :allintitle:hair extension就相当于:intitle:hair intitle:extension返回的是标题中中既包含“hair”,也包含“extension”的页面
  8、allinurl
  与allintitle: 类似。
  allinurl:hair extension 就相当于:inurl:hair inurl:extension
  当然也可以用下面的查询语句 inurl:hair/extension/love
  9、filetype
  用于搜索特定文件格式。
  Google 和百度都支持filetype 指令。比如搜索filetype:pdf hair extension返回的就是包含hair extension 这个关键词的所有pdf 文件。
  百度只支持下面几种文件格式:pdf,doc,xls,ppt,rtf,all。其中的“all”表示搜索百度所有支持的文件类型。Google则支持所有能索引的文件格式,包括HTML、PHP等。
  10、site
  site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。
  site的指令现在不是很准确,这个只能作为参考来用.比如查询 site: 返回的是这个域名的所有页面。
  11、related
  related:指令只适用于Google,返回的结果是与某个网站有关联的页面。比如搜索related:我们就可以得到Google 所认为的与点石网站有关联的其他页面。
  这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。上面介绍的这几个高级搜索指令,单独使用可以找到不少资源,或者可以更精确地定位竞争对手。把这些指令混合起来使用则更强大。
  inurl:gov 减肥
  返回的就是url 中包含gov,页面中有“减肥”这个词的页面。
  很多SEO 人员认为Gov和学校网站有比较高的权重,找到相关的Gov和学校网站,就找到了最好的链接资源。
  
  或者使用一个更精确的搜索:
  inurl:hair extension intitle:guest post
  返回的则是包含hair extension这个关键词,标题中包含“guest post”这四个字的页面,返回的结果大部分是标题中包含guest post 并在连接中包含 hair extension
  一个合格的SEO必须熟练掌握这几个常用指令的意义及组合方法,才能更有效率地找到更多竞争对手和链接资源。找外链的时候你可以用这几种命令组合,
  比如:
  下面这个指令:inurl:/forum/*register返回的结果是在.域名上,url 中包含“forum”以及“register”这两个单词的页面,也就是学校论坛的注册页面。找到这些论坛,也就找到了能在高权重域名上留下签名的很多机会
  inurl:/客座博客
  查询的是特定网站下的关键词搜索
  再比如:
  site:.com inurl:blog “post a comment” -”comments closed” -”you must be logged in” “输入你的关键词“,site:.com 是 指, 只显示.com的网站。
  如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。“post a comment” -”comments closed” -”you must be logged in” 是指, “能够写评论的” 减去“ 关闭评论的” 再减去“ 必须要登录才能写评论的”
  上面这些查询语句,如果大家熟练运用的话会对工作效率有着极大提高,建议大家多经常使用。(强烈推荐)

搭建自己的searx搜索引擎

网站优化优采云 发表了文章 • 0 个评论 • 309 次浏览 • 2022-06-10 18:20 • 来自相关话题

  搭建自己的searx搜索引擎
  
  
  Searx是一个隐私尊重的免费元搜索引擎。它具有以下功能特性:自我托管,默认不使用 Cookie,不跟踪、不分析用户,不收集用户数据,不与第三方共享用户数据,提供安全的加密连接(HTTPS / SSL)等;如果您更在意隐私而不是效率,这会是一个很不错的选择。
  Searx,一个基于Python的完全开源免费搜索引擎平台,为你提供来自Google、Bing、Yahoo等70多种各大视频、图片、搜索、磁力等网站结果展示,并对搜索结果进行优化,同时不会存储你的任何搜索信息,搭建也很方便。
  搭建环境:Ubuntu 16.04
  项目地址:
  首先安装Git:apt install git
  拉取源码:git clone
  安装依赖:cd searx
  pip install -r requirements.txt
  编辑配置文件:visearx/settings.yml

  如上图:
  language:为搜索语言,默认en-US,如果你的搜索以中文为主,那就改成zh-CN,当然这个语言在搜索界面也可以设置。
  port:为监听端口,默认8888,可自行修改。
  bind_address:为监控地址,默认为127.0.0.1,如果需要让ip地址能被外网访问,就修改为0.0.0.0,这里建议默认,然后再用域名反代即可。
  secret_key:该参数为加密密匙,可自行设置,数值可以在ssh客户端使用openssl rand -hex 16命令生成。
  这里你也可以不用vi编辑器,直接使用命令修改:
  #修改language,默认为中文搜索结果
  sed -i 's/language : "en-US"/language : "zh-CN"/g' searx/settings.yml
  #修改secret_key
  sed -i "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
  #修改bind_address,改了后就可以使用ip访问了,如果你使用域名的话,可以不修改
  sed -i 's/bind_address : "127.0.0.1"/bind_address : "0.0.0.0"/g' searx/settings.yml
  #修改port,比如修改成8000
  sed -i "s/port : 8888/port : 8000/g" searx/settings.yml
  运行screen:apt isstall screen -y
  后台运行:screen -dmS searx python searx/webapp.py
  现在就可以ip+端口访问了,如图
  
  本文章仅做为学习参考使用,切勿用于非法及商业用途!造成的后果作者不承担任何责任!
   查看全部

  搭建自己的searx搜索引擎
  
  
  Searx是一个隐私尊重的免费元搜索引擎。它具有以下功能特性:自我托管,默认不使用 Cookie,不跟踪、不分析用户,不收集用户数据,不与第三方共享用户数据,提供安全的加密连接(HTTPS / SSL)等;如果您更在意隐私而不是效率,这会是一个很不错的选择。
  Searx,一个基于Python的完全开源免费搜索引擎平台,为你提供来自Google、Bing、Yahoo等70多种各大视频、图片、搜索、磁力等网站结果展示,并对搜索结果进行优化,同时不会存储你的任何搜索信息,搭建也很方便。
  搭建环境:Ubuntu 16.04
  项目地址:
  首先安装Git:apt install git
  拉取源码:git clone
  安装依赖:cd searx
  pip install -r requirements.txt
  编辑配置文件:visearx/settings.yml

  如上图:
  language:为搜索语言,默认en-US,如果你的搜索以中文为主,那就改成zh-CN,当然这个语言在搜索界面也可以设置。
  port:为监听端口,默认8888,可自行修改。
  bind_address:为监控地址,默认为127.0.0.1,如果需要让ip地址能被外网访问,就修改为0.0.0.0,这里建议默认,然后再用域名反代即可。
  secret_key:该参数为加密密匙,可自行设置,数值可以在ssh客户端使用openssl rand -hex 16命令生成。
  这里你也可以不用vi编辑器,直接使用命令修改:
  #修改language,默认为中文搜索结果
  sed -i 's/language : "en-US"/language : "zh-CN"/g' searx/settings.yml
  #修改secret_key
  sed -i "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
  #修改bind_address,改了后就可以使用ip访问了,如果你使用域名的话,可以不修改
  sed -i 's/bind_address : "127.0.0.1"/bind_address : "0.0.0.0"/g' searx/settings.yml
  #修改port,比如修改成8000
  sed -i "s/port : 8888/port : 8000/g" searx/settings.yml
  运行screen:apt isstall screen -y
  后台运行:screen -dmS searx python searx/webapp.py
  现在就可以ip+端口访问了,如图
  
  本文章仅做为学习参考使用,切勿用于非法及商业用途!造成的后果作者不承担任何责任!
  

php+hook,php服务端运维?一个高性能服务器

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-06-07 08:06 • 来自相关话题

  php+hook,php服务端运维?一个高性能服务器
  php搜索引擎优化
  前端,node.js+vue等框架和hook等技术,
  提供一个分工比较细的行业,就是健康管理行业,医疗管理行业是目前比较火热的一个行业,很多公司都在做。php+hook+mongodb,
  php服务端运维?一个高性能服务器。在php中有数十万以上的模块,用hook、事件模拟然后markdown复制来运行就差不多。
  比如健康管理系统?php提供feed流的接口并且可以实现语言交互?
  健康管理行业的话,php服务端开发是很有必要的,如果是大的健康公司的话,可以考虑用健康管理系统来搭建自己的健康企业管理系统,如果是一般的小医院,或是医院已经有多套健康管理系统的话,
  健康管理需要稳定高性能的服务器,这里可以推荐一个好的性能http服务器celery,高性能http服务器也是分体系的,有hapho、hwserver、celeryserver、slack之类的,但是就celeryserver来说,刚开始没必要考虑,hapho+hwserver+java+jetty构建健康管理系统,差不多也是上千块钱。
  两个关键字,一个是数据源,一个是计算资源。 查看全部

  php+hook,php服务端运维?一个高性能服务器
  php搜索引擎优化
  前端,node.js+vue等框架和hook等技术,
  提供一个分工比较细的行业,就是健康管理行业,医疗管理行业是目前比较火热的一个行业,很多公司都在做。php+hook+mongodb,
  php服务端运维?一个高性能服务器。在php中有数十万以上的模块,用hook、事件模拟然后markdown复制来运行就差不多。
  比如健康管理系统?php提供feed流的接口并且可以实现语言交互?
  健康管理行业的话,php服务端开发是很有必要的,如果是大的健康公司的话,可以考虑用健康管理系统来搭建自己的健康企业管理系统,如果是一般的小医院,或是医院已经有多套健康管理系统的话,
  健康管理需要稳定高性能的服务器,这里可以推荐一个好的性能http服务器celery,高性能http服务器也是分体系的,有hapho、hwserver、celeryserver、slack之类的,但是就celeryserver来说,刚开始没必要考虑,hapho+hwserver+java+jetty构建健康管理系统,差不多也是上千块钱。
  两个关键字,一个是数据源,一个是计算资源。

全文搜索引擎选ElasticSearch还是Solr?

网站优化优采云 发表了文章 • 0 个评论 • 91 次浏览 • 2022-06-03 11:00 • 来自相关话题

  全文搜索引擎选ElasticSearch还是Solr?
  “
  最近项目组安排了一个任务,项目中用到了基于Solr 的全文搜索,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步。
  
  而且它还是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的依赖查询都无结果数据了。
  所以考虑开发一个适配层,如果 Solr 搜索出问题,自动切换到新的搜索 ES。其实可以通过 Solr 集群或者服务容错等设计来解决该问题。
  但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始,因为之前完全没接触过 ES,所以通过本系列来记录下自己的开发过程。
  本篇文章的总体内容大致如下图:
  
  由 ReyCG 精心绘制并提供
  什么是全文搜索
  什么是全文搜索引擎?百度百科中的定义:
  全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
  从定义中我们已经可以大致了解全文检索的思路了,为了更详细的说明,我们先从生活中的数据说起。
  我们生活中的数据总体分为两种:
  当然有的地方还会有第三种:半结构化数据,如 XML,HTML 等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
  根据两种数据分类,搜索也相应的分为两种:结构化数据搜索和非结构化数据搜索。
  对于结构化数据,我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的 table 的方式存储和搜索,也可以建立索引。
  对于非结构化数据,也即对全文数据的搜索主要有两种方法:
  顺序扫描:通过文字名称也可了解到它的大概搜索方式,即按照顺序扫描的方式查询特定的关键字。
  例如给你一张报纸,让你找到该报纸中“RNG”的文字在哪些地方出现过。你肯定需要从头到尾把报纸阅读扫描一遍,然后标记出关键字在哪些版块出现过以及它的出现位置。
  这种方式无疑是最耗时的最低效的,如果报纸排版字体小,而且版块较多甚至有多份报纸,等你扫描完你的眼睛也差不多了。
  全文检索:对非结构化数据顺序扫描很慢,我们是否可以进行优化?把我们的非结构化数据想办法弄得有一定结构不就行了吗?
  将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
  这种方式就构成了全文检索的基本思路。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
  还以读报纸为例,我们想关注英雄联盟 S8 全球总决赛的新闻,假如都是 RNG 的粉丝,如何快速找到 RNG 新闻的报纸和版块呢?
  全文检索的方式就是,将所有报纸中所有版块中关键字进行提取,如"EDG","RNG","FW","战队","英雄联盟"等。
  然后对这些关键字建立索引,通过索引我们就可以对应到该关键词出现的报纸和版块。注意区别目录搜索引擎。
  为什么要用全文搜索搜索引擎
  之前,有同事问我,为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle、SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?
  确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过建数据库索引,优化 SQL 等方式提升效率,甚至通过引入缓存来加快数据的返回速度。
  如果数据量更大,就可以分库分表来分担查询压力。那为什么还要全文搜索引擎呢?我们主要从以下几个原因分析:
  数据类型
  全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。
  例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。
  对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
  索引的维护
  一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。
  进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。
  建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
  什么时候使用全文搜索引擎:
  Lucene,Solr,ElasticSearch ?
  现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。
  
  它们的索引建立都是根据倒排索引的方式生成索引,何谓倒排索引?
  维基百科:倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
  Lucene
  Lucene 是一个 Java 全文搜索引擎,完全用 Java 编写。Lucene 不是一个完整的应用程序,而是一个代码库和 API,可以很容易地用于向应用程序添加搜索功能。Lucene 通过简单的 API 提供强大的功能:
  可扩展的高性能索引:
  强大,准确,高效的搜索算法:
  跨平台解决方案:
  Apache 软件基金会:
  Solr
  Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台。它以用户友好的方式提供 Apache Lucene 的搜索功能。
  作为一个行业参与者已近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。
  它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。
  很多互联网巨头,如 Netflix,eBay,Instagram 和亚马逊(CloudSearch)都使用 Solr,因为它能够索引和搜索多个站点。
  主要功能列表包括:
  ElasticSearch
  Elasticsearch 是一个开源(Apache 2 许可证),基于 Apache Lucene 库构建的 RESTful 搜索引擎。
  Elasticsearch 是在 Solr 之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有 HTTP Web 界面(REST)和无架构 JSON 文档。
  Elasticsearch 的官方客户端库提供 Java,Groovy,PHP,Ruby,Perl,Python,.NET 和 Javascript。
  分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。
  每个 Elasticsearch 节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。
  Elasticsearch 可通过近实时搜索进行扩展。其主要功能之一是多租户。主要功能列表包括:
  Elasticsearch vs Solr 的选择
  由于 Lucene 的复杂性,一般很少会考虑它作为搜索的第一选择,排除一些公司需要自研搜索框架,底层需要依赖 Lucene。
  所以这里我们重点分析哪一个更好?它们有什么不同?你应该使用哪一个?
  
  历史比较
  Apache Solr 是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及 Apache 品牌。
  Solr 于 2006 年首次发布到开源,长期以来一直占据着搜索引擎领域,并且是任何需要搜索功能的人的首选引擎。
  它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索; 如分面,分组,强大的过滤,可插入的文档处理,可插入的搜索链组件,语言检测等。
  Solr 在搜索领域占据了多年的主导地位。然后,在 2010 年左右,Elasticsearch 成为市场上的另一种选择。
  那时候,它远没有 Solr 那么稳定,没有 Solr 的功能深度,没有思想分享,品牌等等。
  Elasticsearch 虽然很年轻,但它也自己的一些优势,Elasticsearch 建立在更现代的原则上,针对更现代的用例,并且是为了更容易处理大型索引和高查询率而构建的。
  此外,由于它太年轻,没有社区可以合作,它可以自由地向前推进,而不需要与其他人(用户或开发人员)达成任何共识或合作,向后兼容,或任何其他更成熟的软件通常必须处理。
  因此,它在 Solr 之前就公开了一些非常受欢迎的功能(例如,接近实时搜索,英文:Near Real-Time Search)。
  从技术上讲,NRT 搜索的能力确实来自 Lucene,它是 Solr 和 Elasticsearch 使用的基础搜索库。
  具有讽刺意味的是,因为 Elasticsearch 首先公开了 NRT 搜索,所以人们将 NRT 搜索与 Elasticsearch 联系在一起。
  尽管 Solr 和 Lucene 都是同一个 Apache 项目的一部分,但是,人们会首先期望 Solr 具有如此高要求的功能。
  特征差异比较
  这两个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 Lucene 构建的,但它们又是不同的。
  像所有东西一样,每个都有其优点和缺点,根据您的需求和期望,每个都可能更好或更差。
  Solr 和 Elasticsearch 都在快速发展,所以,话不多说,先来看下它们的差异清单:
   查看全部

  全文搜索引擎选ElasticSearch还是Solr?
  “
  最近项目组安排了一个任务,项目中用到了基于Solr 的全文搜索,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步。
  
  而且它还是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的依赖查询都无结果数据了。
  所以考虑开发一个适配层,如果 Solr 搜索出问题,自动切换到新的搜索 ES。其实可以通过 Solr 集群或者服务容错等设计来解决该问题。
  但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始,因为之前完全没接触过 ES,所以通过本系列来记录下自己的开发过程。
  本篇文章的总体内容大致如下图:
  
  由 ReyCG 精心绘制并提供
  什么是全文搜索
  什么是全文搜索引擎?百度百科中的定义:
  全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
  从定义中我们已经可以大致了解全文检索的思路了,为了更详细的说明,我们先从生活中的数据说起。
  我们生活中的数据总体分为两种:
  当然有的地方还会有第三种:半结构化数据,如 XML,HTML 等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
  根据两种数据分类,搜索也相应的分为两种:结构化数据搜索和非结构化数据搜索。
  对于结构化数据,我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的 table 的方式存储和搜索,也可以建立索引。
  对于非结构化数据,也即对全文数据的搜索主要有两种方法:
  顺序扫描:通过文字名称也可了解到它的大概搜索方式,即按照顺序扫描的方式查询特定的关键字。
  例如给你一张报纸,让你找到该报纸中“RNG”的文字在哪些地方出现过。你肯定需要从头到尾把报纸阅读扫描一遍,然后标记出关键字在哪些版块出现过以及它的出现位置。
  这种方式无疑是最耗时的最低效的,如果报纸排版字体小,而且版块较多甚至有多份报纸,等你扫描完你的眼睛也差不多了。
  全文检索:对非结构化数据顺序扫描很慢,我们是否可以进行优化?把我们的非结构化数据想办法弄得有一定结构不就行了吗?
  将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
  这种方式就构成了全文检索的基本思路。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
  还以读报纸为例,我们想关注英雄联盟 S8 全球总决赛的新闻,假如都是 RNG 的粉丝,如何快速找到 RNG 新闻的报纸和版块呢?
  全文检索的方式就是,将所有报纸中所有版块中关键字进行提取,如"EDG","RNG","FW","战队","英雄联盟"等。
  然后对这些关键字建立索引,通过索引我们就可以对应到该关键词出现的报纸和版块。注意区别目录搜索引擎。
  为什么要用全文搜索搜索引擎
  之前,有同事问我,为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle、SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?
  确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过建数据库索引,优化 SQL 等方式提升效率,甚至通过引入缓存来加快数据的返回速度。
  如果数据量更大,就可以分库分表来分担查询压力。那为什么还要全文搜索引擎呢?我们主要从以下几个原因分析:
  数据类型
  全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。
  例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。
  对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
  索引的维护
  一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。
  进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。
  建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
  什么时候使用全文搜索引擎:
  Lucene,Solr,ElasticSearch ?
  现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。
  
  它们的索引建立都是根据倒排索引的方式生成索引,何谓倒排索引?
  维基百科:倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
  Lucene
  Lucene 是一个 Java 全文搜索引擎,完全用 Java 编写。Lucene 不是一个完整的应用程序,而是一个代码库和 API,可以很容易地用于向应用程序添加搜索功能。Lucene 通过简单的 API 提供强大的功能:
  可扩展的高性能索引:
  强大,准确,高效的搜索算法:
  跨平台解决方案:
  Apache 软件基金会:
  Solr
  Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台。它以用户友好的方式提供 Apache Lucene 的搜索功能。
  作为一个行业参与者已近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。
  它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。
  很多互联网巨头,如 Netflix,eBay,Instagram 和亚马逊(CloudSearch)都使用 Solr,因为它能够索引和搜索多个站点。
  主要功能列表包括:
  ElasticSearch
  Elasticsearch 是一个开源(Apache 2 许可证),基于 Apache Lucene 库构建的 RESTful 搜索引擎。
  Elasticsearch 是在 Solr 之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有 HTTP Web 界面(REST)和无架构 JSON 文档。
  Elasticsearch 的官方客户端库提供 Java,Groovy,PHP,Ruby,Perl,Python,.NET 和 Javascript。
  分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。
  每个 Elasticsearch 节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。
  Elasticsearch 可通过近实时搜索进行扩展。其主要功能之一是多租户。主要功能列表包括:
  Elasticsearch vs Solr 的选择
  由于 Lucene 的复杂性,一般很少会考虑它作为搜索的第一选择,排除一些公司需要自研搜索框架,底层需要依赖 Lucene。
  所以这里我们重点分析哪一个更好?它们有什么不同?你应该使用哪一个?
  
  历史比较
  Apache Solr 是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及 Apache 品牌。
  Solr 于 2006 年首次发布到开源,长期以来一直占据着搜索引擎领域,并且是任何需要搜索功能的人的首选引擎。
  它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索; 如分面,分组,强大的过滤,可插入的文档处理,可插入的搜索链组件,语言检测等。
  Solr 在搜索领域占据了多年的主导地位。然后,在 2010 年左右,Elasticsearch 成为市场上的另一种选择。
  那时候,它远没有 Solr 那么稳定,没有 Solr 的功能深度,没有思想分享,品牌等等。
  Elasticsearch 虽然很年轻,但它也自己的一些优势,Elasticsearch 建立在更现代的原则上,针对更现代的用例,并且是为了更容易处理大型索引和高查询率而构建的。
  此外,由于它太年轻,没有社区可以合作,它可以自由地向前推进,而不需要与其他人(用户或开发人员)达成任何共识或合作,向后兼容,或任何其他更成熟的软件通常必须处理。
  因此,它在 Solr 之前就公开了一些非常受欢迎的功能(例如,接近实时搜索,英文:Near Real-Time Search)。
  从技术上讲,NRT 搜索的能力确实来自 Lucene,它是 Solr 和 Elasticsearch 使用的基础搜索库。
  具有讽刺意味的是,因为 Elasticsearch 首先公开了 NRT 搜索,所以人们将 NRT 搜索与 Elasticsearch 联系在一起。
  尽管 Solr 和 Lucene 都是同一个 Apache 项目的一部分,但是,人们会首先期望 Solr 具有如此高要求的功能。
  特征差异比较
  这两个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 Lucene 构建的,但它们又是不同的。
  像所有东西一样,每个都有其优点和缺点,根据您的需求和期望,每个都可能更好或更差。
  Solr 和 Elasticsearch 都在快速发展,所以,话不多说,先来看下它们的差异清单:
  

为梦想,搜未来——网页搜索篇

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-06-02 22:30 • 来自相关话题

  为梦想,搜未来——网页搜索篇
  亲爱的小伙伴,即日起小编会针对搜狗不同的产品线给各位小伙伴进行详细介绍和专场招聘,这算不算小编发的福利呢?不要太感谢我哦!请小伙伴届时多多关注哦!
  经常上网的小伙伴们对网页搜索这个产品一定不会陌生,“她是谁呢?”
  
  下面小编就爆料一下我们的当家花旦——网页搜索部,首先她是搜狗最早成立的部门,也是最为核心的部门之一,她是搜狗营收的主要来源之一。“那么她的任务是什么呢?”“她承载PC及WAP的网页搜索PC、无线,服务于数亿中国网民的需求。”“她怎么样啊?求介绍。”“她有浓郁的技术气息和宽松的团队氛围,广阔的发展空间也能让你一展身手,快速成长为可以独步互联网江湖的英雄好汉。
  
  “她的家庭成员都有哪些?”“她家有三宝——研究智囊团、开发极客屋和智多星产品狗。
  在研究团队,你可以接触数亿的用户,海量的数据,支撑大规模计算的硬件平台,为你施展技术才能提供了最广阔的平台。她家有最逼格的技术挑战,有最牛的技术极客,还有最high的技术氛围。在这里与众多牛人们一起玩转大数据、人工智能、自然语言处理、机器学习,用最前沿的技术解决最具挑战的任务,帮助用户从海量互联网信息中找到最想要的信息。
  在开发极客屋里,她家每天会迎来数千万的用户,有数亿的查询请求,你的程序无时无刻不在经受着洪水般的压力,可能会面对各种灵异事件,使你能够饱受磨练快速成长;在这里你可以接触到互联网最前沿的技术,互联网最牛的人才。
  在产品团队,你能紧密地对接技术团队,推动对内和对外的项目合作,全面细致地了解搜索引擎技术和用户需求,为搜狗的搜索品质保驾护航,也能深入地了解互联网生态体系。在这里,我们还可以一起探索社交搜索和知识图谱,让搜索变得更有趣与更智慧。”小伙伴们,小编能帮你们的只有这么多了!你还在等什么呢?来,快点投入我们的怀抱!我的家庭需要你!和智慧女神雅典娜在一起吧。
  下面小编就将网页搜索的热招职位share给大伙伴们,希望能够给大家些许帮助哦!
  搜索事业部-机器学习排序研究员(网页搜索)-北京-00522
  岗位职责:
  负责网页搜索机器学习排序算法的研发,优化排序特征使用和排序模型,提升网页搜索相关性效果。
  任职条件:
  1. 硕士以上计算机相关学历,在机器学习、信息检索、数据挖掘等领域有2年以上研究经历,有LTR研究背景者优先
  2. 熟悉Linux开发环境,熟练掌握一门高级语言,如C/C++、Java,熟练掌握至少一种脚本语言
  3. 掌握基本的数据结构和常用算法,有较强的分析和解决问题的能力
  4. 善于学习新事物,善于沟通和表达,对互联网搜索技术研究有浓厚兴趣,有良好的团队合作意识
  搜索事业部-产品经理(网页搜索开放平台)-北京-00022
  岗位职责:
  1、搜狗网页搜索开放平台用户类产品的发起、迭代、落实执行;
  2、保证对应产品项目的召回、精度等产品效果,能够通过产品标准和数据指标管理产品质量;
  3、负责对应的产品大类产品线、运营线接口,负责协调和沟通工作;
  4、对现有用户产品线进行统筹安排,确认优先级;
  5、制定开放平台用户类产品所负责大类中期以上计划并自行驱动执行;
  任职条件:
  1、具有搜索引擎开放平台类产品经验最佳,需要3年以上产品经验;
  能够有原则的建立产品标准,具有制定计划和汇报进度的能力;
  2、善于沟通,能够控制情绪;
  3、能够承担和负责该方向的产品KPI,抗压能力强;
  4、有一定的管理经验,能够快速培训运营同学接手相关执行标准;
  搜索事业部-反作弊策略工程师-北京-00466
  岗位职责:
  1、负责问问、百科等社区类产品反作弊系统,提升社区内容质量,维护内容安全
  2、通过海量数据,分析与挖掘各种潜在关联,从而不断优化反作弊效果,更好地识别作弊用户
  任职条件:
  1. 计算机相关专业背景,
  2. 熟悉C++,C语言,熟悉linuxshell,
  3. 熟练掌握基础数据结构和常见算法,
  4. 熟悉linux操作系统,
  5. 有linux下c/c++编程经验,
  6. 最好有NLP、数据挖掘、机器学习背景,
  7. 有反作弊工作经验最佳
  搜索事业部-前端开发工程师(网页搜索)-北京-00028
  岗位职责:
  1.根据产品原型开发前端代码;
  2.解决主流浏览器及其不同版本之间的兼容性问题;
  3.优化网站的前端性能,保证网站的高质高速。
  任职条件:
  1.有3年以上前端工作经验;
  2.精通Web前端技术基础,有JavaScript高级应用经验者尤佳;
  3.精通Java语言,并有实际将其和前端语言进行配合的项目经验;
  4.熟悉linux系统,有perl、shell、python等脚本处理经验;
  5.有团队精神,充满激情,乐于接受挑战;
  6.专业不限,其中计算机、数学、自动化等相关专业优先考虑。
  搜索事业部-C++开发工程师(网页搜索)-北京-00018
  岗位职责:
  1.检索系统架构设计及开发;
  2.新技术的预研和应用。
  任职条件:
  1.基础扎实,熟练掌握C/C++语言,3年以上Linux环境开发经验;
  2.熟悉TCP/IP、HTTP等网络协议,精通socket网络编程,有大访问量高压力程序开发经验;
  3.熟练掌握常用数据结构和算法,并能灵活运用;
  4.熟悉Linux系统,熟练掌握shell、awk、python等脚本工具;
  5.能承担较大工作压力,有较强独立分析,解决问题的能力;
  6.逻辑思维清晰,良好的文字和语言沟通表达能力,有良好的团队合作精神。
  搜索事业部-JAVA Web开发工程师-北京-00020
  岗位职责:
  1.负责无线web前端的开发工作;
  2.负责web前端系统分析、优化与架构工作;
  任职条件:
  1.有两年以上Web开发经验;
  2.精通各种Web前端技术基础:(x)HTML、CSS、JavaScript,有JavaScript高级应用经验的尤佳;
  3.熟悉java/jsp/servlet编程,了解linux/shell编程;
  4.有团队精神,充满激情,乐于接受挑战;
  5.有无线Web开发经验优先;
  搜索事业部-php web开发工程师-北京-00299
  岗位职责:
  1、网页搜索前端页面的设计和开发工作
  2、管理平台的设计和开发工作
  任职条件:
  1. 计算机或相关专业本科以上学历,2年或以上相关开发经验;
  2. 精通HTML/CSS/JAVASCRIPT的使用;
  3. 精通PHP,具备在linux平台下使用php开发网站的经验;
  4. 熟悉面向对象的php开发;
  5. 有丰富的Mysql开发和优化经验;
  6. 有成功网站开发案例(网站日PV在100万以上优先考虑);
  7. 有良好的团队合作能力,善于沟通,热爱开发事业。
  如果您对我们的职位感兴趣,请发送简历至
  主题为姓名+工作年限+现职位+申请职位(带编号)
  例如:张三+3年+PHP开发+搜索事业部-php web开发工程师-北京-00299
  更多职位浏览请点击 查看全部

  为梦想,搜未来——网页搜索篇
  亲爱的小伙伴,即日起小编会针对搜狗不同的产品线给各位小伙伴进行详细介绍和专场招聘,这算不算小编发的福利呢?不要太感谢我哦!请小伙伴届时多多关注哦!
  经常上网的小伙伴们对网页搜索这个产品一定不会陌生,“她是谁呢?”
  
  下面小编就爆料一下我们的当家花旦——网页搜索部,首先她是搜狗最早成立的部门,也是最为核心的部门之一,她是搜狗营收的主要来源之一。“那么她的任务是什么呢?”“她承载PC及WAP的网页搜索PC、无线,服务于数亿中国网民的需求。”“她怎么样啊?求介绍。”“她有浓郁的技术气息和宽松的团队氛围,广阔的发展空间也能让你一展身手,快速成长为可以独步互联网江湖的英雄好汉。
  
  “她的家庭成员都有哪些?”“她家有三宝——研究智囊团、开发极客屋和智多星产品狗。
  在研究团队,你可以接触数亿的用户,海量的数据,支撑大规模计算的硬件平台,为你施展技术才能提供了最广阔的平台。她家有最逼格的技术挑战,有最牛的技术极客,还有最high的技术氛围。在这里与众多牛人们一起玩转大数据、人工智能、自然语言处理、机器学习,用最前沿的技术解决最具挑战的任务,帮助用户从海量互联网信息中找到最想要的信息。
  在开发极客屋里,她家每天会迎来数千万的用户,有数亿的查询请求,你的程序无时无刻不在经受着洪水般的压力,可能会面对各种灵异事件,使你能够饱受磨练快速成长;在这里你可以接触到互联网最前沿的技术,互联网最牛的人才。
  在产品团队,你能紧密地对接技术团队,推动对内和对外的项目合作,全面细致地了解搜索引擎技术和用户需求,为搜狗的搜索品质保驾护航,也能深入地了解互联网生态体系。在这里,我们还可以一起探索社交搜索和知识图谱,让搜索变得更有趣与更智慧。”小伙伴们,小编能帮你们的只有这么多了!你还在等什么呢?来,快点投入我们的怀抱!我的家庭需要你!和智慧女神雅典娜在一起吧。
  下面小编就将网页搜索的热招职位share给大伙伴们,希望能够给大家些许帮助哦!
  搜索事业部-机器学习排序研究员(网页搜索)-北京-00522
  岗位职责:
  负责网页搜索机器学习排序算法的研发,优化排序特征使用和排序模型,提升网页搜索相关性效果。
  任职条件:
  1. 硕士以上计算机相关学历,在机器学习、信息检索、数据挖掘等领域有2年以上研究经历,有LTR研究背景者优先
  2. 熟悉Linux开发环境,熟练掌握一门高级语言,如C/C++、Java,熟练掌握至少一种脚本语言
  3. 掌握基本的数据结构和常用算法,有较强的分析和解决问题的能力
  4. 善于学习新事物,善于沟通和表达,对互联网搜索技术研究有浓厚兴趣,有良好的团队合作意识
  搜索事业部-产品经理(网页搜索开放平台)-北京-00022
  岗位职责:
  1、搜狗网页搜索开放平台用户类产品的发起、迭代、落实执行;
  2、保证对应产品项目的召回、精度等产品效果,能够通过产品标准和数据指标管理产品质量;
  3、负责对应的产品大类产品线、运营线接口,负责协调和沟通工作;
  4、对现有用户产品线进行统筹安排,确认优先级;
  5、制定开放平台用户类产品所负责大类中期以上计划并自行驱动执行;
  任职条件:
  1、具有搜索引擎开放平台类产品经验最佳,需要3年以上产品经验;
  能够有原则的建立产品标准,具有制定计划和汇报进度的能力;
  2、善于沟通,能够控制情绪;
  3、能够承担和负责该方向的产品KPI,抗压能力强;
  4、有一定的管理经验,能够快速培训运营同学接手相关执行标准;
  搜索事业部-反作弊策略工程师-北京-00466
  岗位职责:
  1、负责问问、百科等社区类产品反作弊系统,提升社区内容质量,维护内容安全
  2、通过海量数据,分析与挖掘各种潜在关联,从而不断优化反作弊效果,更好地识别作弊用户
  任职条件:
  1. 计算机相关专业背景,
  2. 熟悉C++,C语言,熟悉linuxshell,
  3. 熟练掌握基础数据结构和常见算法,
  4. 熟悉linux操作系统,
  5. 有linux下c/c++编程经验,
  6. 最好有NLP、数据挖掘、机器学习背景,
  7. 有反作弊工作经验最佳
  搜索事业部-前端开发工程师(网页搜索)-北京-00028
  岗位职责:
  1.根据产品原型开发前端代码;
  2.解决主流浏览器及其不同版本之间的兼容性问题;
  3.优化网站的前端性能,保证网站的高质高速。
  任职条件:
  1.有3年以上前端工作经验;
  2.精通Web前端技术基础,有JavaScript高级应用经验者尤佳;
  3.精通Java语言,并有实际将其和前端语言进行配合的项目经验;
  4.熟悉linux系统,有perl、shell、python等脚本处理经验;
  5.有团队精神,充满激情,乐于接受挑战;
  6.专业不限,其中计算机、数学、自动化等相关专业优先考虑。
  搜索事业部-C++开发工程师(网页搜索)-北京-00018
  岗位职责:
  1.检索系统架构设计及开发;
  2.新技术的预研和应用。
  任职条件:
  1.基础扎实,熟练掌握C/C++语言,3年以上Linux环境开发经验;
  2.熟悉TCP/IP、HTTP等网络协议,精通socket网络编程,有大访问量高压力程序开发经验;
  3.熟练掌握常用数据结构和算法,并能灵活运用;
  4.熟悉Linux系统,熟练掌握shell、awk、python等脚本工具;
  5.能承担较大工作压力,有较强独立分析,解决问题的能力;
  6.逻辑思维清晰,良好的文字和语言沟通表达能力,有良好的团队合作精神。
  搜索事业部-JAVA Web开发工程师-北京-00020
  岗位职责:
  1.负责无线web前端的开发工作;
  2.负责web前端系统分析、优化与架构工作;
  任职条件:
  1.有两年以上Web开发经验;
  2.精通各种Web前端技术基础:(x)HTML、CSS、JavaScript,有JavaScript高级应用经验的尤佳;
  3.熟悉java/jsp/servlet编程,了解linux/shell编程;
  4.有团队精神,充满激情,乐于接受挑战;
  5.有无线Web开发经验优先;
  搜索事业部-php web开发工程师-北京-00299
  岗位职责:
  1、网页搜索前端页面的设计和开发工作
  2、管理平台的设计和开发工作
  任职条件:
  1. 计算机或相关专业本科以上学历,2年或以上相关开发经验;
  2. 精通HTML/CSS/JAVASCRIPT的使用;
  3. 精通PHP,具备在linux平台下使用php开发网站的经验;
  4. 熟悉面向对象的php开发;
  5. 有丰富的Mysql开发和优化经验;
  6. 有成功网站开发案例(网站日PV在100万以上优先考虑);
  7. 有良好的团队合作能力,善于沟通,热爱开发事业。
  如果您对我们的职位感兴趣,请发送简历至
  主题为姓名+工作年限+现职位+申请职位(带编号)
  例如:张三+3年+PHP开发+搜索事业部-php web开发工程师-北京-00299
  更多职位浏览请点击

5个提升搜索引擎排名的小技巧

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-05-30 00:16 • 来自相关话题

  5个提升搜索引擎排名的小技巧
  5个提升搜索引擎排名的小技巧
  很多站长容易忽视的几个改善搜索引擎排名的小技巧,谷歌大叔在这里跟大家分享一下。
  1)页面的标题要能清楚的说明你是干什么的或者你提供什么产品及服务。标题中应该包含潜在客户在搜索引擎中搜索你的产品或服务时会使用的关键词。并且为网站上的每个页面设计不同的标题。
  2)页面的元描述(meta description,在网页源码中显示为)要设计为关于站点或者页面的简短概述,组合与页面内容相关的关键词,使用一些激励性的语句,鼓励访客进入页面浏览内容。
  3)在页面内容的开始处(body内),要有一个内容标题,应该使用正确的Html标题标签,如:h1、h2、h3等。内容标题要尽量与页面标题吻合,可以是一样的。比如:页面的标题是“3015型光纤激光切割机”。在页面内容(body)的起始处,可以加入一级标题“3015型光纤激光切割机”,html源码是”3015型光纤激光切割机”。二级标题,三级标题等原理相同。
  4)巧用网页文件名
  如果您使用的内容管理系统(CMS也可以理解为网站后台)支持生成静态页面并且可以设定文件名,将对您后期搜索引擎优化提供极大的便利和优势。在为网页文件命名时,尽量避免使用frontpage.html或者page1.html等对搜索引擎不友好的文件名。尽量使用关键词组合等友好的文件名。例如:WNT224型动物饲料颗粒机.html
  备注:不要修改index.htm、index.html、index.php、default.asp等系统默认页面文件名。
  5)让搜索引擎(蜘蛛)读懂页面上的图片。
  为您上传的每一张图片编写alt属性。所有的主流搜索引擎对文本内容的识别能力是比较好的,但为图片、音频、视频等多媒体文件不能很好的识别。对于我们日常发布内容时大量使用的图片,搜索引擎主要通过alt属性来识别,因此仔细科学的利用alt属性将为您带来意外的惊喜。大多数内容管理系统(CMS也可以理解为网站后台)都支持编辑Html源代码。图片的源代码示例:
  
  那么,如何编写高质量的alt属性呢?建议用简短的问题说明图片内容。如上例中说明图片的内容为“三峡大坝”。这样,搜索引擎蜘蛛在抓取时就认为这张图片是关于三峡大坝的。
  此外,图片的文件名对搜索引擎蜘蛛也是一个强有力的信号,因此,图片的文件名也不可随意。
  以上5点小技巧,如果您能坚持操作,相信能为改善您站点的自然搜索排名产生很有利的影响。
  原文:个提升搜索引擎排名的小技巧/
  环新网络
  主营业务:外贸网站建设、外贸网站优化(外贸seo)、谷歌竞价、外贸SNS、B2B平台推广、EDM营销等 查看全部

  5个提升搜索引擎排名的小技巧
  5个提升搜索引擎排名的小技巧
  很多站长容易忽视的几个改善搜索引擎排名的小技巧,谷歌大叔在这里跟大家分享一下。
  1)页面的标题要能清楚的说明你是干什么的或者你提供什么产品及服务。标题中应该包含潜在客户在搜索引擎中搜索你的产品或服务时会使用的关键词。并且为网站上的每个页面设计不同的标题。
  2)页面的元描述(meta description,在网页源码中显示为)要设计为关于站点或者页面的简短概述,组合与页面内容相关的关键词,使用一些激励性的语句,鼓励访客进入页面浏览内容。
  3)在页面内容的开始处(body内),要有一个内容标题,应该使用正确的Html标题标签,如:h1、h2、h3等。内容标题要尽量与页面标题吻合,可以是一样的。比如:页面的标题是“3015型光纤激光切割机”。在页面内容(body)的起始处,可以加入一级标题“3015型光纤激光切割机”,html源码是”3015型光纤激光切割机”。二级标题,三级标题等原理相同。
  4)巧用网页文件名
  如果您使用的内容管理系统(CMS也可以理解为网站后台)支持生成静态页面并且可以设定文件名,将对您后期搜索引擎优化提供极大的便利和优势。在为网页文件命名时,尽量避免使用frontpage.html或者page1.html等对搜索引擎不友好的文件名。尽量使用关键词组合等友好的文件名。例如:WNT224型动物饲料颗粒机.html
  备注:不要修改index.htm、index.html、index.php、default.asp等系统默认页面文件名。
  5)让搜索引擎(蜘蛛)读懂页面上的图片。
  为您上传的每一张图片编写alt属性。所有的主流搜索引擎对文本内容的识别能力是比较好的,但为图片、音频、视频等多媒体文件不能很好的识别。对于我们日常发布内容时大量使用的图片,搜索引擎主要通过alt属性来识别,因此仔细科学的利用alt属性将为您带来意外的惊喜。大多数内容管理系统(CMS也可以理解为网站后台)都支持编辑Html源代码。图片的源代码示例:
  
  那么,如何编写高质量的alt属性呢?建议用简短的问题说明图片内容。如上例中说明图片的内容为“三峡大坝”。这样,搜索引擎蜘蛛在抓取时就认为这张图片是关于三峡大坝的。
  此外,图片的文件名对搜索引擎蜘蛛也是一个强有力的信号,因此,图片的文件名也不可随意。
  以上5点小技巧,如果您能坚持操作,相信能为改善您站点的自然搜索排名产生很有利的影响。
  原文:个提升搜索引擎排名的小技巧/
  环新网络
  主营业务:外贸网站建设、外贸网站优化(外贸seo)、谷歌竞价、外贸SNS、B2B平台推广、EDM营销等

实现一个自己的搜索引擎的初始规划(2017版)

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-05-20 18:49 • 来自相关话题

  实现一个自己的搜索引擎的初始规划(2017版)
  在想自己和刚毕业的时候处理问题有什么不同。刚毕业的时候如果想卸载停用什么东西提示说正在使用,我就去找个强力卸载软件。如果我想清理浏览器缓存,会直接用工具,如果想找到缓存路径选择性的清理,会百度一下这个浏览器的默认缓存路径在哪里。现在,我会打开资源监视器查看磁盘活动,对文件,找到使用文件的进程;对应用,找到它在读写的文件路径。
  
  现在接口服务组的性能卡在memcahe缓存上。对于缓存的过渡依赖,而且为了维护这个缓存数据,业务流程的复杂性大大提高。其实本身接口这块业务流程是很简单的,只是要求承担很大的并发量。要高并发,业务就更得简单。nginx服务单台机器号称能承载10亿的并发,为啥?逻辑简单啊,就是按照规则找到对应的处理服务,将请求转发过去。
  前段时间接了个私活。话说这一年多的时间还真干了不少事情,干过私活创过业的。业务就是创建一个带支付的途家+携程。刚拿到活儿,因为是php的,我又不会php,愁死了。因为是男票帮忙接的活儿。我就说是男票把我给卖了。确实是,他接活儿,但是自己看都不看一眼,只负责拿钱。我自己啥都没有,还怕做不好坏了男票的名声。本来人家预算是2w的,我说这个得5w。最后给了3w。1个月时间确实是搞定了。总结一下,这个从UI设计到编码测试只有我一个人的项目,就前端JS样式这一样,别人也很难做的很快。我之所以能做的很快,综合能力是一方面,最重要的原因是:业务逻辑理的顺,包括支付,结算,后台给商家打款,统计分析。业务逻辑划分的清楚,做起来工作量就没有那么大。话说男票给我接私活这事儿,我嘴里是埋怨的,心里很清楚:他之所以给我接这个活儿是因为我想做。他并不是为了钱,是真心知道我想要什么。而我嘴上的埋怨也只是因为一时的辛苦发泄一下而已。这埋怨也是笑着埋怨的,谁也没当回事情。在日本的时候看过一个日文版的韩国水木连续剧,真伊有两个爱她超过爱自己的母亲。她的生母和老师。生母拼其一生想让真伊得到爱,老师拼其一生想让真伊得到痛。因为痛是才艺的源泉。恩浩注定不能和真伊在一起,因为他的软弱。爱一个不对的人,心就像是浮萍,漂泊探索一无所获。看破看不破,终究是寂寞。真伊与正翰的爱感化了所有人,而真伊终究也没与正翰白首不相离。而爱一个对的人,他们的经历是别人所不能比的,他们最终心里都是踏实的。真伊为才艺而生,正翰为天下而活。这才是他们的平静与归宿。不像真伊那般有才,也不像真伊那般命苦。过着幸福的小生活,做着自己想做的事,吾复何求。
  又想到离线数据那个小项目,在想之前跑全量只是取ID都要跑四个小时,我写的程序只要20多分钟,为啥呢,最重要的原因也是划分的清楚。人家问我这个项目用到了哪些线程之间共享资源的地方,我说:这里面有个AtomicInteger作为线程计数器算不算,我需要计算是不是所有的线程都是正常跑完终止的。其他的共享资源我都放到一个类里面了,但是Map我就是用的HashMap,也没用到ConcurrentHashMap,话说咱也是知道并发包里的各种并发容器的原理的。但是业务逻辑划分清楚了,我能保证写HashMap的时候,只有一个线程在访问,我没有必要非要用并发啊。所有的线程最终要生成全量文件,我用几百个线程,每个线程生成一个文件,各自读写打包压缩,各不干扰,当然要比给文件加锁,等待写操作快得多。话说这个技巧也已经被用的很多了,lucene的添加索引就是这么干的。
  上周开会的时候,我突然想到(其实之前早就想到了,但是每次说都没人搭理,就过去了),媒资接口高并发的地方都是根据各种条件取数据,其他的程序都是为了维护这份数据服务的,维护数据很复杂。除了接业务线的消息,还有自己的数据库和缓存对比补数据的。将来,因为联通和电信要做物理隔离,隔离后还需要一个写缓存的统一监控专门负责给业务线返回更新消息,数据补偿的。然而所有的这些复杂逻辑,一个搜索引擎全能搞定。
  之所以我之前提议没人搭理,分析其原因:我们目前的组内搜索引擎做的不好,大家只会用最简单的功能。而我并没向大家完整介绍过搜索引擎都能干什么,而且我自己什么都没有做。阳哥自己搭建了一套redis来做日志的统一收集,我受到启发。现在,我有服务器,熟悉java底层和算法,搭建一套适合中国人用的搜索引擎又是我一直以来的心愿,现在又有业务场景需要用,干嘛不自己做一套。之前离开人人之后看过王志亮写的庖丁jade的源码,觉得自己也是可以做这么一套框架的,况且只是一个持久层框架,原理非常清晰明了。果然,来到乐视看到了和庖丁jade非常像的mango框架。如果现在我不研发这么一套专门应用场景的,适合中文分词的,非常合适作为列表缓存的搜索引擎框架出来,过两年肯定会有人比我先发布的,因为确实是很有应用场景的。
  先说为什么接口服务要用搜索引擎。搜索引擎可以支持高并发,之前用过基于lucene的solr搜索引擎,可以支持单台上万的并发。它是有多少内存就可以吃掉多少内存的,将集中式缓存的以空间换时间用到了极致。接口服务只更新缓存,不更新DB。如果换做搜索引擎,搜索引擎每分钟从数据库的从库中读取数据,对数据库基本没压力。业务线给我们发消息,我更新完缓存再返回消息也需要好几分钟。用搜索引擎实时性会更高。业务逻辑简单,现在接口服务用到了庞大的SOA架构,逻辑复杂,响应时间长。用搜索引擎,只需要一个接口服务调用搜索引擎搞定所有事情。搜索引擎内的数据高度结构化,可以添加复杂的条件,函数,分组,排序,实际上也是在JVM内完成的,直接和内存中数据交互。速度快太多了。接口服务目前的瓶颈在缓存上(必须在缓存上啊,整个都在和缓存打交道),经常性的缓存返回数据时间长。多个键值的时候mget性能差,还很容易堵塞,影响到整个服务。目前能采用的措施就是将一部分任务转给DB,另外考虑将memcache换成Redis缓存。不管是memcache还是redis,都不合适这种动辄就100K以上的大数据的情况。键值对的缓存最佳应用场景都应该是key和value体积都是极小的。所以我们现在的尝试其实都不解决本质问题。用的dubbo做的RPC调用也有问题,dubbo有自己的bug,一旦遇到就很头大。增加这层dubbo,增加了通讯开销和系统复杂性,实际性的好处却没得到发挥。而搜索引擎本身就是为大数据而生,大数据量,大数据体,高并发,而且对于这种多维查询,是搜索引擎最合适的用武之地。搜索引擎也可以单独作为RPC的被调用方,直接给其他业务线用。我们甚至可以将接口服务接收请求接口层都去掉,接口服务只有一个搜索引擎。德伟最头疼的部署问题迎刃而解。
  最最重要的原因,搜索引擎是基于全文索引的,目前的搜索模型纯波尔模型,向量空间模型,概率模型都是不适合像媒资这种主要是ID列表查询的。相应的,搜索引擎的分析工具的侧重面也是不合适媒资这样的业务场景的。
  来看接口服务目前的架构:
  很复杂且不合理,需要很多的优化。其中还用到了Falcon监控平台和美团点评的CAT监控。数据库更新目前要通知ES搜索引擎,通知缓存,通知业务线。
  换用搜索引擎之后的架构:
  
  就是这么简单,要不是为了保持目前的对外接口不变,接口api都可以不要。
  搜索引擎自己集成日志,监控。想要调试也只要输入参数,内部处理过程可以一目了然。从实现上,包装lucene做一个平台即可。较其他搜索引擎优化的点:着重提高根据ID维度作为查询条件的有序输出,将接口的常用操作函数化,使其适合作为接口服务。将solr中不合适中文分词的词根化等环节去掉,加强中文特有的拼音,近义词的搜索(等后续有时间时优化)。集成jvm,内存,cpu的日志,监控和报警,部署方便。初始不需要做太多,以后根据业务场景需要慢慢优化。其实我是要尝试使用自己的算法的,自认才疏学浅,没好意思说。 查看全部

  实现一个自己的搜索引擎的初始规划(2017版)
  在想自己和刚毕业的时候处理问题有什么不同。刚毕业的时候如果想卸载停用什么东西提示说正在使用,我就去找个强力卸载软件。如果我想清理浏览器缓存,会直接用工具,如果想找到缓存路径选择性的清理,会百度一下这个浏览器的默认缓存路径在哪里。现在,我会打开资源监视器查看磁盘活动,对文件,找到使用文件的进程;对应用,找到它在读写的文件路径。
  
  现在接口服务组的性能卡在memcahe缓存上。对于缓存的过渡依赖,而且为了维护这个缓存数据,业务流程的复杂性大大提高。其实本身接口这块业务流程是很简单的,只是要求承担很大的并发量。要高并发,业务就更得简单。nginx服务单台机器号称能承载10亿的并发,为啥?逻辑简单啊,就是按照规则找到对应的处理服务,将请求转发过去。
  前段时间接了个私活。话说这一年多的时间还真干了不少事情,干过私活创过业的。业务就是创建一个带支付的途家+携程。刚拿到活儿,因为是php的,我又不会php,愁死了。因为是男票帮忙接的活儿。我就说是男票把我给卖了。确实是,他接活儿,但是自己看都不看一眼,只负责拿钱。我自己啥都没有,还怕做不好坏了男票的名声。本来人家预算是2w的,我说这个得5w。最后给了3w。1个月时间确实是搞定了。总结一下,这个从UI设计到编码测试只有我一个人的项目,就前端JS样式这一样,别人也很难做的很快。我之所以能做的很快,综合能力是一方面,最重要的原因是:业务逻辑理的顺,包括支付,结算,后台给商家打款,统计分析。业务逻辑划分的清楚,做起来工作量就没有那么大。话说男票给我接私活这事儿,我嘴里是埋怨的,心里很清楚:他之所以给我接这个活儿是因为我想做。他并不是为了钱,是真心知道我想要什么。而我嘴上的埋怨也只是因为一时的辛苦发泄一下而已。这埋怨也是笑着埋怨的,谁也没当回事情。在日本的时候看过一个日文版的韩国水木连续剧,真伊有两个爱她超过爱自己的母亲。她的生母和老师。生母拼其一生想让真伊得到爱,老师拼其一生想让真伊得到痛。因为痛是才艺的源泉。恩浩注定不能和真伊在一起,因为他的软弱。爱一个不对的人,心就像是浮萍,漂泊探索一无所获。看破看不破,终究是寂寞。真伊与正翰的爱感化了所有人,而真伊终究也没与正翰白首不相离。而爱一个对的人,他们的经历是别人所不能比的,他们最终心里都是踏实的。真伊为才艺而生,正翰为天下而活。这才是他们的平静与归宿。不像真伊那般有才,也不像真伊那般命苦。过着幸福的小生活,做着自己想做的事,吾复何求。
  又想到离线数据那个小项目,在想之前跑全量只是取ID都要跑四个小时,我写的程序只要20多分钟,为啥呢,最重要的原因也是划分的清楚。人家问我这个项目用到了哪些线程之间共享资源的地方,我说:这里面有个AtomicInteger作为线程计数器算不算,我需要计算是不是所有的线程都是正常跑完终止的。其他的共享资源我都放到一个类里面了,但是Map我就是用的HashMap,也没用到ConcurrentHashMap,话说咱也是知道并发包里的各种并发容器的原理的。但是业务逻辑划分清楚了,我能保证写HashMap的时候,只有一个线程在访问,我没有必要非要用并发啊。所有的线程最终要生成全量文件,我用几百个线程,每个线程生成一个文件,各自读写打包压缩,各不干扰,当然要比给文件加锁,等待写操作快得多。话说这个技巧也已经被用的很多了,lucene的添加索引就是这么干的。
  上周开会的时候,我突然想到(其实之前早就想到了,但是每次说都没人搭理,就过去了),媒资接口高并发的地方都是根据各种条件取数据,其他的程序都是为了维护这份数据服务的,维护数据很复杂。除了接业务线的消息,还有自己的数据库和缓存对比补数据的。将来,因为联通和电信要做物理隔离,隔离后还需要一个写缓存的统一监控专门负责给业务线返回更新消息,数据补偿的。然而所有的这些复杂逻辑,一个搜索引擎全能搞定。
  之所以我之前提议没人搭理,分析其原因:我们目前的组内搜索引擎做的不好,大家只会用最简单的功能。而我并没向大家完整介绍过搜索引擎都能干什么,而且我自己什么都没有做。阳哥自己搭建了一套redis来做日志的统一收集,我受到启发。现在,我有服务器,熟悉java底层和算法,搭建一套适合中国人用的搜索引擎又是我一直以来的心愿,现在又有业务场景需要用,干嘛不自己做一套。之前离开人人之后看过王志亮写的庖丁jade的源码,觉得自己也是可以做这么一套框架的,况且只是一个持久层框架,原理非常清晰明了。果然,来到乐视看到了和庖丁jade非常像的mango框架。如果现在我不研发这么一套专门应用场景的,适合中文分词的,非常合适作为列表缓存的搜索引擎框架出来,过两年肯定会有人比我先发布的,因为确实是很有应用场景的。
  先说为什么接口服务要用搜索引擎。搜索引擎可以支持高并发,之前用过基于lucene的solr搜索引擎,可以支持单台上万的并发。它是有多少内存就可以吃掉多少内存的,将集中式缓存的以空间换时间用到了极致。接口服务只更新缓存,不更新DB。如果换做搜索引擎,搜索引擎每分钟从数据库的从库中读取数据,对数据库基本没压力。业务线给我们发消息,我更新完缓存再返回消息也需要好几分钟。用搜索引擎实时性会更高。业务逻辑简单,现在接口服务用到了庞大的SOA架构,逻辑复杂,响应时间长。用搜索引擎,只需要一个接口服务调用搜索引擎搞定所有事情。搜索引擎内的数据高度结构化,可以添加复杂的条件,函数,分组,排序,实际上也是在JVM内完成的,直接和内存中数据交互。速度快太多了。接口服务目前的瓶颈在缓存上(必须在缓存上啊,整个都在和缓存打交道),经常性的缓存返回数据时间长。多个键值的时候mget性能差,还很容易堵塞,影响到整个服务。目前能采用的措施就是将一部分任务转给DB,另外考虑将memcache换成Redis缓存。不管是memcache还是redis,都不合适这种动辄就100K以上的大数据的情况。键值对的缓存最佳应用场景都应该是key和value体积都是极小的。所以我们现在的尝试其实都不解决本质问题。用的dubbo做的RPC调用也有问题,dubbo有自己的bug,一旦遇到就很头大。增加这层dubbo,增加了通讯开销和系统复杂性,实际性的好处却没得到发挥。而搜索引擎本身就是为大数据而生,大数据量,大数据体,高并发,而且对于这种多维查询,是搜索引擎最合适的用武之地。搜索引擎也可以单独作为RPC的被调用方,直接给其他业务线用。我们甚至可以将接口服务接收请求接口层都去掉,接口服务只有一个搜索引擎。德伟最头疼的部署问题迎刃而解。
  最最重要的原因,搜索引擎是基于全文索引的,目前的搜索模型纯波尔模型,向量空间模型,概率模型都是不适合像媒资这种主要是ID列表查询的。相应的,搜索引擎的分析工具的侧重面也是不合适媒资这样的业务场景的。
  来看接口服务目前的架构:
  很复杂且不合理,需要很多的优化。其中还用到了Falcon监控平台和美团点评的CAT监控。数据库更新目前要通知ES搜索引擎,通知缓存,通知业务线。
  换用搜索引擎之后的架构:
  
  就是这么简单,要不是为了保持目前的对外接口不变,接口api都可以不要。
  搜索引擎自己集成日志,监控。想要调试也只要输入参数,内部处理过程可以一目了然。从实现上,包装lucene做一个平台即可。较其他搜索引擎优化的点:着重提高根据ID维度作为查询条件的有序输出,将接口的常用操作函数化,使其适合作为接口服务。将solr中不合适中文分词的词根化等环节去掉,加强中文特有的拼音,近义词的搜索(等后续有时间时优化)。集成jvm,内存,cpu的日志,监控和报警,部署方便。初始不需要做太多,以后根据业务场景需要慢慢优化。其实我是要尝试使用自己的算法的,自认才疏学浅,没好意思说。

用谷歌搜索技术问题一定比用百度好?也未必...

网站优化优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-05-15 00:56 • 来自相关话题

  用谷歌搜索技术问题一定比用百度好?也未必...
  
  在我们程序员圈子里,存在着各种鄙视链,其中对于搜索引擎的选择,存在着谷歌 > 百度的观点。很多开发者认为,百度上的搜索质量不高,而谷歌搜索更能帮助我们解决开发中的问题。
  那么实际情况真的是这样吗?
  近日,一名开发者就对Google的搜索结果质量发表了下面的观点!
  以下内容转自OSC开源社区(ID:oschina2013)一名开发者出于好奇在 Google 使用php mysql email register作为关键词进行了搜索。很显然,这是在查找如何使用 PHP 和 MySQL 实现邮箱注册的功能。搜索结果返回了教程、操作方法、代码片段等内容。不过大多数结果都包含有错误的 SQL 语句,例如:
  // Don't do this!<br />mysqli_query("SELECT * FROM user WHERE id = '" . $_POST["user'] . "'");
  根据对谷歌搜索结果的整理,这些 SQL 语句可大致分为四种类型:
  SQL 查询中的所有参数都被转义
  只在绝对必要的情况下才对传入的参数进行转义
  作者尝试进行了部分转义,但存在漏洞
  没有任何转义逻辑
  这名开发者表示,当他发现一个搜索结果中存在有问题的 SQL 语句时,就会跳到浏览下一个结果。上面就是根据此过程整理出来的 30 条搜索结果,其中部分答案包含 SQL 注入语句。对此他认为,大多数 Google 搜索结果的质量十分低下。有些搜索结果就是通过 SEO 优化而排在前面的“扯淡”教程。同时,这篇文章也引起了程序员的广泛讨论(reddit, Hacker News),不过大家关注的重点也纷纷转移到了编程语言 PHP 上。但作者本意其实是希望程序员能甄别互联网上随手可得的任何资料,毕竟这里面鱼龙混杂。尤其要注意那些通过 SEO 优化而排名靠前的搜索结果,因为它们往往就是“雷区”。如果您正在学习Spring Boot,不用纠结百度或谷歌了,直接关注我们的免费教程:那么,作为开发者的你平时都用什么搜索引擎呢?你觉得哪个更好呢?留言说说你的观点吧!
  往期推荐
  喜欢本文欢迎转发,关注我订阅更多精彩
  关注我回复「加群」,加入Spring技术交流群 查看全部

  用谷歌搜索技术问题一定比用百度好?也未必...
  
  在我们程序员圈子里,存在着各种鄙视链,其中对于搜索引擎的选择,存在着谷歌 > 百度的观点。很多开发者认为,百度上的搜索质量不高,而谷歌搜索更能帮助我们解决开发中的问题。
  那么实际情况真的是这样吗?
  近日,一名开发者就对Google的搜索结果质量发表了下面的观点!
  以下内容转自OSC开源社区(ID:oschina2013)一名开发者出于好奇在 Google 使用php mysql email register作为关键词进行了搜索。很显然,这是在查找如何使用 PHP 和 MySQL 实现邮箱注册的功能。搜索结果返回了教程、操作方法、代码片段等内容。不过大多数结果都包含有错误的 SQL 语句,例如:
  // Don't do this!<br />mysqli_query("SELECT * FROM user WHERE id = '" . $_POST["user'] . "'");
  根据对谷歌搜索结果的整理,这些 SQL 语句可大致分为四种类型:
  SQL 查询中的所有参数都被转义
  只在绝对必要的情况下才对传入的参数进行转义
  作者尝试进行了部分转义,但存在漏洞
  没有任何转义逻辑
  这名开发者表示,当他发现一个搜索结果中存在有问题的 SQL 语句时,就会跳到浏览下一个结果。上面就是根据此过程整理出来的 30 条搜索结果,其中部分答案包含 SQL 注入语句。对此他认为,大多数 Google 搜索结果的质量十分低下。有些搜索结果就是通过 SEO 优化而排在前面的“扯淡”教程。同时,这篇文章也引起了程序员的广泛讨论(reddit, Hacker News),不过大家关注的重点也纷纷转移到了编程语言 PHP 上。但作者本意其实是希望程序员能甄别互联网上随手可得的任何资料,毕竟这里面鱼龙混杂。尤其要注意那些通过 SEO 优化而排名靠前的搜索结果,因为它们往往就是“雷区”。如果您正在学习Spring Boot,不用纠结百度或谷歌了,直接关注我们的免费教程:那么,作为开发者的你平时都用什么搜索引擎呢?你觉得哪个更好呢?留言说说你的观点吧!
  往期推荐
  喜欢本文欢迎转发,关注我订阅更多精彩
  关注我回复「加群」,加入Spring技术交流群

解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2022-09-21 17:10 • 来自相关话题

  解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地
  网站SEO搜索引擎优化培训(实训入门)——让理论落地
  网站SEO搜索引擎优化培训(注意,是导师面对面指导培训,非课堂理论培训),以移动网站为突破口(即移动优先的SEO优化策略和方法)),带动PC站的整体提升,给你一套快速可复用的解决方案。培训地点为广州,时间为1天。面向广州、深圳、东莞、长沙的在职人员(非个人站长)。通过周末的刻意练习,可以突破瓶颈,强化技能,提升SEO在企业应用领域的实践能力。.
  SEO不缺理论,缺的是实践验证。网站SEO搜索优化培训(实战),帮助学员将所学的SEO理论转化为实际应用能力,基于SEO理论+cms系统(使用wordpress),去除存井,付费关注核心,不是学习wordpress或者seo,而是将wordpress建站系统与seo网站优化理论和原理相结合,构建一个对搜索引擎友好的搜索引擎SEO规范。,移动优先内容类型网站,然后结合百度站长资源平台,第三方高权重自媒体平台等SEO工具,研究关键词,做好内容施工,学生最终将掌握是的,
  网站SEO搜索引擎优化培训(培训大纲)
  培训模块
  实用知识点
  知识点关键词
  学习模式
  WordPress 构建响应式 SEO 规范 网站
  网站环境:域名+空间选择/购买和解析
  域名空间解析 PHP7 mysql SSL 阿里云
  实践指导/刻意练习
  文件上传:使用 FTP 工具 (FileZilla)
  FTP FileZilla 文件上传/下载
  WordPress 使用:网站 上的版本选择和安装
  在 3 分钟内安装 WordPress
  WordPress使用:后台设置和SEO优化URL结构
  常规选项 媒体选项 永久链接 伪静态 .htaccess
  WordPress使用:主题模板的选择和购买
  免费/付费/安装主题响应式(自适应)_用户体验
  WordPress使用:主题模板的安装和配置
  自定义类别菜单主题选项小部件
  WordPress 全站优化:网站核心关键词确定和布局
  
  关键词研究/战略/布局/密度/长尾
  WordPress全站优化:首页/栏目/TAG/内容页TDK写作技巧
  标题描述关键字不堆叠关键词
  WordPress 全站优化:SEO 和 网站安全和实用插件
  自动内链远程图片提速 SITEMAP robots.txt 网站安全木马清理优化百度站长网站备份
  WordPress 全站优化:SEO 清单(独家)和搜索引擎提交
  检查缺少的站长平台提交站点
  两个基于 SEO 的 网站 内容构建点
  了解文章发帖和更新点、添加标签和页面的异同
  文章发布添加标签添加页面
  实践指导/刻意练习
  结合关键词布局,制定内容建设的长期策略
  关键词开发与扩展文章更新频率数
  使用内容采集 工具(确保内容新鲜度)
  内容实时度伪原创技术权威
  百度官方优质内容标准解读与理解
  如何制作优质内容?
  3百度站长资源平台等SEO工具的使用
  百度站长资源平台的使用
  站点属性 提交 SITEMAP Express收录 使用关键词 抓取诊断索引流量
  实践指导/刻意练习
  爱站 和 5118 工具的使用(付费功能)
  网站权重排名关键词库
  资源提供者/关键词库
  
  四大第三方高权平台做SEO
  第三方高权限平台有哪些?
  案例描述/操作要点
  机构注册/申请自媒体
  企业SEO优化的五个方向
  SEO外包策略
  如何找到靠谱的SEO外包公司
  探索交流/学习材料
  百度小程序
  认知百度小程序及规划指南
  注:大纲为整体参考。参加培训的学员可以根据自己的需求进行选择或关注,但不要偏离SEO主题。同时,也欢迎您带着问题前来参加培训。
  网站SEO搜索引擎优化培训(培训说明)
  时间:一天(8小时)
  地点:广州天河汽车站星巴克咖啡厅
  费用:800元
  *参加者需携带笔记本电脑。
  *学习者需要基础,了解一定的SEO理论和实践。另外,如果你能熟悉html、css,以及js/jquery和php+mysql建站方案(训练不需要改代码,但知道代码的意思就更好了) ,对于手机网站和回复网站对公式有一定了解,最好用网页编辑软件,比如dreamweaver。
  另外:SEO发展多年,不乏理论。您可以通过网络学习,也可以观看我们导师录制的一些视频(即将上线)。
  附:正确理解网站优化
  网站优化,主要指SEO部分,但不限于SEO。为什么?因为网站优化的意义更大,搜索引擎的SEO优化是其中的一部分,用户体验的网站优化也是其中的一部分。
  狭义的网站优化,即搜索引擎优化(SEO),是一种利用搜索引擎的搜索规则来提高目的网站在相关搜索引擎中排名的方式。
  广义上的网站优化,考虑的因素不仅仅是搜索引擎,还要充分满足用户的需求和特点,清晰的网站导航,完整的在线帮助。在此基础上,网站的功能和信息效果最好。
  网站优化包括SEO,两者是包容的,不是等价的。一句话概括就是:网站优化的目的是让网站更容易被搜索引擎收录搜索到,提升用户体验和转化率,进而创造价值。
  核心方法:搜索引擎优化的方法,怎么优化搜索引擎排名
  1:优化网站内容
  优化搜索引擎的方法有很多,但其中最重要的一种是优化网站内容。
  网站内容包括文字、图片、视频等,如果这个内容不引起人们的注意,那么网站就不是很有用。因此,网站要想在搜索引擎中排名靠前,就必须保证网站内容的质量。
  具体来说是为了保证文字内容的准确性和可读性,图片内容的质量和可视性,视频内容的流畅度和清晰度。只有这样,人们才会愿意在线浏览您的 网站。而如果你的网站能吸引人浏览,那它肯定是搜索引擎中的佼佼者。
  3:优化网站链接
  如果您想在搜索引擎优化方面取得成功,链接优化是您业务不可或缺的一部分。内部和外部链接对于 SEO 都很重要。
  链接优化的主要目的是吸引尽可能多的有效外部链接。这些外部链接对于增加 网站 的权限和流量至关重要。此外,有效的外部链接可以帮助 网站 在 SERP 中获得更好的排名。
  
  那么我们如何才能实现有效的链接优化呢?这里有一些简单易行的方法。
  找到有效的外部链接方法并不难,您只需做一些简单的市场调查。根据自己的行业选择合适的关键词进行市场调研。例如,您可以使用“衣服”、“裤子”、“上衣”等关键词 来选择对应的竞争对手。当然,您也可以使用 Google AdWords 工具进行竞争分析。
  内容优化并不难,你只需要保证你的内容能吸引其他网站或博客引用即可。此外,内容也应该有一定的多样性,而不是一成不变的。这样,别人是否愿意引用你作为信息或信息的来源?当然,您也可以通过内容广告鼓励他人引用您的内容。
  内容会随着时间的推移而过时。因此,如果你想保持网站上的内容比较新鲜,就需要不断的更新和补充内容。
  2:优化网站目录
  搜索引擎优化的方法有很多种,其中一个非常重要的方法是优化网站目录。
  网站目录优化可以让搜索引擎更容易理解你的网站内容,从而为你的网站带来更好的搜索排名。
  我们来看看如何优化网站目录。
  
  首先,对于网站目录,最好使用静态目录。
  静态目录让搜索引擎更容易理解你的网站内容,也可以帮助你的网站获得更好的搜索排名。
  其次,注意目录中文件名的命名。
  文件名必须准确反映文件的内容,以便搜索引擎能够识别。另外,不要在文件名中使用特殊字符,这会导致识别困难。
  最后,注意在目录中创建一个文件,告诉搜索引擎相关信息。该文件通常是 robots.txt。
  robots.txt 文件收录有关如何访问和使用您的 网站 内容的一些信息。因此,如果您希望搜索引擎首先读取和使用您的内容,则必须将其写入此文件中。
  使用上述方法优化您的网站目录将有助于您的网站在搜索引擎中排名更高。 查看全部

  解决方案:网站SEO搜索引擎优化培训(实训介绍)——让理论落地
  网站SEO搜索引擎优化培训(实训入门)——让理论落地
  网站SEO搜索引擎优化培训(注意,是导师面对面指导培训,非课堂理论培训),以移动网站为突破口(即移动优先的SEO优化策略和方法)),带动PC站的整体提升,给你一套快速可复用的解决方案。培训地点为广州,时间为1天。面向广州、深圳、东莞、长沙的在职人员(非个人站长)。通过周末的刻意练习,可以突破瓶颈,强化技能,提升SEO在企业应用领域的实践能力。.
  SEO不缺理论,缺的是实践验证。网站SEO搜索优化培训(实战),帮助学员将所学的SEO理论转化为实际应用能力,基于SEO理论+cms系统(使用wordpress),去除存井,付费关注核心,不是学习wordpress或者seo,而是将wordpress建站系统与seo网站优化理论和原理相结合,构建一个对搜索引擎友好的搜索引擎SEO规范。,移动优先内容类型网站,然后结合百度站长资源平台,第三方高权重自媒体平台等SEO工具,研究关键词,做好内容施工,学生最终将掌握是的,
  网站SEO搜索引擎优化培训(培训大纲)
  培训模块
  实用知识点
  知识点关键词
  学习模式
  WordPress 构建响应式 SEO 规范 网站
  网站环境:域名+空间选择/购买和解析
  域名空间解析 PHP7 mysql SSL 阿里云
  实践指导/刻意练习
  文件上传:使用 FTP 工具 (FileZilla)
  FTP FileZilla 文件上传/下载
  WordPress 使用:网站 上的版本选择和安装
  在 3 分钟内安装 WordPress
  WordPress使用:后台设置和SEO优化URL结构
  常规选项 媒体选项 永久链接 伪静态 .htaccess
  WordPress使用:主题模板的选择和购买
  免费/付费/安装主题响应式(自适应)_用户体验
  WordPress使用:主题模板的安装和配置
  自定义类别菜单主题选项小部件
  WordPress 全站优化:网站核心关键词确定和布局
  
  关键词研究/战略/布局/密度/长尾
  WordPress全站优化:首页/栏目/TAG/内容页TDK写作技巧
  标题描述关键字不堆叠关键词
  WordPress 全站优化:SEO 和 网站安全和实用插件
  自动内链远程图片提速 SITEMAP robots.txt 网站安全木马清理优化百度站长网站备份
  WordPress 全站优化:SEO 清单(独家)和搜索引擎提交
  检查缺少的站长平台提交站点
  两个基于 SEO 的 网站 内容构建点
  了解文章发帖和更新点、添加标签和页面的异同
  文章发布添加标签添加页面
  实践指导/刻意练习
  结合关键词布局,制定内容建设的长期策略
  关键词开发与扩展文章更新频率数
  使用内容采集 工具(确保内容新鲜度)
  内容实时度伪原创技术权威
  百度官方优质内容标准解读与理解
  如何制作优质内容?
  3百度站长资源平台等SEO工具的使用
  百度站长资源平台的使用
  站点属性 提交 SITEMAP Express收录 使用关键词 抓取诊断索引流量
  实践指导/刻意练习
  爱站 和 5118 工具的使用(付费功能)
  网站权重排名关键词库
  资源提供者/关键词库
  
  四大第三方高权平台做SEO
  第三方高权限平台有哪些?
  案例描述/操作要点
  机构注册/申请自媒体
  企业SEO优化的五个方向
  SEO外包策略
  如何找到靠谱的SEO外包公司
  探索交流/学习材料
  百度小程序
  认知百度小程序及规划指南
  注:大纲为整体参考。参加培训的学员可以根据自己的需求进行选择或关注,但不要偏离SEO主题。同时,也欢迎您带着问题前来参加培训。
  网站SEO搜索引擎优化培训(培训说明)
  时间:一天(8小时)
  地点:广州天河汽车站星巴克咖啡厅
  费用:800元
  *参加者需携带笔记本电脑。
  *学习者需要基础,了解一定的SEO理论和实践。另外,如果你能熟悉html、css,以及js/jquery和php+mysql建站方案(训练不需要改代码,但知道代码的意思就更好了) ,对于手机网站和回复网站对公式有一定了解,最好用网页编辑软件,比如dreamweaver。
  另外:SEO发展多年,不乏理论。您可以通过网络学习,也可以观看我们导师录制的一些视频(即将上线)。
  附:正确理解网站优化
  网站优化,主要指SEO部分,但不限于SEO。为什么?因为网站优化的意义更大,搜索引擎的SEO优化是其中的一部分,用户体验的网站优化也是其中的一部分。
  狭义的网站优化,即搜索引擎优化(SEO),是一种利用搜索引擎的搜索规则来提高目的网站在相关搜索引擎中排名的方式。
  广义上的网站优化,考虑的因素不仅仅是搜索引擎,还要充分满足用户的需求和特点,清晰的网站导航,完整的在线帮助。在此基础上,网站的功能和信息效果最好。
  网站优化包括SEO,两者是包容的,不是等价的。一句话概括就是:网站优化的目的是让网站更容易被搜索引擎收录搜索到,提升用户体验和转化率,进而创造价值。
  核心方法:搜索引擎优化的方法,怎么优化搜索引擎排名
  1:优化网站内容
  优化搜索引擎的方法有很多,但其中最重要的一种是优化网站内容。
  网站内容包括文字、图片、视频等,如果这个内容不引起人们的注意,那么网站就不是很有用。因此,网站要想在搜索引擎中排名靠前,就必须保证网站内容的质量。
  具体来说是为了保证文字内容的准确性和可读性,图片内容的质量和可视性,视频内容的流畅度和清晰度。只有这样,人们才会愿意在线浏览您的 网站。而如果你的网站能吸引人浏览,那它肯定是搜索引擎中的佼佼者。
  3:优化网站链接
  如果您想在搜索引擎优化方面取得成功,链接优化是您业务不可或缺的一部分。内部和外部链接对于 SEO 都很重要。
  链接优化的主要目的是吸引尽可能多的有效外部链接。这些外部链接对于增加 网站 的权限和流量至关重要。此外,有效的外部链接可以帮助 网站 在 SERP 中获得更好的排名。
  
  那么我们如何才能实现有效的链接优化呢?这里有一些简单易行的方法。
  找到有效的外部链接方法并不难,您只需做一些简单的市场调查。根据自己的行业选择合适的关键词进行市场调研。例如,您可以使用“衣服”、“裤子”、“上衣”等关键词 来选择对应的竞争对手。当然,您也可以使用 Google AdWords 工具进行竞争分析。
  内容优化并不难,你只需要保证你的内容能吸引其他网站或博客引用即可。此外,内容也应该有一定的多样性,而不是一成不变的。这样,别人是否愿意引用你作为信息或信息的来源?当然,您也可以通过内容广告鼓励他人引用您的内容。
  内容会随着时间的推移而过时。因此,如果你想保持网站上的内容比较新鲜,就需要不断的更新和补充内容。
  2:优化网站目录
  搜索引擎优化的方法有很多种,其中一个非常重要的方法是优化网站目录。
  网站目录优化可以让搜索引擎更容易理解你的网站内容,从而为你的网站带来更好的搜索排名。
  我们来看看如何优化网站目录。
  
  首先,对于网站目录,最好使用静态目录。
  静态目录让搜索引擎更容易理解你的网站内容,也可以帮助你的网站获得更好的搜索排名。
  其次,注意目录中文件名的命名。
  文件名必须准确反映文件的内容,以便搜索引擎能够识别。另外,不要在文件名中使用特殊字符,这会导致识别困难。
  最后,注意在目录中创建一个文件,告诉搜索引擎相关信息。该文件通常是 robots.txt。
  robots.txt 文件收录有关如何访问和使用您的 网站 内容的一些信息。因此,如果您希望搜索引擎首先读取和使用您的内容,则必须将其写入此文件中。
  使用上述方法优化您的网站目录将有助于您的网站在搜索引擎中排名更高。

解决方案:佛山招聘seo搜索引擎优化工程师信息

网站优化优采云 发表了文章 • 0 个评论 • 81 次浏览 • 2022-09-21 17:09 • 来自相关话题

  解决方案:佛山招聘seo搜索引擎优化工程师信息
  工作职责:
  1.监控网站关键词排名变化,监控和研究竞争对手及其他网站相关做法,并制定优化公司的战略和计划网站 ,使用seo规则优化网站源码,维护网站关键词排名;
  2.负责站外链接的创建和维护,负责官方微博和微信公众号的运营和推广,利用微信公众号和官方微博提升公司形象和知名度;
  3.利用互联网资源,通过门户网站、论坛、分类信息、搜索引擎、微博、sns、视频网站、博客等第三方渠道推广家庭网络, 和电子邮件各种平台,与第三方网站交换流量、数据、反向链接或服务,以增加网站的流量和知名度;
  4.制定推广流程,不断开发整合推广资源;配合其他部门举办各类活动,做好宣传推广工作;
  
  5.确定推广目标,制定有效的推广方式,根据各媒体特点进行专项推广,跟踪反馈市场计划的推广执行情况;
  6.参与网站广告、营销等主题活动如创意、文案等工作,撰写广告标语、宣传视频脚本等;
  建立促销效果评估模型,编写促销效果分析报告,规划和调整促销方案,通过对促销资源数据和客户反馈的分析,不断调整促销策略,最大限度地利用促销资源。
  工作要求:
  1.大专以上学历,1-2年以上互联网seo推广经验;
  2.熟悉搜索引擎优化原理,熟悉网站alexa排名,掌握以百度为首的搜索引擎的基本排名规则,精通搜索引擎优化;
  
  3.熟悉div+css,对js、mysql、php、python、apache server等一种或多种编程语言有一定了解;熟练使用各种seo工具和数据分析工具;
  4.对数据变化敏感,具有强大的数据分析和挖掘能力;研究竞争对手和其他网站seo/sem营销策略,提出合理建议和对策;
  5.具有良好的沟通能力、强烈的责任心、创新意识和学习能力;
  6.思路清晰,组织能力强,学习能力强,数据分析能力强,与程序员沟通合作的能力和团队合作意识。
  工作地址:-广东-佛山-乐从镇河滨北路248号欧普皇庭1楼(欧普家居)
  优化的解决方案:移动seo的关键词如何优化
  1:移动端seo的基本原则
  移动端SE0优化方法:
  根据目前市场上主流的手机操作系统的不同,将移动端SEO分为安卓和苹果两类。
  安卓手机搜索优化:谷歌是安卓手机默认的搜索引擎,所以安卓手机的SEO基本原则就是针对谷歌。针对谷歌的优化方法也和PC端差不多,都是要做好关键词优化、内容优化、外链优化、速度优化等。
  与PC端不同之处在于:
  (1)在安卓手机上,很多应用都内置了浏览器,如UC浏览器、QQ浏览器、360浏览器、搜狗浏览器。这些应用内置的浏览器只要能够上网就可以访问一般的网站。但是这些应用内置的浏览器并不能使用cookie来保存用户数据。而且这些浏览器对javascript也不是很友好。因此我们在开发安卓手机端的时候要注意这些问题。
  
  (2)在安卓手机上, Googlebot-Mobile是一个很重要的因素。Googlebot-Mobile只能通过wifi来抓取数据,而且数据相对来说也不是很全面。因此我们在开发安卓手机端的时候要注意这些问题。
  (3)安卓手机由于使用的是webkit内核的浏览器,因此我们可以使用webkit开发工具来开发我们安卓手机端的页面。
  (4)对于一些ajax请求,我们要使用jsonp来代替ajax请求来避免数据丢失问题。
  2:如何优化移动端seo
  移动SEO优化关键词的首要任务是确定搜索量和转化率。要做到这一点,需要了解搜索引擎的工作原理,并对关键词进行适当的分析。
  根据搜索引擎的工作原理,关键词的优化主要有两个方面:一是根据关键词的相关性来优化;二是根据关键词的流量来优化。
  
  对关键词进行相关性优化意味着通过分析关键词之间的相关性来找出与目标关键词最相似或最相关的一些词语,并将这些词语用于网站内容中。这样做能够帮助我们在搜索引擎中获得更好的排名。
  对关键词进行流量优化意味着通过分析用户在不同时间或不同地点对不同关键词的使用情况来找出能够带来流量最大化的一些可选方案。使用这些方法可以使我们的网站在不同时间、不同地点获得最佳流量。
  3:seo优化工具
  移动SEO优化关键词有很多方法可以使用,但是要想真正优化关键词,需要从多方面入手。下面我就来介绍几个比较常用的方法。
  在进行移动SEO优化时,关键词选择是非常重要的。如果你选择的关键词不够准确或者不能代表你的产品或者服务,就会导致用户无法找到你的网站。而且,如果你选择的关键词过于热门,势必会被竞争对手压制,导致用户无法找到你的网站。因此,在选择关键词时一定要仔细斟酌。
  在进行移动SEO优化时,一定要将关键词分为不同的类别。这样可以帮助你进行有效的优化。例如:将关键词分为品牌关键词、产品关键词、服务关键词、地域性关键词等。这样可以使你的优化工作更加有效率。
  使用关键词工具可以帮助你准确找到相应的关键词。而且,如果你使用的是好的工具,还可以帮助你监测竞争对手的关键词。这样一来,你就能够及时更新自己的优化方案,避开竞争对手的压制。 查看全部

  解决方案:佛山招聘seo搜索引擎优化工程师信息
  工作职责:
  1.监控网站关键词排名变化,监控和研究竞争对手及其他网站相关做法,并制定优化公司的战略和计划网站 ,使用seo规则优化网站源码,维护网站关键词排名;
  2.负责站外链接的创建和维护,负责官方微博和微信公众号的运营和推广,利用微信公众号和官方微博提升公司形象和知名度;
  3.利用互联网资源,通过门户网站、论坛、分类信息、搜索引擎、微博、sns、视频网站、博客等第三方渠道推广家庭网络, 和电子邮件各种平台,与第三方网站交换流量、数据、反向链接或服务,以增加网站的流量和知名度;
  4.制定推广流程,不断开发整合推广资源;配合其他部门举办各类活动,做好宣传推广工作;
  
  5.确定推广目标,制定有效的推广方式,根据各媒体特点进行专项推广,跟踪反馈市场计划的推广执行情况;
  6.参与网站广告、营销等主题活动如创意、文案等工作,撰写广告标语、宣传视频脚本等;
  建立促销效果评估模型,编写促销效果分析报告,规划和调整促销方案,通过对促销资源数据和客户反馈的分析,不断调整促销策略,最大限度地利用促销资源。
  工作要求:
  1.大专以上学历,1-2年以上互联网seo推广经验;
  2.熟悉搜索引擎优化原理,熟悉网站alexa排名,掌握以百度为首的搜索引擎的基本排名规则,精通搜索引擎优化;
  
  3.熟悉div+css,对js、mysql、php、python、apache server等一种或多种编程语言有一定了解;熟练使用各种seo工具和数据分析工具;
  4.对数据变化敏感,具有强大的数据分析和挖掘能力;研究竞争对手和其他网站seo/sem营销策略,提出合理建议和对策;
  5.具有良好的沟通能力、强烈的责任心、创新意识和学习能力;
  6.思路清晰,组织能力强,学习能力强,数据分析能力强,与程序员沟通合作的能力和团队合作意识。
  工作地址:-广东-佛山-乐从镇河滨北路248号欧普皇庭1楼(欧普家居)
  优化的解决方案:移动seo的关键词如何优化
  1:移动端seo的基本原则
  移动端SE0优化方法:
  根据目前市场上主流的手机操作系统的不同,将移动端SEO分为安卓和苹果两类。
  安卓手机搜索优化:谷歌是安卓手机默认的搜索引擎,所以安卓手机的SEO基本原则就是针对谷歌。针对谷歌的优化方法也和PC端差不多,都是要做好关键词优化、内容优化、外链优化、速度优化等。
  与PC端不同之处在于:
  (1)在安卓手机上,很多应用都内置了浏览器,如UC浏览器、QQ浏览器、360浏览器、搜狗浏览器。这些应用内置的浏览器只要能够上网就可以访问一般的网站。但是这些应用内置的浏览器并不能使用cookie来保存用户数据。而且这些浏览器对javascript也不是很友好。因此我们在开发安卓手机端的时候要注意这些问题。
  
  (2)在安卓手机上, Googlebot-Mobile是一个很重要的因素。Googlebot-Mobile只能通过wifi来抓取数据,而且数据相对来说也不是很全面。因此我们在开发安卓手机端的时候要注意这些问题。
  (3)安卓手机由于使用的是webkit内核的浏览器,因此我们可以使用webkit开发工具来开发我们安卓手机端的页面。
  (4)对于一些ajax请求,我们要使用jsonp来代替ajax请求来避免数据丢失问题。
  2:如何优化移动端seo
  移动SEO优化关键词的首要任务是确定搜索量和转化率。要做到这一点,需要了解搜索引擎的工作原理,并对关键词进行适当的分析。
  根据搜索引擎的工作原理,关键词的优化主要有两个方面:一是根据关键词的相关性来优化;二是根据关键词的流量来优化。
  
  对关键词进行相关性优化意味着通过分析关键词之间的相关性来找出与目标关键词最相似或最相关的一些词语,并将这些词语用于网站内容中。这样做能够帮助我们在搜索引擎中获得更好的排名。
  对关键词进行流量优化意味着通过分析用户在不同时间或不同地点对不同关键词的使用情况来找出能够带来流量最大化的一些可选方案。使用这些方法可以使我们的网站在不同时间、不同地点获得最佳流量。
  3:seo优化工具
  移动SEO优化关键词有很多方法可以使用,但是要想真正优化关键词,需要从多方面入手。下面我就来介绍几个比较常用的方法。
  在进行移动SEO优化时,关键词选择是非常重要的。如果你选择的关键词不够准确或者不能代表你的产品或者服务,就会导致用户无法找到你的网站。而且,如果你选择的关键词过于热门,势必会被竞争对手压制,导致用户无法找到你的网站。因此,在选择关键词时一定要仔细斟酌。
  在进行移动SEO优化时,一定要将关键词分为不同的类别。这样可以帮助你进行有效的优化。例如:将关键词分为品牌关键词、产品关键词、服务关键词、地域性关键词等。这样可以使你的优化工作更加有效率。
  使用关键词工具可以帮助你准确找到相应的关键词。而且,如果你使用的是好的工具,还可以帮助你监测竞争对手的关键词。这样一来,你就能够及时更新自己的优化方案,避开竞争对手的压制。

解决方案:网站内部优化怎么做?

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-09-21 16:17 • 来自相关话题

  解决方案:网站内部优化怎么做?
  把主要的关键词放在首页,并且必须出现在首页的标题和第一段文章,关键词的出现频率会影响收录@的程度&gt;,但是不要叠加关键词,否则被搜索引擎处理的后果会很严重。主页的颜色和布局非常重要。如果不是大门户网站或者特殊需要,建议首页边框颜色不要超过三种,内容不要太复杂,最重要和最常用的信息应该是显示。出来吧。首页的优化也要注意页眉和页脚的优化,尽量把导航键、友情链接等放在这两个位置,这样客户也方便使用,搜索引擎也喜欢通过这些职位搜索网站内部链接或姓名链接。首页的链接一定要做好,不能有断链或者死链,可能会影响搜索引擎对内容的判断,造成网站收录@>问题。
  内页优化
  指通过首页访问的公司介绍、产品目录、信息反馈等栏目。一般我们把通过首页访问的内容称为内页。内页也应该像首页一样注重优化,内页也要针对每个不同的页面进行优化。关键词的页码内容设置,规则与首页类似,但内容权重没有首页高。访问内页内容时,注意入口和出口。入口是指从网站入口到内页的地方。应该尽可能的显眼、方便、直接,除非特别避免打开内页然后弹出页面。会给客户浏览造成障碍,也会给搜索引擎造成判断困难。内页的退出是指通过内容链接到其他地方。一般可以在首页、侧边栏、底部等,也可以通过产品栏目、网站推荐、网站热帖等引导客户去比较热门的地方或我们希望客户浏览的地方。
  
  网站静态化问题
  最原创的 网站 是一个静态页面。比如首页是index.html这样的格式,后来又引入了asp php等建站代码。网站为了提高信息生成速度,减轻网站硬件的负担,采用了动态显示方式。这种模式的好处是可以及时显示网站的动态,文章的发布,以及用户的动态,但是不会生成html文章,这个是一种虚拟的文章显示方式,我们看到的内容不需要直接存入网络硬盘,而是通过asp php代码动态显示。这对客户浏览来说是没有问题的,而且非常快捷方便,但是对于搜索引擎来说却很陌生,比如index.asp?jas=1453的格式,搜索引擎不认为是文章文章,认为只是代码,所以会影响收录@>。当然,这种情况越来越好。例如,谷歌的 收录@> 动态文件与静态文件基本相同。为了更好的迎合搜索引擎的爱好,我们只能把文章写成静态的。静态文件会相对增加硬盘空间,如果读取量大,会增加服务器的负担。所以有得也有失。于是产生了一种伪静态技术,就是通过代码将index.php?main=1234格式的文件伪装成1234.html的格式。其实文章本身的格式并没有改变,
  搜索引擎优化
  
  其实上面讨论的内容都和搜索引擎优化有关,大家也可以互相参考。除了网站内部网站的优化,搜索引擎优化中最重要的就是外部优化,也就是外链推广。外部链接为网站带来了强大的动力,为网站增加了更多的价值。有很多方法可以增加外部链接。最原创的就是友情链接,还可以添加一些流量链接,可以登录一些导航网站,也可以在一些热门论坛发帖,写博客,开分站等。当然,主要的问题是把流量导向你自己的网站,让更多的人浏览你自己的网站。搜索引擎优化的特点是可以' 不考虑人类思维的问题,而是根据搜索机器人访问的方式。如果机器人喜欢去,你就得去更多的地方,发帖写文章,一些主要门户网站的论坛搜索引擎网站几乎每隔几分钟就爬一次。如果做得好,你的网站很快就会被搜索引擎按照联想的原则找到!
  优化网站的使用和管理,
  为什么这也被提出来了?因为我们的 网站 是为人们使用和管理而构建的。如果这些不优化,再好的网站也是没用的。我们知道,如果一个人在注册您的用户名时需要经过 4-5 个步骤,他可能只需关闭 网站 并离开。但如果注册太容易,如果没有限制,很快就会成为垃圾帖和机器帖的天堂。所以一定要优化使用,注册时合理控制,注册后尽快使用。在管理方面,功能要全面,反馈要及时,管理人员能有效控制网站的内容和用户的浏览权限。. . 这些只能为每个 网站 设置不同,
  整套解决方案:SEO优化教程 | 手机移动端该怎么优化?
  移动互联网的推出,各位站长也纷纷的挤入了移动化网站,移动网站可以说是一个比一个做的漂亮,那么既然做了移动化的网站,那少不了的自然是SEO优化,在PC端上你的网站可能在某个词上有排名,但在移动搜索引擎上,未必你会优先排名展现。
  首先来看看我们需要针对的搜索引擎吧,也就是今年的移动搜索引擎使用份额。其他的可以忽略不计,重点我们考虑在百度,因为他在移动搜索引擎中份额占比是79%。
  一、URL
  
  大部分的移动网站都是有一个二级域名或者一个二级栏目做移动网站,其实这是不科学的,试想一下,你发布一篇文章,有两个URL有一模一样的内容,那就算你是一篇原创文章,那是不是也会变成了伪原创呢?在SEO的角度考虑,原创和伪原创差距是甚大呀!所以,如果条件允许,建议还是做自动响应的移动化站点,比如我的博客,你试着用浏览器的放大功能看看,是不是根据分辨率网站也有少许的变化呢?
  二、代码
  移动网站我们可以理解成一个微网站,在微网站的基础上,我们没必要把网站做的如此复杂(特殊功能除外),所以在代码上能够简洁就简洁,再说用户看网站不是看你网站代码多复杂,网站多美观,而是看你网站能不能在最短的时间找到他想要的答案。其次是通常情况下,手机浏览器是没有PC端浏览器那么强大,也就是说不是每一个JS在移动网站上都可以解析到,万一用户用的浏览器解析不了你的一个JS呢,那岂不是看到乱糟糟的?还有一个非常严肃的问题,当用户使用2G网络,要是你把网站做的如此复杂,一时半会儿加载不出来咋办呢?
  三、避免耗费用户流量
  在移动互联网上,用户最关心的啥?流量嘛,如果你做一个网站,一打开就是视频、flash、弹窗,用户会感觉到可怕,你可能会认为用户不知情在你网站上耗费的流量,但如果有一个铁杆粉丝一直在关注你的网站,却因为你网站耗费流量过多,没到月底没流量了,你觉得这事儿是好事还是坏事。在技术层面来讲,Apple产品不支持Flash功能,很大一部分智能手机用户用不了这项功能,同样,很多智能手机也不支持Java,所以这只是两方面都是不讨好的做法。
  
  四、页面细节优化
  与PC端的网站一样,页面不可确实keywords、description,可能在PC端上,我们不加上关键词和描述搜索引擎一样可以识别到你的具体内容是什么,但是我们并无法确定到移动搜索引擎是否可以识别这一点,所以我们做到多一事不如少一事,尽量按照常规出牌。
  移动化网站也非常在乎死链接和到处链接,所以尽量做好404、403 等,如果内容死链希望重定向到首页,最好通过302跳转,不要使用javascript 跳转。其次是外部链接,都说外部链接影响排名的并不多,但出于刚刚兴趣的移动搜索引擎,我们没有办法不做到面面俱到!
  五、跳转
  一般情况下我们的PC网站上都可以看到一个手机版的按钮,或者是当手机输入域名的时候会自动跳转到手机网站,这一技术改变了手机用户的用户体验,如果还有不懂的朋友,可以去学习学习网站自动识别手机端与PC端,但跳转归跳转,偏偏还有用户就是喜欢用手机看PC网站,所以我们还的在手机网站上做一个按钮让移动网站跳回PC端,这就是用户体验的一个细节处理。 查看全部

  解决方案:网站内部优化怎么做?
  把主要的关键词放在首页,并且必须出现在首页的标题和第一段文章,关键词的出现频率会影响收录@的程度&gt;,但是不要叠加关键词,否则被搜索引擎处理的后果会很严重。主页的颜色和布局非常重要。如果不是大门户网站或者特殊需要,建议首页边框颜色不要超过三种,内容不要太复杂,最重要和最常用的信息应该是显示。出来吧。首页的优化也要注意页眉和页脚的优化,尽量把导航键、友情链接等放在这两个位置,这样客户也方便使用,搜索引擎也喜欢通过这些职位搜索网站内部链接或姓名链接。首页的链接一定要做好,不能有断链或者死链,可能会影响搜索引擎对内容的判断,造成网站收录@>问题。
  内页优化
  指通过首页访问的公司介绍、产品目录、信息反馈等栏目。一般我们把通过首页访问的内容称为内页。内页也应该像首页一样注重优化,内页也要针对每个不同的页面进行优化。关键词的页码内容设置,规则与首页类似,但内容权重没有首页高。访问内页内容时,注意入口和出口。入口是指从网站入口到内页的地方。应该尽可能的显眼、方便、直接,除非特别避免打开内页然后弹出页面。会给客户浏览造成障碍,也会给搜索引擎造成判断困难。内页的退出是指通过内容链接到其他地方。一般可以在首页、侧边栏、底部等,也可以通过产品栏目、网站推荐、网站热帖等引导客户去比较热门的地方或我们希望客户浏览的地方。
  
  网站静态化问题
  最原创的 网站 是一个静态页面。比如首页是index.html这样的格式,后来又引入了asp php等建站代码。网站为了提高信息生成速度,减轻网站硬件的负担,采用了动态显示方式。这种模式的好处是可以及时显示网站的动态,文章的发布,以及用户的动态,但是不会生成html文章,这个是一种虚拟的文章显示方式,我们看到的内容不需要直接存入网络硬盘,而是通过asp php代码动态显示。这对客户浏览来说是没有问题的,而且非常快捷方便,但是对于搜索引擎来说却很陌生,比如index.asp?jas=1453的格式,搜索引擎不认为是文章文章,认为只是代码,所以会影响收录@>。当然,这种情况越来越好。例如,谷歌的 收录@> 动态文件与静态文件基本相同。为了更好的迎合搜索引擎的爱好,我们只能把文章写成静态的。静态文件会相对增加硬盘空间,如果读取量大,会增加服务器的负担。所以有得也有失。于是产生了一种伪静态技术,就是通过代码将index.php?main=1234格式的文件伪装成1234.html的格式。其实文章本身的格式并没有改变,
  搜索引擎优化
  
  其实上面讨论的内容都和搜索引擎优化有关,大家也可以互相参考。除了网站内部网站的优化,搜索引擎优化中最重要的就是外部优化,也就是外链推广。外部链接为网站带来了强大的动力,为网站增加了更多的价值。有很多方法可以增加外部链接。最原创的就是友情链接,还可以添加一些流量链接,可以登录一些导航网站,也可以在一些热门论坛发帖,写博客,开分站等。当然,主要的问题是把流量导向你自己的网站,让更多的人浏览你自己的网站。搜索引擎优化的特点是可以' 不考虑人类思维的问题,而是根据搜索机器人访问的方式。如果机器人喜欢去,你就得去更多的地方,发帖写文章,一些主要门户网站的论坛搜索引擎网站几乎每隔几分钟就爬一次。如果做得好,你的网站很快就会被搜索引擎按照联想的原则找到!
  优化网站的使用和管理,
  为什么这也被提出来了?因为我们的 网站 是为人们使用和管理而构建的。如果这些不优化,再好的网站也是没用的。我们知道,如果一个人在注册您的用户名时需要经过 4-5 个步骤,他可能只需关闭 网站 并离开。但如果注册太容易,如果没有限制,很快就会成为垃圾帖和机器帖的天堂。所以一定要优化使用,注册时合理控制,注册后尽快使用。在管理方面,功能要全面,反馈要及时,管理人员能有效控制网站的内容和用户的浏览权限。. . 这些只能为每个 网站 设置不同,
  整套解决方案:SEO优化教程 | 手机移动端该怎么优化?
  移动互联网的推出,各位站长也纷纷的挤入了移动化网站,移动网站可以说是一个比一个做的漂亮,那么既然做了移动化的网站,那少不了的自然是SEO优化,在PC端上你的网站可能在某个词上有排名,但在移动搜索引擎上,未必你会优先排名展现。
  首先来看看我们需要针对的搜索引擎吧,也就是今年的移动搜索引擎使用份额。其他的可以忽略不计,重点我们考虑在百度,因为他在移动搜索引擎中份额占比是79%。
  一、URL
  
  大部分的移动网站都是有一个二级域名或者一个二级栏目做移动网站,其实这是不科学的,试想一下,你发布一篇文章,有两个URL有一模一样的内容,那就算你是一篇原创文章,那是不是也会变成了伪原创呢?在SEO的角度考虑,原创和伪原创差距是甚大呀!所以,如果条件允许,建议还是做自动响应的移动化站点,比如我的博客,你试着用浏览器的放大功能看看,是不是根据分辨率网站也有少许的变化呢?
  二、代码
  移动网站我们可以理解成一个微网站,在微网站的基础上,我们没必要把网站做的如此复杂(特殊功能除外),所以在代码上能够简洁就简洁,再说用户看网站不是看你网站代码多复杂,网站多美观,而是看你网站能不能在最短的时间找到他想要的答案。其次是通常情况下,手机浏览器是没有PC端浏览器那么强大,也就是说不是每一个JS在移动网站上都可以解析到,万一用户用的浏览器解析不了你的一个JS呢,那岂不是看到乱糟糟的?还有一个非常严肃的问题,当用户使用2G网络,要是你把网站做的如此复杂,一时半会儿加载不出来咋办呢?
  三、避免耗费用户流量
  在移动互联网上,用户最关心的啥?流量嘛,如果你做一个网站,一打开就是视频、flash、弹窗,用户会感觉到可怕,你可能会认为用户不知情在你网站上耗费的流量,但如果有一个铁杆粉丝一直在关注你的网站,却因为你网站耗费流量过多,没到月底没流量了,你觉得这事儿是好事还是坏事。在技术层面来讲,Apple产品不支持Flash功能,很大一部分智能手机用户用不了这项功能,同样,很多智能手机也不支持Java,所以这只是两方面都是不讨好的做法。
  
  四、页面细节优化
  与PC端的网站一样,页面不可确实keywords、description,可能在PC端上,我们不加上关键词和描述搜索引擎一样可以识别到你的具体内容是什么,但是我们并无法确定到移动搜索引擎是否可以识别这一点,所以我们做到多一事不如少一事,尽量按照常规出牌。
  移动化网站也非常在乎死链接和到处链接,所以尽量做好404、403 等,如果内容死链希望重定向到首页,最好通过302跳转,不要使用javascript 跳转。其次是外部链接,都说外部链接影响排名的并不多,但出于刚刚兴趣的移动搜索引擎,我们没有办法不做到面面俱到!
  五、跳转
  一般情况下我们的PC网站上都可以看到一个手机版的按钮,或者是当手机输入域名的时候会自动跳转到手机网站,这一技术改变了手机用户的用户体验,如果还有不懂的朋友,可以去学习学习网站自动识别手机端与PC端,但跳转归跳转,偏偏还有用户就是喜欢用手机看PC网站,所以我们还的在手机网站上做一个按钮让移动网站跳回PC端,这就是用户体验的一个细节处理。

php搜索引擎优化应该从两方面来解决,欢迎批评

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-09-08 22:23 • 来自相关话题

  php搜索引擎优化应该从两方面来解决,欢迎批评
  php搜索引擎优化主要是对网站进行站内优化,通过改进网站结构和服务器配置,从而提高网站在搜索引擎中的关键词排名,这些都需要长期的坚持做,可以说没有捷径可走。做好搜索引擎优化可以帮助提高您网站的网站访问量以及提高您网站在seo中的排名。
  关键字以及页面结构。关键字可以是长尾词,也可以是短语,关键字还可以是从站外搜过来的词。对于页面结构,这个要看你是做购物频道还是针对人群的,不同的需求会使用不同的网站结构。
  说说个人见解,写的不好请见谅!我从事网站优化工作四年,具体见识浅薄,欢迎批评指正!我觉得网站seo优化应该从两方面来解决,
  
  1、网站seo优化工作:一般来说,每个域名平台都会设置一个icp备案号,一般是在域名注册人那里设置。登录域名注册人的工作邮箱,可以从他们那里查到一个验证码。
  1、按照他们工作邮箱里的验证码输入验证码之后,就可以查询到一个账号是否成功。
  2、假如查询不到账号密码的话,那就是属于某一台电脑才能注册到你的网站,一般来说,淘宝京东都是用阿里云服务器做网站的,价格不贵。
  
  3、可以跟这台电脑的主人联系,让他帮你注册一个账号,你也可以解绑一些账号,更换一个电脑。这样注册的账号就可以直接登录你的网站。
  4、淘宝京东的邮箱要么是一些大企业的站点,所以,邮箱等级可能比较高,有可能有验证码。换手机账号,验证码可能不通过。
  5、解绑一些账号,登录后,就可以登录了。接下来就是接近网站本身的优化和排名了。
  2、网站主题和标题优化:知道自己的网站的标题,就可以根据上文讲到的按照验证码输入进去,再通过常规手段验证一遍验证码,看账号是否有问题。 查看全部

  php搜索引擎优化应该从两方面来解决,欢迎批评
  php搜索引擎优化主要是对网站进行站内优化,通过改进网站结构和服务器配置,从而提高网站在搜索引擎中的关键词排名,这些都需要长期的坚持做,可以说没有捷径可走。做好搜索引擎优化可以帮助提高您网站的网站访问量以及提高您网站在seo中的排名。
  关键字以及页面结构。关键字可以是长尾词,也可以是短语,关键字还可以是从站外搜过来的词。对于页面结构,这个要看你是做购物频道还是针对人群的,不同的需求会使用不同的网站结构。
  说说个人见解,写的不好请见谅!我从事网站优化工作四年,具体见识浅薄,欢迎批评指正!我觉得网站seo优化应该从两方面来解决,
  
  1、网站seo优化工作:一般来说,每个域名平台都会设置一个icp备案号,一般是在域名注册人那里设置。登录域名注册人的工作邮箱,可以从他们那里查到一个验证码。
  1、按照他们工作邮箱里的验证码输入验证码之后,就可以查询到一个账号是否成功。
  2、假如查询不到账号密码的话,那就是属于某一台电脑才能注册到你的网站,一般来说,淘宝京东都是用阿里云服务器做网站的,价格不贵。
  
  3、可以跟这台电脑的主人联系,让他帮你注册一个账号,你也可以解绑一些账号,更换一个电脑。这样注册的账号就可以直接登录你的网站。
  4、淘宝京东的邮箱要么是一些大企业的站点,所以,邮箱等级可能比较高,有可能有验证码。换手机账号,验证码可能不通过。
  5、解绑一些账号,登录后,就可以登录了。接下来就是接近网站本身的优化和排名了。
  2、网站主题和标题优化:知道自己的网站的标题,就可以根据上文讲到的按照验证码输入进去,再通过常规手段验证一遍验证码,看账号是否有问题。

10 亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-08-29 18:15 • 来自相关话题

  10 亿级流量的搜索前端,是怎么做架构升级的?
  - 前言 -
  前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  - 什么是前端架构? -
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  - 百度移动端背景及问题 -
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  图 2:业务需求的三个方向
  - 解决思路 -
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  
  图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  - 落地方案 -
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  
  图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  一、跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  图 11:平台过渡的三个阶段
  二、页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  - 总结 -
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。 查看全部

  10 亿级流量的搜索前端,是怎么做架构升级的?
  - 前言 -
  前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  - 什么是前端架构? -
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  - 百度移动端背景及问题 -
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  图 2:业务需求的三个方向
  - 解决思路 -
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  
  图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  - 落地方案 -
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  
  图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  一、跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  图 11:平台过渡的三个阶段
  二、页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  - 总结 -
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。

php搜索引擎优化主要有3种:1.常规

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-08-16 15:06 • 来自相关话题

  php搜索引擎优化主要有3种:1.常规
  php搜索引擎优化主要有3种:1.常规seo:专业的搜索引擎优化一般都是由专业的人员来操作的,很多是没有专业的人员来操作,前期会有一些前期的投入,会有一些页面的建设,短期内可能获得一定的效果,但是长期来看,对网站的伤害是很大的。2.关键词排名优化:经常有人会把php搜索引擎优化和seo混在一起的,或者都分在seo和php这两个词,其实真正的php搜索引擎优化应该是属于seo中的,真正的关键词排名优化的话还是要从网站内部的内容来进行改进,最终实现用户能够搜索到你,每个关键词都有对应的一些关键词的排名优化作用。
  
  3.泛站整站优化:顾名思义,就是在全站资源中,某些网站做一个整站快照、百度快照等等。好像不同的厂商,提供的快照是不一样的,有的提供:1篇,2篇等等,只要按照各自厂商的要求进行整站的优化即可。笔者最常接触到的是泛站整站优化,像:博客、论坛、自媒体等等的网站,都可以在设置的时候整站快照,把百度快照也一并设置为你的百度快照,优化的话,这个整站快照对你网站是有些许的作用的。
  
  以上只是几个最常见的小说php搜索引擎优化的相关情况,但是整站优化这个可以根据你自己公司的需求来确定,每个公司对php搜索引擎优化的要求会有不同。不管怎么样,如果你真想要做好,笔者还是建议如果你自己能够做好这块工作的话,找一个专业的人员来操作,毕竟作为搜索引擎的厂商而言,是不希望自己的公司被其他网站超越的。
  另外,不要自己做seo,请专业的团队操作一些,如果你自己做的话,这些一般都需要花钱的,如果只是一些seo基础的话,可以做一些wordpress优化,在小程序、安卓应用等等进行优化,如果你有足够的经验来做这些,其实基本对于你而言,反而可以省去一大笔钱。 查看全部

  php搜索引擎优化主要有3种:1.常规
  php搜索引擎优化主要有3种:1.常规seo:专业的搜索引擎优化一般都是由专业的人员来操作的,很多是没有专业的人员来操作,前期会有一些前期的投入,会有一些页面的建设,短期内可能获得一定的效果,但是长期来看,对网站的伤害是很大的。2.关键词排名优化:经常有人会把php搜索引擎优化和seo混在一起的,或者都分在seo和php这两个词,其实真正的php搜索引擎优化应该是属于seo中的,真正的关键词排名优化的话还是要从网站内部的内容来进行改进,最终实现用户能够搜索到你,每个关键词都有对应的一些关键词的排名优化作用。
  
  3.泛站整站优化:顾名思义,就是在全站资源中,某些网站做一个整站快照、百度快照等等。好像不同的厂商,提供的快照是不一样的,有的提供:1篇,2篇等等,只要按照各自厂商的要求进行整站的优化即可。笔者最常接触到的是泛站整站优化,像:博客、论坛、自媒体等等的网站,都可以在设置的时候整站快照,把百度快照也一并设置为你的百度快照,优化的话,这个整站快照对你网站是有些许的作用的。
  
  以上只是几个最常见的小说php搜索引擎优化的相关情况,但是整站优化这个可以根据你自己公司的需求来确定,每个公司对php搜索引擎优化的要求会有不同。不管怎么样,如果你真想要做好,笔者还是建议如果你自己能够做好这块工作的话,找一个专业的人员来操作,毕竟作为搜索引擎的厂商而言,是不希望自己的公司被其他网站超越的。
  另外,不要自己做seo,请专业的团队操作一些,如果你自己做的话,这些一般都需要花钱的,如果只是一些seo基础的话,可以做一些wordpress优化,在小程序、安卓应用等等进行优化,如果你有足够的经验来做这些,其实基本对于你而言,反而可以省去一大笔钱。

php搜索引擎优化哪家强?官方的有阿里云、谷歌

网站优化优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-08-06 07:05 • 来自相关话题

  php搜索引擎优化哪家强?官方的有阿里云、谷歌
  php搜索引擎优化哪家强?官方的有阿里云、腾讯云、谷歌。一般企业很难搞定他们,因为他们都是搞大系统的,一般他们在某地区只有一个数据中心。这次小峰给大家介绍一个做php搜索引擎优化的公司,非常好用,在他们的官网找了专人全程负责。主要是独家解析,只有小峰这里才能买得到,这就算是王牌了!据说他们一个月是做20000+php的搜索引擎优化,不是小峰吹,这些流量和效果都是其他竞争对手抢不走的,所以才能保证每月销售额20000+。
  
  目前小峰市场的使用率是90%以上。这个公司叫做贝索斯汇讯优化公司,大家要注意它是隶属于杭州昆仑信息科技股份有限公司。请看下图,打开官网可以根据地区查看业务。总的来说这家公司专门研究phpseo优化,php竞价,seosem,做的非常专业。希望能给大家带来一定的帮助。内容运营:说通俗点,就是通过文章把你的企业品牌、产品关键词发布在百度、谷歌等搜索引擎上。
  只要能够被搜索引擎收录,你的网站一定会排名靠前,优质文章还会获得搜索优化的流量扶持,获得谷歌、百度官方信任,获得排名,就会获得很多收入。销售:销售分为两部分,一部分是在线网站销售,一部分是线下实体店销售。这个很重要,线上线下联合才能获得最大的利益,在线上做的好,必须线下门店要做的非常好,线下如果做的不好,在线上做的再好,也是白搭。
  
  客服:一定要拥有专业销售人员,和客服沟通以及售后服务,可以快速为公司带来经济效益。我们了解到,使用贝索斯汇讯优化平台做phpseo优化,在线上门店只需要每月补助1.5万元的租金即可。可以说使用phpseo优化,是一次性投入,但是回报率是长远的投资。网站建设:网站也要进行优化,内部优化就是页面优化,简单点就是对网站打造布局和内容进行优化。
  外部优化就是竞价,竞价引流。这样网站才能获得流量,收入才能起来。因为phpseo优化是必须通过长期的努力才能见到效果的,而且见效慢,只有坚持使用才能看到效果。没有多大的持续性,但是前景好,现在百度相继推出app搜索排名优化之后,选择一个好的seo排名是必须的,否则难以获得流量,也难以达到营收。以上这些就是贝索斯汇讯优化这个平台为大家详细解析phpseo优化,希望给phpseo优化工作带来一定的帮助。
  还有一点,要注意要看他们的分工,而不是一个人操刀。然后这家公司前面也介绍过,公司做企业站建设。这个公司都在上海。独特的专业优势是很多企业都需要做关键词排名优化的,所以必须要了解这个公司做什么。 查看全部

  php搜索引擎优化哪家强?官方的有阿里云、谷歌
  php搜索引擎优化哪家强?官方的有阿里云、腾讯云、谷歌。一般企业很难搞定他们,因为他们都是搞大系统的,一般他们在某地区只有一个数据中心。这次小峰给大家介绍一个做php搜索引擎优化的公司,非常好用,在他们的官网找了专人全程负责。主要是独家解析,只有小峰这里才能买得到,这就算是王牌了!据说他们一个月是做20000+php的搜索引擎优化,不是小峰吹,这些流量和效果都是其他竞争对手抢不走的,所以才能保证每月销售额20000+。
  
  目前小峰市场的使用率是90%以上。这个公司叫做贝索斯汇讯优化公司,大家要注意它是隶属于杭州昆仑信息科技股份有限公司。请看下图,打开官网可以根据地区查看业务。总的来说这家公司专门研究phpseo优化,php竞价,seosem,做的非常专业。希望能给大家带来一定的帮助。内容运营:说通俗点,就是通过文章把你的企业品牌、产品关键词发布在百度、谷歌等搜索引擎上。
  只要能够被搜索引擎收录,你的网站一定会排名靠前,优质文章还会获得搜索优化的流量扶持,获得谷歌、百度官方信任,获得排名,就会获得很多收入。销售:销售分为两部分,一部分是在线网站销售,一部分是线下实体店销售。这个很重要,线上线下联合才能获得最大的利益,在线上做的好,必须线下门店要做的非常好,线下如果做的不好,在线上做的再好,也是白搭。
  
  客服:一定要拥有专业销售人员,和客服沟通以及售后服务,可以快速为公司带来经济效益。我们了解到,使用贝索斯汇讯优化平台做phpseo优化,在线上门店只需要每月补助1.5万元的租金即可。可以说使用phpseo优化,是一次性投入,但是回报率是长远的投资。网站建设:网站也要进行优化,内部优化就是页面优化,简单点就是对网站打造布局和内容进行优化。
  外部优化就是竞价,竞价引流。这样网站才能获得流量,收入才能起来。因为phpseo优化是必须通过长期的努力才能见到效果的,而且见效慢,只有坚持使用才能看到效果。没有多大的持续性,但是前景好,现在百度相继推出app搜索排名优化之后,选择一个好的seo排名是必须的,否则难以获得流量,也难以达到营收。以上这些就是贝索斯汇讯优化这个平台为大家详细解析phpseo优化,希望给phpseo优化工作带来一定的帮助。
  还有一点,要注意要看他们的分工,而不是一个人操刀。然后这家公司前面也介绍过,公司做企业站建设。这个公司都在上海。独特的专业优势是很多企业都需要做关键词排名优化的,所以必须要了解这个公司做什么。

亿级流量搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 89 次浏览 • 2022-07-18 05:01 • 来自相关话题

  亿级流量搜索前端,是怎么做架构升级的?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  <p>特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:</p>
  <p style="text-align: center;">长按订阅更多精彩▼
  如有收获,点个在看,诚挚感谢</p> 查看全部

  亿级流量搜索前端,是怎么做架构升级的?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  <p>特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:</p>
  <p style="text-align: center;">长按订阅更多精彩▼
  如有收获,点个在看,诚挚感谢</p>

金沙数据-《大话搜索引擎》第一季之初遇搜索(二)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2022-07-07 06:32 • 来自相关话题

  金沙数据-《大话搜索引擎》第一季之初遇搜索(二)
  本季内容概览:大概会花费4篇左右的文章为大家讲解一个普适率80%左右的垂直搜索引擎,内容涵盖需求分析、架构设计、模块切分、各种填坑、效果评测 直至上线运行。
  本篇知识点概览:工程切分、倒排、分词
  一、放水篇(如果时间少请直接跳过阅读 干货篇 ; 特别声明:如果有时间建议放水篇也阅读一下,无水万物枯萎凋零 搜索亦然)
  上篇话说架构模块切分完毕,按照国际惯例我以为一切准备就绪只等光膀子开始码砖了,然而如大家所想我以为我以为的就是我以为的!就像帝都雾霾来袭站在国贸看到的天空中飘着一个小三角板似的怪物,走近一看才知道是这么大一个大裤衩!!
  进入A公司的前一个周基本上都是在熟悉一些东西(对我来说应该是调研,因为对搜索啥都不知道),记得杨总当时安排了3人日让我把solr tutorial看一遍并且将里面的demo也做一遍。对于我大学四年英文考试是否需要补考全看阅卷老师心情的水平来说当时面对满篇的e文网页也是压力山大, 现在想象也是醉了,本身不多的内容我竟然吭哧了三天才算理清楚solr到底是个啥玩意!但是一路走过来才发现自己是幸运的,solr tutorial寥寥数页文章无疑是对搜索小白最好的入门教材,它使你能快速上手感知搜索是个什么东东而又不至于一开始就陷入各种烧脑无聊的理论知识甚至算法无法自拔。
  这几年遇见过刚入搜索的许多朋友直接一上来就要来高大上的比如自己写分词、自己定制排序、几十条数据用solrcloud,其中理由大都很有趣 比如领导要求、公司要求、xxx公司就是这么搞的、还有的更搞笑的是好不容易有一次自己做主的机会自己想挑战一把极限!其实按照他们实际需求来说大部分并无必要 。最后的结果大部分可能是搜索做的焦头烂额,被挑战的头晕眼花在搜索的职业发展道路上中途退场了,凡此种种不免深感惋惜。
  solr tutorial熟悉完毕后我迎来了第一个3人日的小任务LogCleaner, 对 你没看错是LogCleaner(日志清理工),也许你会纳闷这是什么鬼和搜索有毛关系? 咱们看看这个LogCleaner工程要实现的功能:A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。是的这个工程本身和搜索没什么关系,我当时也很纳闷 这难道是进少林寺学武术先要做一年扫地僧考验一下不成。当天回家想了一下四个人的团队除了杨总外地主和老曹都是五年以上的搬砖老司机,这些打扫卫生的活当然非我莫属了,于是也便释然了。接下来如你所猜,又来了LogStorer(日志存储工)、LogDumper(日志转储工) ,就这样我在日志中死扛度过了两个月(后来才知道这些项目也都是整个搜索中的一块块积木,是不是有点像武侠了`(*∩_∩*)′)。当然在这两个月期间课余时间也没敢懈怠,几乎是在公交车上看完了《搜索引擎lucene+Heritix》,然后又拉着老曹跑人大打印店把《lucene in action》的英文第一版打印了厚厚一摞继续啃(当时lucene in action只有第一版英文版,并且一直缺货,老曹说人民大学的打印店打印很便宜就索性下个电子版的去打印了)这两本书跟随我在北京搬家搬了无数次,直到最近才把它们拿去送给后来者了。
  由于项目紧张晚上加班经常一块吃饭,私下里我也好奇地主和老曹都在做什么高大上的东西,这一看也是惊呆了。 老曹一直在倒腾词(那时候对词库没概念),将老的银杏搜索的热搜词一堆一堆的弄过来然后从网上找一些餐饮相关的词合并进来,还有天天分析餐厅标题,将那些和餐饮八竿子都打不找的词肉眼一个个找出来去掉,天天满屏词乱飞也是头要炸了。开了几次会议后终于确定我们选择自己做分词采用正向匹配最小的算法(餐饮行业的词大部分是菜谱和餐厅名,大部分都在2-5个汉字左右 2-3个的占到80%以上,并且根据老曹整理的实际餐厅数据场景和杨总跟大家的分析正向匹配最小算法效率相对较高并且歧义很小即使有歧义也可以自己修改词库控制)。这样也就带来了一个问题如果ABC是个词 AB也是个词,则ABC永远不会被切分出来,那么词库中到底是留AB呢还是留ABC呢?只有把这类的词找出来看具体场景才能人工判断决定留谁。于是老曹开始写一个脚本处理大约20w的词库将这种包含关系的词找出来,比较清晰的记得当时老曹特意让我们等一下他让脚本跑起来再一块去吃晚饭,吃完晚饭回来跑了一个多小时的脚本还是没有跑完,一直到晚上九点半大家准备撤了回家的时候老曹突发警告说“脚本还没跑完大家都别懂我电脑啊!”,第二天一大早大家好奇的聚集在一起准备看看脚本跑出的结果,这一看心里拔凉拔凉的, word 哥 竟然还在跑!!!疯掉了! 后来大家一块查原因才知道由于是临时脚本没怎么估计性能问题,结果脚本里有几个for循环,计算量超万万亿了!!!
  与此同时地主正在设计一个mysql大表并和业务人员去理各种字段关系以及triger设计,由于涉及的数据源和表都超多所以工作也是不轻松,这工作也持续了近两个月中间也开了无数次的评审会。杨总一直在辅导我们每个人应该如何做各自模块和工程并时刻做着救火队员的工作。
  是的,如大家所见我们前两个月并没有大家期望的高大上的搜索技术,相反大都是些世俗的脏活累活,甚至以后也很少会有多么高大上的技术工程。现在回过头来看,一个好的搜索的确离不开甚至80%以上的活都是很平常的脏活累活。每个细节、模块、工程的精细雕琢才有可能做出一些还不错的成绩。搜索就像生活,相对于诗和远方更多的还是些柴米油盐酱醋茶,时不时的换个尿不湿也是常事o(* ̄▽ ̄*)o。
  二、干货篇(友情提醒:如果您是一名搜索初学者这部分请仔细阅读,以免出现整个系列文章读完后搜索技术点忘得一干二净,而每篇里面扯的蛋都历历在目、栩栩如生的情况!)
  工程拆分细节
  架构中模块拆分和工程拆分大部分时候会不一样,一般来说模块拆分更抽象将意思表达出来即可,更侧重宏观上的控制;工程拆分则要侧重团队之间的沟通协作方便和代码依赖交叉最小化,以及大块的代码如何解耦和复用上 相对来说会细一些。上篇里提到过的架构图中的模块大家可能还有印象,下面这幅图里是整个工程图,给大家一个直观的感受后接下来会对每个工程做详细描述。
  如上图所示,我把大概15个工程按优先级的维度分成了三大部分,因为业务需求的不同大部分第一次做垂直搜索的人员可能只需要用到其中的一部分或两部分,这样整理应该会更通俗易懂一些。
  core(核心): 这部分是必须有的,也就是作为一个搜索引擎必须具备的工程组件,就像作为一辆汽车起码要有四个轮子,作为一个人起码要有四肢和大脑一样。
  
  extend(扩展) :这部分可有可无,按照我接触的一些初次需要搜索功能的平台来说真实需求几乎90%的情况不需要,然而你懂的,实际上大部分情况下需求会被放大。现在回过头来看这些就像我们的生活,有车有房的并不比月光族的生活质量和幸福感会高一样,同样对于搜索刚刚起步的阶段做了这一部分扩展如果驾驭不了往往会使得整个搜索更差,甚至整个项目远远超期或者中途夭折。
  assistant(辅助):这部分比较难以形容也相对杂乱些,几个词形容一下大家自己悟吧:锦上添花、打酱油、工匠精神、吃瓜群众、未雨绸缪、杞人忧天。(整个《大话搜索引擎》系列会有好多工程会属于这部分,也许只能系列文章全写完后才能确切讲清楚这部分是干啥的)
  core(核心):
  1.DataCollector(数据采集工程) 将变更餐厅相关信息近实时的采集到搜索库中。 输入:分属于两个类型的数据库(mysql,oracle)的20多张餐厅相关信息表。输出:整理好的单表数据到SeachDB。此工程在部署的时候是一个单独的后台守护进程运行。
  2.IndexBuilder(索引创建工程) 负责将采集好的变更的餐厅数据近实时的发给solr让其创建索引。输入:SearchDB中的数据源; 输出:整理好的xml文档发给solr。 此工程在部署的时候是一个单独的后台守护进程运行。
  3.SearchService(搜索服务工程) 接受web发来的搜索请求执行搜索操作,并做一些业务转换。 输入:搜索请求参数、业务配置文件、solr返回的源数据; 输出:整理好的规范化的xml数据。 此工程在部署的时候是一运行在web容器中的标准http服务。
  4.triger(数据触发器) 数据源DB上的触发器,负责将变更的数据触发到对应的表中。输入:20多张餐厅信息表的变更事件;输出:变更信息表中的数据(只标识增删改和餐厅业务主键)。此“工程”是DB上的机制,只是开发些triger脚本即可。
  extend(扩展):
  1.WordSegmentation(分词工程) 将索引和查询的字符串分词,包含正向匹配最小的分词器(主分词器)、特殊符号分词器、儿话音分词器、全半角转化分词器。输入:字符串 ; 输出:一个个词。比如输入:“西直门肯德基餐厅” 输出:“西直门” ”肯德基“ “餐厅”。此工程在部署的时候是以jar包的形式内嵌到solr中的。(分词这块具体在搜索中是啥意思文章后半部分会细讲)
  2.SearchProxy(搜索代理工程) 接受SearchService的业务api参数进行审核解析为solr的复杂语法,并查询solr数据返回原生xml信息。 输入:SearchService查询请求参数 输出:solr返回的原生xml数据;此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  3.UpdateFacetCfg(切面数据配置更新工程) 负责将数据库变更的需要做切面统计的数据从数据库下载好组织好生成xml文件供SearchService使用,例如:区域、菜系、价格区间、地铁沿线 等等。 输入:数据库原始信息或者运营人员提的数据变更; 输出:树状facet.xm结构文件。此工程在部署的时候是一个单独的后台守护进程运行,定期向SearchService中输送最新的切面数据文件facet.xml,SearchService则有自动检测文件变更的线程将最新文件加载到内存中使用。两个工程通过文件的形式解耦。
  4.SearchLogic(搜索逻辑功能) 扩展solr功能提供一些灵活的查询模型。例如And, OR, Mix(分词查询语句之间先And查询,无结果自动切换到OR查询)。输入:模型参数;输出:改写的查询语法解析。 这块要改写不少solr的代码,至于当时为什么要做这块原因大概这么几点。A:SearchService提供给多个业务系统用,查询精确度要求不一样 B:solr当时的版本(1.4)在语法解析上会有一些错误在配置同义词的情况下 And和OR关系解析不正确导致同义词配置形同虚设(餐饮行业好多同义词 比如 菜花花菜 土豆山药蛋 等等)。C:对于先And后Or的查询在solr层hack会减少一次网络传输,性能会更好些。此工程在部署的时候是以jar包的形式内嵌到solr中的。
  5.SearchSimilarity(搜索相关度工程) 修改solr的相关度函数代码使其更适合垂直行业搜索。其实改动的很少,但是效果很不错。这块暂时不细讲,因为涉及的内容太多,后续的文章中会花费大的篇幅去讲解。感兴趣的同学可以提前看看了解一下下图的lucene评分公式,在没讲解这个公式前很难把修改的东西起了什么作用讲明白。
  score(q,d)=(overlap/maxOverlap)·(1/(q.getBoost()^2·∑(idf(t)·t.getBoost())^2))·∑(tf(tin d)·idf(t)^2·t.getBoost()·doc.getBoost()·lengthNorm·∏f.getBoost())
  6.Monitor(搜索监控工程)监控系统主要负责两个工作,一个是发现任何solr服务不可用则自动发邮件通知搜索团队每个人,另一个则是将solr服务下线通知LB让SearchService端立即停止请求不可用的solr,并同时周期性检测服务是否已经恢复,恢复的话则会自动通知LB上线并发邮件通知搜索团队每个人。此工程在部署的时候是一个单独的后台守护进程运行。
  assistant(辅助):
  1. LoadBalance(负责均衡工程) load balance这个模块是用来做负载均衡,比如三个solr slave可能有一台机器配置好,则在流量分配上可以多分一些。另外比如solr服务挂掉了 LB则不会上SearchService上的请求打过来。此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  2. ResParticiple(餐饮行业分词测试工程) 这个工程本来可以不提的,本身上线的时候也不会用到,但是它的确又扮演了非常重要的角色。这个工程在分词器进行修改后会拿餐厅标题、热搜字符串等经常被检索的字段分类随机跑出来一定数量(上万)的分词效果供大家检测分词是否合理词库是否完善。这几乎也是初次建立自己词库和分词器的必经之路,尽管繁琐甚至大部分是人肉工作,但是相当有必要!! 此工程不需要部署,通俗点讲是良心活、工匠活。3.LogCleaner(日志清理工程)主要负责 A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。 上线部署的时候是多部署,多个运行在后台的守护进程,主要工作是给各个搜索工程吐出的搜日志做清理或保留工作。(其实现在来看这块的功能更常规的做法应该是log4j+shell脚本去处理) 4.LogStorer(日志存储工程) 将SearchService的文件日志读取存储到关系数据库中,以备后续统计分析使用。主要是针对搜索参数的比如:搜索词、ip、用户id、选择的筛选条件、排序条件等等。这块其实是搜索用户数据采集的雏形,后面的经历中会对这块做更深入讲解,其实大部分搜索的后期优化来源于和搜索相关甚至不相关的数据仓库数据。此工程在部署的时候是一个单独的后台守护进程运行。 5.LogDumper(日志转储工程) 将一个月前的搜索日志信息转储到搜索日志历史表中,这块就不多解释了把,你懂的。此工程在部署的时候是一个单独的后台守护进程行。
  
  搜索引擎基本术语
  文档(doc):搜索引擎中的一条数据记录,比如一个餐厅、一个商品。
  文档id(docId):搜索引擎内部唯一标识一篇文档的标记,就像我们的身份证编号一样。
  词:查询、索引 存储的最小原子单位。比如汉字的最细粒度一个字也可以说是一个词。
  分词器:将文本或字符串分解成一个一个词的工具。
  倒排索引表:以词为索引记录每个词都在哪些文档中出现过。
  正排索引表:以文档id为索引,记录相应的文档存储的位置。
  正排倒排讲解
  搜索引擎中常听的的两个术语是正排索引和倒排索引(高大上的称呼可以是 forward index和 inverted index),到底是什么意思呢?大家对索引这个词应该并不陌生,比如说目录索引,邮编索引等等。通俗的讲我们经常阅读书籍的目录索引就是一种正排索引,比如你有天想唱《儿歌三百首》中的“葫芦娃”这首歌,通过目录很快找到了“葫芦娃”的页码(docId:文档id)在36页,于是很快找到了整个歌曲。再比如有天你的领导发你的紧急邮件中有一字“擦”,你认识但是不知道什么意思,于是拿起了祖传的《新华字典》查到了这个"擦"字在第585页,此处的585即可理解场倒排索引id,字典的组织结构是比较像搜索引擎的倒排索引结构的。
  ok? 如果这个不太好理解,拿我们就那更正规的讲法讲解一遍。
  假如有一天你的女神脑洞大开让你将包含“妈妈”这个词的儿歌全部唱一遍,那我们看如果根据正排索引来找出所有歌曲的话则只能一个一个歌曲看,如果那天《儿歌三百首》增长到《儿歌三亿首》是不是这种场景要崩溃香菇的感觉?那如果我们用倒排索引来查呢? “妈妈”这个词对应的倒排列表(文档Id列表)为 1、6、9 而根据这三个文档id再到正排表中快速查到 “妈妈带我沙滩跑”、“傻妈妈”、“喂妈妈” so fast !so easy!咱们再加点难度,又假设你女神突然想起一首歌叫 ”xxx小雪人“而xxx以及记不清具体是啥了,现在我们使用正排索引无疑还是蓝廋香菇!那看看伟大的倒排表如何呢:“小雪人”分词为 “小” “雪人”,对应的倒排docid列表分别是 “小”:2、5、7 ; “雪人“:2,两个docid列表取交集得到docid列表为2,则根据正排表快速找到”门口有个小雪人“ 于是你的女神向你投来了崇拜的目光,如此估计你下个双十一不用一个人过了。
  分词讲解
  聊搜索引擎,分词就不可能避开,也许有人说外文比如英文搜索引擎应该不用分词吧,是的你猜错了!分词的好坏直接影响到召回率(查询出来的真正相关的文档数/总相关的文档数)和查准率(查询出来的真正相关的文档数/查询出来的文档总数)。词是在搜索引擎中的最小原子单位,在lucene的体系又称之为term或token。既然是最小的原子单位就意味着不可再分,不管是查询还是索引都是以这个最小单位为基础。 那么什么叫分词的,就是将一个长字符串通过一定的规则或者词库分解成多个小字符串的过程而这里被分解后的小字符串即是搜索引擎中的最小单位的一个实体--词。所以搜索引擎中的”词“和我们生活中说的”词“并不是同一个概念!! ”张三买了一张三角桌子“ 可以分词为 ”张三、买了、一张、三角、桌子“ , 也可以分词为”张三、买了、一、张三、桌子“ ,如果乐意也可以分词为”张三买了、一张三角、桌子“ , 上面提到的“张三” “张三买了”都是一种词,至于是不是词全是分词器说了算,就像每年评优秀员工一样,领导说你是你就是不是也是!
  好,接下来我们做个智力题,说:”兔妈妈出门前让小白兔把一个胡萝卜切成了10小段放进锅里煮,结果兔妈妈回来了要它从锅里捞出来一条完好无损的整根萝卜,请问小白兔能做到吗?“,是的你回答正确显然不能, 那么难度加大说:”兔妈妈出门前让小白兔把一个胡萝卜切成了无数萝卜丝放进锅里煮,结果兔妈妈回来了要它从锅里捞出来10小段萝卜,请问小白兔能做到吗?“,是的你又答对了肯定不可能做到。然而初入搜索者经常会犯懵,时不时的去让自己扮演兔妈妈,让搜索引擎扮演小白兔,让搜索引擎蓝瘦的香菇!不信你看下面这个例子:我文档里面有"中国东北大学“,为什么搜索“中国大学”搜不出来, 反而搜索“北大”把 中国东北大学搜索出来了!
  如何选择分词器?分词的问题也是搜索技术社区里面经常甚至每天都会问到的一类问题。典型问题如:“我用什么分词器好 ik、庖丁、mmseg、ansj还是hanlp?” 这个就好比问ruby、java、python、php那个更牛X?再打个比方这些开源的分词器就像做好的鞋子(大部分有其固定特点),你直接问柜员要最漂亮的鞋子,结果给你推荐一个红色女士高跟鞋结果哪知道你是个大老爷们并且有着48的大脚!分词的选择脱离开业务场景和自己的数据场景无异于缘木求鱼,关于如何选择分词我以后会根据自己趟过的坑让大家一步步去理解加深,实际中没有最好的只有合适不合适的!
  今天就先罗嗦到这里吧,感谢各位看官看到了文章末尾,若是无意挑战中挑战了各位亲的忍耐力还请海涵。其实本身不打算把文章搞这么长并让大家等这么久的,但是权衡再三还是感觉放在一篇中知识点相对比较完整独立,前后篇耦合度也低一些,作为一个码农的洁癖,你是知道的O(∩_∩)O。 查看全部

  金沙数据-《大话搜索引擎》第一季之初遇搜索(二)
  本季内容概览:大概会花费4篇左右的文章为大家讲解一个普适率80%左右的垂直搜索引擎,内容涵盖需求分析、架构设计、模块切分、各种填坑、效果评测 直至上线运行。
  本篇知识点概览:工程切分、倒排、分词
  一、放水篇(如果时间少请直接跳过阅读 干货篇 ; 特别声明:如果有时间建议放水篇也阅读一下,无水万物枯萎凋零 搜索亦然)
  上篇话说架构模块切分完毕,按照国际惯例我以为一切准备就绪只等光膀子开始码砖了,然而如大家所想我以为我以为的就是我以为的!就像帝都雾霾来袭站在国贸看到的天空中飘着一个小三角板似的怪物,走近一看才知道是这么大一个大裤衩!!
  进入A公司的前一个周基本上都是在熟悉一些东西(对我来说应该是调研,因为对搜索啥都不知道),记得杨总当时安排了3人日让我把solr tutorial看一遍并且将里面的demo也做一遍。对于我大学四年英文考试是否需要补考全看阅卷老师心情的水平来说当时面对满篇的e文网页也是压力山大, 现在想象也是醉了,本身不多的内容我竟然吭哧了三天才算理清楚solr到底是个啥玩意!但是一路走过来才发现自己是幸运的,solr tutorial寥寥数页文章无疑是对搜索小白最好的入门教材,它使你能快速上手感知搜索是个什么东东而又不至于一开始就陷入各种烧脑无聊的理论知识甚至算法无法自拔。
  这几年遇见过刚入搜索的许多朋友直接一上来就要来高大上的比如自己写分词、自己定制排序、几十条数据用solrcloud,其中理由大都很有趣 比如领导要求、公司要求、xxx公司就是这么搞的、还有的更搞笑的是好不容易有一次自己做主的机会自己想挑战一把极限!其实按照他们实际需求来说大部分并无必要 。最后的结果大部分可能是搜索做的焦头烂额,被挑战的头晕眼花在搜索的职业发展道路上中途退场了,凡此种种不免深感惋惜。
  solr tutorial熟悉完毕后我迎来了第一个3人日的小任务LogCleaner, 对 你没看错是LogCleaner(日志清理工),也许你会纳闷这是什么鬼和搜索有毛关系? 咱们看看这个LogCleaner工程要实现的功能:A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。是的这个工程本身和搜索没什么关系,我当时也很纳闷 这难道是进少林寺学武术先要做一年扫地僧考验一下不成。当天回家想了一下四个人的团队除了杨总外地主和老曹都是五年以上的搬砖老司机,这些打扫卫生的活当然非我莫属了,于是也便释然了。接下来如你所猜,又来了LogStorer(日志存储工)、LogDumper(日志转储工) ,就这样我在日志中死扛度过了两个月(后来才知道这些项目也都是整个搜索中的一块块积木,是不是有点像武侠了`(*∩_∩*)′)。当然在这两个月期间课余时间也没敢懈怠,几乎是在公交车上看完了《搜索引擎lucene+Heritix》,然后又拉着老曹跑人大打印店把《lucene in action》的英文第一版打印了厚厚一摞继续啃(当时lucene in action只有第一版英文版,并且一直缺货,老曹说人民大学的打印店打印很便宜就索性下个电子版的去打印了)这两本书跟随我在北京搬家搬了无数次,直到最近才把它们拿去送给后来者了。
  由于项目紧张晚上加班经常一块吃饭,私下里我也好奇地主和老曹都在做什么高大上的东西,这一看也是惊呆了。 老曹一直在倒腾词(那时候对词库没概念),将老的银杏搜索的热搜词一堆一堆的弄过来然后从网上找一些餐饮相关的词合并进来,还有天天分析餐厅标题,将那些和餐饮八竿子都打不找的词肉眼一个个找出来去掉,天天满屏词乱飞也是头要炸了。开了几次会议后终于确定我们选择自己做分词采用正向匹配最小的算法(餐饮行业的词大部分是菜谱和餐厅名,大部分都在2-5个汉字左右 2-3个的占到80%以上,并且根据老曹整理的实际餐厅数据场景和杨总跟大家的分析正向匹配最小算法效率相对较高并且歧义很小即使有歧义也可以自己修改词库控制)。这样也就带来了一个问题如果ABC是个词 AB也是个词,则ABC永远不会被切分出来,那么词库中到底是留AB呢还是留ABC呢?只有把这类的词找出来看具体场景才能人工判断决定留谁。于是老曹开始写一个脚本处理大约20w的词库将这种包含关系的词找出来,比较清晰的记得当时老曹特意让我们等一下他让脚本跑起来再一块去吃晚饭,吃完晚饭回来跑了一个多小时的脚本还是没有跑完,一直到晚上九点半大家准备撤了回家的时候老曹突发警告说“脚本还没跑完大家都别懂我电脑啊!”,第二天一大早大家好奇的聚集在一起准备看看脚本跑出的结果,这一看心里拔凉拔凉的, word 哥 竟然还在跑!!!疯掉了! 后来大家一块查原因才知道由于是临时脚本没怎么估计性能问题,结果脚本里有几个for循环,计算量超万万亿了!!!
  与此同时地主正在设计一个mysql大表并和业务人员去理各种字段关系以及triger设计,由于涉及的数据源和表都超多所以工作也是不轻松,这工作也持续了近两个月中间也开了无数次的评审会。杨总一直在辅导我们每个人应该如何做各自模块和工程并时刻做着救火队员的工作。
  是的,如大家所见我们前两个月并没有大家期望的高大上的搜索技术,相反大都是些世俗的脏活累活,甚至以后也很少会有多么高大上的技术工程。现在回过头来看,一个好的搜索的确离不开甚至80%以上的活都是很平常的脏活累活。每个细节、模块、工程的精细雕琢才有可能做出一些还不错的成绩。搜索就像生活,相对于诗和远方更多的还是些柴米油盐酱醋茶,时不时的换个尿不湿也是常事o(* ̄▽ ̄*)o。
  二、干货篇(友情提醒:如果您是一名搜索初学者这部分请仔细阅读,以免出现整个系列文章读完后搜索技术点忘得一干二净,而每篇里面扯的蛋都历历在目、栩栩如生的情况!)
  工程拆分细节
  架构中模块拆分和工程拆分大部分时候会不一样,一般来说模块拆分更抽象将意思表达出来即可,更侧重宏观上的控制;工程拆分则要侧重团队之间的沟通协作方便和代码依赖交叉最小化,以及大块的代码如何解耦和复用上 相对来说会细一些。上篇里提到过的架构图中的模块大家可能还有印象,下面这幅图里是整个工程图,给大家一个直观的感受后接下来会对每个工程做详细描述。
  如上图所示,我把大概15个工程按优先级的维度分成了三大部分,因为业务需求的不同大部分第一次做垂直搜索的人员可能只需要用到其中的一部分或两部分,这样整理应该会更通俗易懂一些。
  core(核心): 这部分是必须有的,也就是作为一个搜索引擎必须具备的工程组件,就像作为一辆汽车起码要有四个轮子,作为一个人起码要有四肢和大脑一样。
  
  extend(扩展) :这部分可有可无,按照我接触的一些初次需要搜索功能的平台来说真实需求几乎90%的情况不需要,然而你懂的,实际上大部分情况下需求会被放大。现在回过头来看这些就像我们的生活,有车有房的并不比月光族的生活质量和幸福感会高一样,同样对于搜索刚刚起步的阶段做了这一部分扩展如果驾驭不了往往会使得整个搜索更差,甚至整个项目远远超期或者中途夭折。
  assistant(辅助):这部分比较难以形容也相对杂乱些,几个词形容一下大家自己悟吧:锦上添花、打酱油、工匠精神、吃瓜群众、未雨绸缪、杞人忧天。(整个《大话搜索引擎》系列会有好多工程会属于这部分,也许只能系列文章全写完后才能确切讲清楚这部分是干啥的)
  core(核心):
  1.DataCollector(数据采集工程) 将变更餐厅相关信息近实时的采集到搜索库中。 输入:分属于两个类型的数据库(mysql,oracle)的20多张餐厅相关信息表。输出:整理好的单表数据到SeachDB。此工程在部署的时候是一个单独的后台守护进程运行。
  2.IndexBuilder(索引创建工程) 负责将采集好的变更的餐厅数据近实时的发给solr让其创建索引。输入:SearchDB中的数据源; 输出:整理好的xml文档发给solr。 此工程在部署的时候是一个单独的后台守护进程运行。
  3.SearchService(搜索服务工程) 接受web发来的搜索请求执行搜索操作,并做一些业务转换。 输入:搜索请求参数、业务配置文件、solr返回的源数据; 输出:整理好的规范化的xml数据。 此工程在部署的时候是一运行在web容器中的标准http服务。
  4.triger(数据触发器) 数据源DB上的触发器,负责将变更的数据触发到对应的表中。输入:20多张餐厅信息表的变更事件;输出:变更信息表中的数据(只标识增删改和餐厅业务主键)。此“工程”是DB上的机制,只是开发些triger脚本即可。
  extend(扩展):
  1.WordSegmentation(分词工程) 将索引和查询的字符串分词,包含正向匹配最小的分词器(主分词器)、特殊符号分词器、儿话音分词器、全半角转化分词器。输入:字符串 ; 输出:一个个词。比如输入:“西直门肯德基餐厅” 输出:“西直门” ”肯德基“ “餐厅”。此工程在部署的时候是以jar包的形式内嵌到solr中的。(分词这块具体在搜索中是啥意思文章后半部分会细讲)
  2.SearchProxy(搜索代理工程) 接受SearchService的业务api参数进行审核解析为solr的复杂语法,并查询solr数据返回原生xml信息。 输入:SearchService查询请求参数 输出:solr返回的原生xml数据;此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  3.UpdateFacetCfg(切面数据配置更新工程) 负责将数据库变更的需要做切面统计的数据从数据库下载好组织好生成xml文件供SearchService使用,例如:区域、菜系、价格区间、地铁沿线 等等。 输入:数据库原始信息或者运营人员提的数据变更; 输出:树状facet.xm结构文件。此工程在部署的时候是一个单独的后台守护进程运行,定期向SearchService中输送最新的切面数据文件facet.xml,SearchService则有自动检测文件变更的线程将最新文件加载到内存中使用。两个工程通过文件的形式解耦。
  4.SearchLogic(搜索逻辑功能) 扩展solr功能提供一些灵活的查询模型。例如And, OR, Mix(分词查询语句之间先And查询,无结果自动切换到OR查询)。输入:模型参数;输出:改写的查询语法解析。 这块要改写不少solr的代码,至于当时为什么要做这块原因大概这么几点。A:SearchService提供给多个业务系统用,查询精确度要求不一样 B:solr当时的版本(1.4)在语法解析上会有一些错误在配置同义词的情况下 And和OR关系解析不正确导致同义词配置形同虚设(餐饮行业好多同义词 比如 菜花花菜 土豆山药蛋 等等)。C:对于先And后Or的查询在solr层hack会减少一次网络传输,性能会更好些。此工程在部署的时候是以jar包的形式内嵌到solr中的。
  5.SearchSimilarity(搜索相关度工程) 修改solr的相关度函数代码使其更适合垂直行业搜索。其实改动的很少,但是效果很不错。这块暂时不细讲,因为涉及的内容太多,后续的文章中会花费大的篇幅去讲解。感兴趣的同学可以提前看看了解一下下图的lucene评分公式,在没讲解这个公式前很难把修改的东西起了什么作用讲明白。
  score(q,d)=(overlap/maxOverlap)·(1/(q.getBoost()^2·∑(idf(t)·t.getBoost())^2))·∑(tf(tin d)·idf(t)^2·t.getBoost()·doc.getBoost()·lengthNorm·∏f.getBoost())
  6.Monitor(搜索监控工程)监控系统主要负责两个工作,一个是发现任何solr服务不可用则自动发邮件通知搜索团队每个人,另一个则是将solr服务下线通知LB让SearchService端立即停止请求不可用的solr,并同时周期性检测服务是否已经恢复,恢复的话则会自动通知LB上线并发邮件通知搜索团队每个人。此工程在部署的时候是一个单独的后台守护进程运行。
  assistant(辅助):
  1. LoadBalance(负责均衡工程) load balance这个模块是用来做负载均衡,比如三个solr slave可能有一台机器配置好,则在流量分配上可以多分一些。另外比如solr服务挂掉了 LB则不会上SearchService上的请求打过来。此工在部署的时候是以jar包的形式内嵌到SearchService中的。
  2. ResParticiple(餐饮行业分词测试工程) 这个工程本来可以不提的,本身上线的时候也不会用到,但是它的确又扮演了非常重要的角色。这个工程在分词器进行修改后会拿餐厅标题、热搜字符串等经常被检索的字段分类随机跑出来一定数量(上万)的分词效果供大家检测分词是否合理词库是否完善。这几乎也是初次建立自己词库和分词器的必经之路,尽管繁琐甚至大部分是人肉工作,但是相当有必要!! 此工程不需要部署,通俗点讲是良心活、工匠活。3.LogCleaner(日志清理工程)主要负责 A 将指定目录下的日志删除、 B 日志名字可以配置并支持正则表达式、C 可以指定日志文件保留的天数(天、时、分都可配置)、D 可以指定日志的开始或者结束时间进行删除。 上线部署的时候是多部署,多个运行在后台的守护进程,主要工作是给各个搜索工程吐出的搜日志做清理或保留工作。(其实现在来看这块的功能更常规的做法应该是log4j+shell脚本去处理) 4.LogStorer(日志存储工程) 将SearchService的文件日志读取存储到关系数据库中,以备后续统计分析使用。主要是针对搜索参数的比如:搜索词、ip、用户id、选择的筛选条件、排序条件等等。这块其实是搜索用户数据采集的雏形,后面的经历中会对这块做更深入讲解,其实大部分搜索的后期优化来源于和搜索相关甚至不相关的数据仓库数据。此工程在部署的时候是一个单独的后台守护进程运行。 5.LogDumper(日志转储工程) 将一个月前的搜索日志信息转储到搜索日志历史表中,这块就不多解释了把,你懂的。此工程在部署的时候是一个单独的后台守护进程行。
  
  搜索引擎基本术语
  文档(doc):搜索引擎中的一条数据记录,比如一个餐厅、一个商品。
  文档id(docId):搜索引擎内部唯一标识一篇文档的标记,就像我们的身份证编号一样。
  词:查询、索引 存储的最小原子单位。比如汉字的最细粒度一个字也可以说是一个词。
  分词器:将文本或字符串分解成一个一个词的工具。
  倒排索引表:以词为索引记录每个词都在哪些文档中出现过。
  正排索引表:以文档id为索引,记录相应的文档存储的位置。
  正排倒排讲解
  搜索引擎中常听的的两个术语是正排索引和倒排索引(高大上的称呼可以是 forward index和 inverted index),到底是什么意思呢?大家对索引这个词应该并不陌生,比如说目录索引,邮编索引等等。通俗的讲我们经常阅读书籍的目录索引就是一种正排索引,比如你有天想唱《儿歌三百首》中的“葫芦娃”这首歌,通过目录很快找到了“葫芦娃”的页码(docId:文档id)在36页,于是很快找到了整个歌曲。再比如有天你的领导发你的紧急邮件中有一字“擦”,你认识但是不知道什么意思,于是拿起了祖传的《新华字典》查到了这个"擦"字在第585页,此处的585即可理解场倒排索引id,字典的组织结构是比较像搜索引擎的倒排索引结构的。
  ok? 如果这个不太好理解,拿我们就那更正规的讲法讲解一遍。
  假如有一天你的女神脑洞大开让你将包含“妈妈”这个词的儿歌全部唱一遍,那我们看如果根据正排索引来找出所有歌曲的话则只能一个一个歌曲看,如果那天《儿歌三百首》增长到《儿歌三亿首》是不是这种场景要崩溃香菇的感觉?那如果我们用倒排索引来查呢? “妈妈”这个词对应的倒排列表(文档Id列表)为 1、6、9 而根据这三个文档id再到正排表中快速查到 “妈妈带我沙滩跑”、“傻妈妈”、“喂妈妈” so fast !so easy!咱们再加点难度,又假设你女神突然想起一首歌叫 ”xxx小雪人“而xxx以及记不清具体是啥了,现在我们使用正排索引无疑还是蓝廋香菇!那看看伟大的倒排表如何呢:“小雪人”分词为 “小” “雪人”,对应的倒排docid列表分别是 “小”:2、5、7 ; “雪人“:2,两个docid列表取交集得到docid列表为2,则根据正排表快速找到”门口有个小雪人“ 于是你的女神向你投来了崇拜的目光,如此估计你下个双十一不用一个人过了。
  分词讲解
  聊搜索引擎,分词就不可能避开,也许有人说外文比如英文搜索引擎应该不用分词吧,是的你猜错了!分词的好坏直接影响到召回率(查询出来的真正相关的文档数/总相关的文档数)和查准率(查询出来的真正相关的文档数/查询出来的文档总数)。词是在搜索引擎中的最小原子单位,在lucene的体系又称之为term或token。既然是最小的原子单位就意味着不可再分,不管是查询还是索引都是以这个最小单位为基础。 那么什么叫分词的,就是将一个长字符串通过一定的规则或者词库分解成多个小字符串的过程而这里被分解后的小字符串即是搜索引擎中的最小单位的一个实体--词。所以搜索引擎中的”词“和我们生活中说的”词“并不是同一个概念!! ”张三买了一张三角桌子“ 可以分词为 ”张三、买了、一张、三角、桌子“ , 也可以分词为”张三、买了、一、张三、桌子“ ,如果乐意也可以分词为”张三买了、一张三角、桌子“ , 上面提到的“张三” “张三买了”都是一种词,至于是不是词全是分词器说了算,就像每年评优秀员工一样,领导说你是你就是不是也是!
  好,接下来我们做个智力题,说:”兔妈妈出门前让小白兔把一个胡萝卜切成了10小段放进锅里煮,结果兔妈妈回来了要它从锅里捞出来一条完好无损的整根萝卜,请问小白兔能做到吗?“,是的你回答正确显然不能, 那么难度加大说:”兔妈妈出门前让小白兔把一个胡萝卜切成了无数萝卜丝放进锅里煮,结果兔妈妈回来了要它从锅里捞出来10小段萝卜,请问小白兔能做到吗?“,是的你又答对了肯定不可能做到。然而初入搜索者经常会犯懵,时不时的去让自己扮演兔妈妈,让搜索引擎扮演小白兔,让搜索引擎蓝瘦的香菇!不信你看下面这个例子:我文档里面有"中国东北大学“,为什么搜索“中国大学”搜不出来, 反而搜索“北大”把 中国东北大学搜索出来了!
  如何选择分词器?分词的问题也是搜索技术社区里面经常甚至每天都会问到的一类问题。典型问题如:“我用什么分词器好 ik、庖丁、mmseg、ansj还是hanlp?” 这个就好比问ruby、java、python、php那个更牛X?再打个比方这些开源的分词器就像做好的鞋子(大部分有其固定特点),你直接问柜员要最漂亮的鞋子,结果给你推荐一个红色女士高跟鞋结果哪知道你是个大老爷们并且有着48的大脚!分词的选择脱离开业务场景和自己的数据场景无异于缘木求鱼,关于如何选择分词我以后会根据自己趟过的坑让大家一步步去理解加深,实际中没有最好的只有合适不合适的!
  今天就先罗嗦到这里吧,感谢各位看官看到了文章末尾,若是无意挑战中挑战了各位亲的忍耐力还请海涵。其实本身不打算把文章搞这么长并让大家等这么久的,但是权衡再三还是感觉放在一篇中知识点相对比较完整独立,前后篇耦合度也低一些,作为一个码农的洁癖,你是知道的O(∩_∩)O。

十亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-06-26 19:48 • 来自相关话题

  十亿级流量的搜索前端,是怎么做架构升级的?
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  招聘信息
  百度搜索前端团队负责百度搜索()在各场景下的展现交互和底层框架的研发,致力于让人们平等便捷地获取信息,找到所求。这是一个喜匠心,善始终,追极致的90后攻城狮/程序媛群体,团队男女比例1:1。我们给优秀的人以自由的空间,欢迎有志者加入:。
  ---------- END ----------
  百度架构师
  百度官方技术公众号上线啦!
  技术干货·行业资讯 ·线上沙龙·行业大会
  招聘信息 ·内推信息 ·技术书籍·百度周边
  欢迎各位同学关注!
  一键三连,好运连连,bug不见 查看全部

  十亿级流量的搜索前端,是怎么做架构升级的?
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选则 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  招聘信息
  百度搜索前端团队负责百度搜索()在各场景下的展现交互和底层框架的研发,致力于让人们平等便捷地获取信息,找到所求。这是一个喜匠心,善始终,追极致的90后攻城狮/程序媛群体,团队男女比例1:1。我们给优秀的人以自由的空间,欢迎有志者加入:。
  ---------- END ----------
  百度架构师
  百度官方技术公众号上线啦!
  技术干货·行业资讯 ·线上沙龙·行业大会
  招聘信息 ·内推信息 ·技术书籍·百度周边
  欢迎各位同学关注!
  一键三连,好运连连,bug不见

php搜索引擎优化应该是目前为止最重要的一个优化方面

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2022-06-25 23:01 • 来自相关话题

  php搜索引擎优化应该是目前为止最重要的一个优化方面
  php搜索引擎优化应该是目前为止最重要的一个优化方面,php服务器占有全球99%的网站。seo就是利用php语言对服务器、php框架对index.php进行处理、优化,php框架和index.php完全是来自于hackwood的seo专家团队,从而实现php语言优化,接着由该团队撰写php语言核心内容、hackwoodseo团队提供后台支持等,而php框架本身仅负责一部分的索引优化工作,这个过程是完全可逆的,但做为整个seo框架的核心,就是要提供系统化的seo框架。
  php框架也有很多主流的php框架,groovy语言的pre-hook语言,xpath编写等。技术上面面有不少常见的php优化方法:/分布式管理(集群、缓存等),加权平衡(链路维护等),丰富的异步通信手段等。接下来hackwood在这里为大家介绍4个关于php优化的方法,大家可以积极下载后学习php优化相关知识。
  
  1.分布式管理学过php开发的人都知道分布式管理相关概念和协议,google大一统的数据库架构(oracle,mysql)也要求php服务器具有足够的独立性,如php服务器管理集群数据库等。分布式管理可提供整体化的管理,有效的提高整体服务器的利用率和节能。而对于php框架不同的阶段,提供不同的规范也是正常。
  比如,初级阶段,可以进行单点优化(单点优化高级版),高级阶段,则可以按照规范去做分布式的集群管理(并发控制)。2.加权平衡seo优化中有经常需要设计一些专页,那么不断提高服务器资源的利用率也是必不可少的。当服务器利用率不高的时候,有人为了解决资源使用率低的问题,采用定时发送链接过去的方式,该策略要求服务器要有足够的承载能力,如随着服务器使用率低,网站速度急剧下降,这个时候就要考虑定时推送链接的策略。
  因此,加权平衡也是一个seo相关技术,合理利用资源,进行对搜索引擎的权重优化。3.异步通信+高级回调通信对于常见的回调分两种:在线调用和回调分布式调用。在线调用:通过回调函数指定哪些任务要通过api接口来交给服务器来实现,服务器汇总这些需要发送给客户端,同时客户端在接受这些任务后,把任务打包为war包发送给服务器。
  在线调用的缺点在于api回调的方式性能不高,因为其没有客户端与服务器的直接交互,可能是因为其io处理代价比较高。所以,一般的情况下用在线调用来优化。客户端使用回调就好像在服务器端对客户端说我需要接收回调我在服务器端发送我的需求,我想做一个网站首页我先把需求发过去你把这个接受过来我来做一下缓存你做一下seo后台。当api接口的首页达到用户预期时就关闭api调用给客户端就好了。 查看全部

  php搜索引擎优化应该是目前为止最重要的一个优化方面
  php搜索引擎优化应该是目前为止最重要的一个优化方面,php服务器占有全球99%的网站。seo就是利用php语言对服务器、php框架对index.php进行处理、优化,php框架和index.php完全是来自于hackwood的seo专家团队,从而实现php语言优化,接着由该团队撰写php语言核心内容、hackwoodseo团队提供后台支持等,而php框架本身仅负责一部分的索引优化工作,这个过程是完全可逆的,但做为整个seo框架的核心,就是要提供系统化的seo框架。
  php框架也有很多主流的php框架,groovy语言的pre-hook语言,xpath编写等。技术上面面有不少常见的php优化方法:/分布式管理(集群、缓存等),加权平衡(链路维护等),丰富的异步通信手段等。接下来hackwood在这里为大家介绍4个关于php优化的方法,大家可以积极下载后学习php优化相关知识。
  
  1.分布式管理学过php开发的人都知道分布式管理相关概念和协议,google大一统的数据库架构(oracle,mysql)也要求php服务器具有足够的独立性,如php服务器管理集群数据库等。分布式管理可提供整体化的管理,有效的提高整体服务器的利用率和节能。而对于php框架不同的阶段,提供不同的规范也是正常。
  比如,初级阶段,可以进行单点优化(单点优化高级版),高级阶段,则可以按照规范去做分布式的集群管理(并发控制)。2.加权平衡seo优化中有经常需要设计一些专页,那么不断提高服务器资源的利用率也是必不可少的。当服务器利用率不高的时候,有人为了解决资源使用率低的问题,采用定时发送链接过去的方式,该策略要求服务器要有足够的承载能力,如随着服务器使用率低,网站速度急剧下降,这个时候就要考虑定时推送链接的策略。
  因此,加权平衡也是一个seo相关技术,合理利用资源,进行对搜索引擎的权重优化。3.异步通信+高级回调通信对于常见的回调分两种:在线调用和回调分布式调用。在线调用:通过回调函数指定哪些任务要通过api接口来交给服务器来实现,服务器汇总这些需要发送给客户端,同时客户端在接受这些任务后,把任务打包为war包发送给服务器。
  在线调用的缺点在于api回调的方式性能不高,因为其没有客户端与服务器的直接交互,可能是因为其io处理代价比较高。所以,一般的情况下用在线调用来优化。客户端使用回调就好像在服务器端对客户端说我需要接收回调我在服务器端发送我的需求,我想做一个网站首页我先把需求发过去你把这个接受过来我来做一下缓存你做一下seo后台。当api接口的首页达到用户预期时就关闭api调用给客户端就好了。

百度十亿级流量的搜索前端,是怎么做架构升级的?

网站优化优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-06-20 07:20 • 来自相关话题

  百度十亿级流量的搜索前端,是怎么做架构升级的?
  <br />
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选择 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  往期推荐
  <p data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-color-16019974160118="rgb(163, 163, 163)" data-darkmode-original-color-16019974160118="rgb(62, 62, 62)" data-darkmode-original-color="rgb(62, 62, 62)" data-darkmode-bgcolor-16020863323024="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16020863323024="rgb(255, 255, 255)" data-darkmode-color-16020863323024="rgb(163, 163, 163)" data-darkmode-original-color-16020863323024="rgb(62, 62, 62)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-bgcolor-16024232380271="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16024232380271="rgb(255, 255, 255)" data-darkmode-color-16024232380271="rgb(163, 163, 163)" data-darkmode-original-color-16024232380271="rgb(62, 62, 62)" data-darkmode-bgcolor-16025172440432="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16025172440432="rgb(255, 255, 255)" data-darkmode-color-16025172440432="rgb(163, 163, 163)" data-darkmode-original-color-16025172440432="rgb(62, 62, 62)" style="text-align: center;white-space: normal;word-spacing: 0.5px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0.5px;line-height: 1.75em;">   END     
  #技术人必备#
  <br /></p>
  点个在看,让更多人看见 查看全部

  百度十亿级流量的搜索前端,是怎么做架构升级的?
  <br />
  Harttle
  百度资深研发工程师,北京大学物理学学士和计算机科学硕士。2016年加入百度,曾负责和参与百度搜索Web极速浏览框架、MIP开源项目的研发,目前负责搜索结果页和搜索推荐业务。LiquidJS 的作者,贡献于San、Realworld Apps、hightlight.js、ALE、HTML5 Standard等项目。
  导读:前端发展飞速,从最开始的静态页面到 JavaScript,再从 PC 端到移动端,随着大前端的复杂度不断提升,很多公司开始前后端分离,剥离出前、后端架构设计。那我们来看看,前端架构设计是什么?曾经非常简单的前端架构发展到现在有哪些问题,遇到前端代码体量巨大、跨团队协作效率、代码耦合、技术栈落后等问题又该怎么解决?
  一、什么是前端架构?
  前端架构这一词,相信很多人的定义都不太一样;按照拆词的解释来看,我理解为“前端”+“架构”。前端是指,Web 端的前台页面,包括网页的内容、样式、脚本等,这三者通常封装在组件中,可能是模板引擎的文件模块,也可能是 MVVM 框架里的组件。“架构”就更好理解了,架构一词来自建筑行业,可以理解是房屋的整体结构、框架。结合前端和架构的概念,“前端架构”可以理解为,Web 页面组件的抽象和组织方式。
  又因为各个公司的业务不同,每个公司的前端架构发展都不一样,这里,我会拿百度移动端经典的搜索场景来给大家举例,希望从百度的移动端架构演进过程中,发现一些共性的问题。
  二、百度移动端背景及问题
  为什么是以百度来举例?是因为百度是国内搜索引擎的领头人,并且,目前一直处于行业领先状态。据 statcounter 前瞻产业研究院在 2019 年中国搜索引擎行中可以知道,百度搜索占全世界搜索引擎市场份额12.3%,居第二位,仅次于谷歌。所以用百度来举例,更具有代表性。
  言归正传,打开百度 App 你会发现,百度前端直接分为首页和搜索结果页,搜索结果页是搜索的主要入口,每天承载着十亿级流量。
  不仅如此,搜索结果页承载着许多产品线的需求和下游模块的运行时,每年内部的研发人员会提供五百多个产品需求,为十几个下游模块提供基础库和运行时。甚至还有后端协同,从图 1 我们可以看出结果页的整体架构。
  △图 1:百度搜索结果页的整体架构
  针对整体的架构设计,有这些问题:
  于是,梳理出三个方面的问题:
  1. 人员职责不清晰,单个模块同时承担了多个团队的职责
  2. 代码耦合严重
  3. 技术栈落后
  这三个问题最终会影响到研发效率以及产品质量。那么百度又是怎么去具体做的呢?架构优化的目标只有两个,一是满足业务需求,二是技术上能对框架和工具灵活升级(也是为了持续的满足业务需求)。根据“满足业务需求”这一目标,百度内部是制定了三个层面的方向。(如图 2)
  △图 2:业务需求的三个方向
  三、怎么解决
  根据这里提到的方向和目标,怎么结合百度自己的架构落地呢?首先,回顾下百度的架构,如下图 3 可以看到。
  △图 3:百度搜索结果页的整体架构
  1. 这里有两块日志,意味着同一套代码要在两个部分维护;除了重复之外,它们的差异会对后续的维护引入更高的成本;
  2. 底层这个 HHVM+PHP 和社区更加拥抱 Node.js 会有冲突。
  所以,百度同学把目标架构调整为图 4 所示。
  △图 4:结果页的目标架构
  图 4 中可以看到:
  把日志、搜索框、相关搜索、性能打点等独立成单独的模块,有专门的同学来独立维护和迭代;
  在前后端之间加了一层渲染层;让业务代码和后端的逻辑分开;
  在底层加了 Node.js 机制。
  目标、方向都解决好之后,就得看如何实施。对于一个小体量的库来说,从零构建架构就行;但是对于百度来说,实施也是难点。不仅要考虑平滑迁移、性能不退化,还要考虑长期可维护性、安全性、跨平台等。
  前文也提到了,基本思路是按照基础设施、模块拆分、组件化的步骤执行;基础设施是业务模块划分的关键,完善的自动化和工具链是模块化的前提;模块化拆分可以为业务和团队提供更好的横向扩展能力;模块化的基础上,可以进一步在模块内部建设组件化方案来加速业务迭代。
  在基础设施需要关注的事情包括:
  模块化拆分需要关注的事情包括:
  注意:
  模块化拆分不是技术问题,而是业务问题。只有根据业务和产品进行垂直划分,才有可能达到解耦和独立迭代的目的。否则只是形式上拆分耦合的代码,会造成更大的维护和沟通成本。
  由于组件是业务模块内部的选型,组件化的方案相对比较自由。只需要不严重影响性能,且能够平滑过渡即可。
  四、落地方案
  1. 模块化
  具体的落地方案,我们也用一张图(图5)来表示。可以看到它分为服务端和浏览器端两部分。
  △图 5:具体的落地方案
  2. 服务端
  百度是把整个大模块拆分成多个独立业务模块,最终页面由模块组合而成。这要求业务模块具有统一的接口,即上图所示的 Molecule 接口,它定义了模块如何渲染、有哪些依赖等信息。因为渲染过程封装在了模块内部,所以整个架构可以支持多语言、多框架。
  相信你也发现,Molecule 和微服务非常相似。它们的关键区别在于,微服务的服务之间通过 IPC 互相操作,且每个服务可以独立伸缩、独立部署;而 Molecule 的各模块存在于同一个进程里。虽然有这样的区别,Molecule 仍然可以实现和微服务近乎相同的特性,如图 6 所示。
  △图 6:Molecule 和微服务的比较
  图 7 展示的是一个具体的业务模块的服务端入口文件,其中 ToptipController 是实现了由 Molecule 提供的控制器接口;这个接口要求提供一个渲染函数,接受一个字典类型的数据,返回渲染之后的页面内容。由调用方决定如何组装页面。
  △图 7:具体的业务模块的服务端入口文件
  如上是业务模块提供方的接口。此外 Molecule 机制还为调用方(组装最终页面的那一侧)提供了方便的接口,可以在需要引入子模块的地方,传入子模块名称和参数即可在运行时渲染出来。整个机制的原理很简单,但实际使用中可能还需要引入命名空间、考虑模块版本等问题。
  3. 客户端
  那么客户端如何运行起来呢?我们也需要把每个模块的浏览器端组件运行起来,困难在于组件之间的依赖和代码共享。这些组件可能位于不同的代码库并属于不同的业务,所以我们需要一个非常松散的依赖方式。
  这里我们引入的是一个依赖注入的容器(图 8),总的来说,框架逻辑和通用工具都封装成具体的Service提供给业务模块使用,每个业务模块则需要定义它依赖于哪些Service。
  △图 8:客户端设计
  图 9 形象地描述了组件、Service 和容器间的关系。
  △图 9:组件、Service 和容器之间的关系
  其中蓝色代表具体的Service,其他颜色表示独立的业务模块。运行时容器会负责解决每个业务模块的依赖,并把这些业务模块组装起来,最终得到可交互的 Web 页面。
  注意:
  业务模块之间是独立的,一个业务模块无法依赖于其他业务模块,只能依赖于通用 Service。因此如果存在业务模块之间的产品逻辑耦合,可能需要一个通用 Service 作为媒介,比如容器里提供一个起事件总线作用的 EventService。
  图10是业务模块的客户端代码示例。它的依赖通过构造函数来声明,运行时容器负责依赖的创建,而业务模块只需要关心依赖的使用。正是使用和创建操作的分离,使得业务模块之间、业务模块和页面框架之间可以解耦,可以独立地开发、独立地测试。
  △图 10:业务模块的客户端代码示例
  以上是模块拆分的整体方案,我们回顾一下:在服务端通过一个叫做 Molecule 的接口来组合业务模块;在浏览器端通过一个 DI 容器来解决依赖关系,并启动所有业务模块。
  4. 组件化
  组件化方案直接影响业务开发的的效率,换句话说,组件化方案某种程度上决定了业务同学写怎样的代码。组件化也可以帮助解决职责不清晰等问题。我们选的组件化方案是 San,你也可以基于你的业务或偏好选择 Vue 或者 React。业务代码的迁移比较直观,就是从 Smarty 模板迁移到 San 组件,从 HTML 字符串拼接变成有业务语义的组件结构。
  接下来重点关注组件化方案的两个关键技术问题,跨平台和页面性能。
  1)跨平台
  我们有非常多的业务代码,有上千个模板、几十万行代码,这些代码需要迁移到组件化方案上来,而且要确保后端从 PHP 迁移到 Node.js 的整个过程中,业务代码不需要重新开发。所以业务组件如何跨平台呢?关键在于抽象。
  做到以上几点就可以完成平滑的过渡。这个过程中又分为三个阶段(图 11)。
  △图 11:平台过渡的三个阶段
  2)页面性能
  引入前端框架通常意味着体积增加,性能下降,而性能直接影响搜索收入,因此页面性能是项目成功的关键。如果性能会比模板引擎的性能差,那么这个项目很可能会夭折。如何去保证页面性能?着重介绍两个优化点。
  引入SSR。为了解释SSR的重要性,请看图12。浏览器加载页面分为四步:请求页面、请求外链资源、执行脚本、渲染组件。从图中的对比可以看出,CSR在前面三步的时候,用户都是看不到页面的;而引入SSR之后,在第二步用户就能看到请求回来的页面。SSR它最大的一个用途就是提升首屏时间。
  △图 12:CSR和SSR的比较
  SSR 优化。只是引入 SSR 还不能让性能达到预期,因为相比于模板引擎直接拼接字符串,SSR 需要递归渲染组件,尤其是递归 VNode 比较耗时。对此 San SSR 相比于 Vue/React SSR 做了很多改进。
  图 13 展示了最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比。
  △图 13:最终的 San SSR 和改造前的 Smarty 模板引擎的性能对比
  可以看到 Smarty 和 San SSR 在不同的场景会有不同的表现,因为它们的渲染方式非常不同。最终搜索结果页的组件化的 SSR 上线之后,线上实验效果显示比 Smarty 要快 10ms左右。这个已经是一个很不错的效果了,我们用组件化从性能上打败了模版引擎。
  五、结语
  针对百度搜索引擎在架构演化中遇到的问题,相信在其他领域也会有一些共性的东西。通过百度的解决思路,希望能对正在做前端架构的你有一些启发。
  往期推荐
  <p data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-color-16019974160118="rgb(163, 163, 163)" data-darkmode-original-color-16019974160118="rgb(62, 62, 62)" data-darkmode-original-color="rgb(62, 62, 62)" data-darkmode-bgcolor-16020863323024="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16020863323024="rgb(255, 255, 255)" data-darkmode-color-16020863323024="rgb(163, 163, 163)" data-darkmode-original-color-16020863323024="rgb(62, 62, 62)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-bgcolor-16024232380271="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16024232380271="rgb(255, 255, 255)" data-darkmode-color-16024232380271="rgb(163, 163, 163)" data-darkmode-original-color-16024232380271="rgb(62, 62, 62)" data-darkmode-bgcolor-16025172440432="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16025172440432="rgb(255, 255, 255)" data-darkmode-color-16025172440432="rgb(163, 163, 163)" data-darkmode-original-color-16025172440432="rgb(62, 62, 62)" style="text-align: center;white-space: normal;word-spacing: 0.5px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0.5px;line-height: 1.75em;">   END     
  #技术人必备#
  <br /></p>
  点个在看,让更多人看见

如何利用搜索引擎,提高10倍的工作效率?(建议收藏)

网站优化优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-18 20:16 • 来自相关话题

  如何利用搜索引擎,提高10倍的工作效率?(建议收藏)
  
  之前说过在互联网上95%的信息都可以通过搜索找到,即绝大多数的信息都可以通过搜索渠道找到解决问题的答案。
  本文应该属于科普篇,做外贸的,做跨境电商的,我相信绝大多数人都懂得搜索引擎的指令,有效的利用搜索引擎的查询指令可以极大的提高工作的效率。
  过去我通过这些指令,为我的工作提供了巨大的帮助,也把这些必要的搜索指令分享给大家,建议所有人都要掌握。
  通过这些搜索语句,你可以;
  可以针对竞争对手的关键词布局,外链建设,页面优化的情况,网站收录,网站权重等等都可以通过搜索引擎的指令来分析
  可以过滤不需要的信息,精确的查想要的资料,如特定的文件格式,只查找标题,链接中资料等等。
  我认为下面的这些指令是所有人都应该要学会的,你将从中挖掘到巨大的宝藏。
  
  1、双引号
  把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。百度和Google 都支持这个指令。如假发的关键词搜索: “hair extension”
  从搜索上来看,Hair Extension 必须是完全匹配的,不会泛搜索。使用双引号搜索可以更准确的找到特地的关键词的竞争对手。
  2、减号
  有时候不想看搜索结果出来的一些关键词,那么就可以利用减号的指令来排除。比如你想查看的是苹果的手机,不想看关于苹果的电影,那么这个时候减号的作用就很有效。
  减号(-)代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和百度都支持这个指令。例如:苹果 -电影 返回的则是包含“苹果”这个词,却不包含“电影”这个词的结果
  3、星号
  星号是常用的通配符,也可以用在搜索中。百度不支持号搜索指令。比如在Google 中搜索:搜索*擎其中的号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。
  我经常有些成语忘记了,只是大概的记得2个字,那么我也会用星号来代表,如下图,我会这样查询 成语 作舍** ,如下图
  这样作舍道边这个成语就被我找到了。这种方法对于经常似懂非懂的问题都可以解决的。
  4、inurl
  linurl:指令用于搜索查询词出现在url 中的页面。百度和Google 都支持inurl 指令。inurl 指令支持中文和英文。
  比如搜索:inurl:hair extension返回的结果都是网址url 中包含“hair extension”的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。
  5、inanchor
  inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor。
  比如在Google 搜索 :inanchor:点击这里返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。
  可以用来找到某个关键词的竞争对手,而且这些竞争对手往往是做过SEO 的。研究竞争对手页面有哪些外部链接,就可以找到很多链接资源。
  6、intitle
  intitle: 指令返回的是页面title 中包含关键词的页面。Google 和百度都支持intitle 指令。
  使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。
  7、allintitle
  allintitle:搜索返回的是页面标题中包含多组关键词的文件。例如 :allintitle:hair extension就相当于:intitle:hair intitle:extension返回的是标题中中既包含“hair”,也包含“extension”的页面
  8、allinurl
  与allintitle: 类似。
  allinurl:hair extension 就相当于:inurl:hair inurl:extension
  当然也可以用下面的查询语句 inurl:hair/extension/love
  9、filetype
  用于搜索特定文件格式。
  Google 和百度都支持filetype 指令。比如搜索filetype:pdf hair extension返回的就是包含hair extension 这个关键词的所有pdf 文件。
  百度只支持下面几种文件格式:pdf,doc,xls,ppt,rtf,all。其中的“all”表示搜索百度所有支持的文件类型。Google则支持所有能索引的文件格式,包括HTML、PHP等。
  10、site
  site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。
  site的指令现在不是很准确,这个只能作为参考来用.比如查询 site: 返回的是这个域名的所有页面。
  11、related
  related:指令只适用于Google,返回的结果是与某个网站有关联的页面。比如搜索related:我们就可以得到Google 所认为的与点石网站有关联的其他页面。
  这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。上面介绍的这几个高级搜索指令,单独使用可以找到不少资源,或者可以更精确地定位竞争对手。把这些指令混合起来使用则更强大。
  inurl:gov 减肥
  返回的就是url 中包含gov,页面中有“减肥”这个词的页面。
  很多SEO 人员认为Gov和学校网站有比较高的权重,找到相关的Gov和学校网站,就找到了最好的链接资源。
  
  或者使用一个更精确的搜索:
  inurl:hair extension intitle:guest post
  返回的则是包含hair extension这个关键词,标题中包含“guest post”这四个字的页面,返回的结果大部分是标题中包含guest post 并在连接中包含 hair extension
  一个合格的SEO必须熟练掌握这几个常用指令的意义及组合方法,才能更有效率地找到更多竞争对手和链接资源。找外链的时候你可以用这几种命令组合,
  比如:
  下面这个指令:inurl:/forum/*register返回的结果是在.域名上,url 中包含“forum”以及“register”这两个单词的页面,也就是学校论坛的注册页面。找到这些论坛,也就找到了能在高权重域名上留下签名的很多机会
  inurl:/客座博客
  查询的是特定网站下的关键词搜索
  再比如:
  site:.com inurl:blog “post a comment” -”comments closed” -”you must be logged in” “输入你的关键词“,site:.com 是 指, 只显示.com的网站。
  如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。“post a comment” -”comments closed” -”you must be logged in” 是指, “能够写评论的” 减去“ 关闭评论的” 再减去“ 必须要登录才能写评论的”
  上面这些查询语句,如果大家熟练运用的话会对工作效率有着极大提高,建议大家多经常使用。(强烈推荐) 查看全部

  如何利用搜索引擎,提高10倍的工作效率?(建议收藏)
  
  之前说过在互联网上95%的信息都可以通过搜索找到,即绝大多数的信息都可以通过搜索渠道找到解决问题的答案。
  本文应该属于科普篇,做外贸的,做跨境电商的,我相信绝大多数人都懂得搜索引擎的指令,有效的利用搜索引擎的查询指令可以极大的提高工作的效率。
  过去我通过这些指令,为我的工作提供了巨大的帮助,也把这些必要的搜索指令分享给大家,建议所有人都要掌握。
  通过这些搜索语句,你可以;
  可以针对竞争对手的关键词布局,外链建设,页面优化的情况,网站收录,网站权重等等都可以通过搜索引擎的指令来分析
  可以过滤不需要的信息,精确的查想要的资料,如特定的文件格式,只查找标题,链接中资料等等。
  我认为下面的这些指令是所有人都应该要学会的,你将从中挖掘到巨大的宝藏。
  
  1、双引号
  把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。百度和Google 都支持这个指令。如假发的关键词搜索: “hair extension”
  从搜索上来看,Hair Extension 必须是完全匹配的,不会泛搜索。使用双引号搜索可以更准确的找到特地的关键词的竞争对手。
  2、减号
  有时候不想看搜索结果出来的一些关键词,那么就可以利用减号的指令来排除。比如你想查看的是苹果的手机,不想看关于苹果的电影,那么这个时候减号的作用就很有效。
  减号(-)代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和百度都支持这个指令。例如:苹果 -电影 返回的则是包含“苹果”这个词,却不包含“电影”这个词的结果
  3、星号
  星号是常用的通配符,也可以用在搜索中。百度不支持号搜索指令。比如在Google 中搜索:搜索*擎其中的号代表任何文字。返回的结果就不仅包含“搜索引擎”,还包含了“搜索收擎”,“搜索巨擎”等内容。
  我经常有些成语忘记了,只是大概的记得2个字,那么我也会用星号来代表,如下图,我会这样查询 成语 作舍** ,如下图
  这样作舍道边这个成语就被我找到了。这种方法对于经常似懂非懂的问题都可以解决的。
  4、inurl
  linurl:指令用于搜索查询词出现在url 中的页面。百度和Google 都支持inurl 指令。inurl 指令支持中文和英文。
  比如搜索:inurl:hair extension返回的结果都是网址url 中包含“hair extension”的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。
  5、inanchor
  inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor。
  比如在Google 搜索 :inanchor:点击这里返回的结果页面本身并不一定包含“点击这里”这四个字,而是指向这些页面的链接锚文字中出现了“点击这里”这四个字。
  可以用来找到某个关键词的竞争对手,而且这些竞争对手往往是做过SEO 的。研究竞争对手页面有哪些外部链接,就可以找到很多链接资源。
  6、intitle
  intitle: 指令返回的是页面title 中包含关键词的页面。Google 和百度都支持intitle 指令。
  使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。
  7、allintitle
  allintitle:搜索返回的是页面标题中包含多组关键词的文件。例如 :allintitle:hair extension就相当于:intitle:hair intitle:extension返回的是标题中中既包含“hair”,也包含“extension”的页面
  8、allinurl
  与allintitle: 类似。
  allinurl:hair extension 就相当于:inurl:hair inurl:extension
  当然也可以用下面的查询语句 inurl:hair/extension/love
  9、filetype
  用于搜索特定文件格式。
  Google 和百度都支持filetype 指令。比如搜索filetype:pdf hair extension返回的就是包含hair extension 这个关键词的所有pdf 文件。
  百度只支持下面几种文件格式:pdf,doc,xls,ppt,rtf,all。其中的“all”表示搜索百度所有支持的文件类型。Google则支持所有能索引的文件格式,包括HTML、PHP等。
  10、site
  site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。
  site的指令现在不是很准确,这个只能作为参考来用.比如查询 site: 返回的是这个域名的所有页面。
  11、related
  related:指令只适用于Google,返回的结果是与某个网站有关联的页面。比如搜索related:我们就可以得到Google 所认为的与点石网站有关联的其他页面。
  这种关联到底指的是什么,Google 并没有明确说明,一般认为指的是有共同外部链接的网站。上面介绍的这几个高级搜索指令,单独使用可以找到不少资源,或者可以更精确地定位竞争对手。把这些指令混合起来使用则更强大。
  inurl:gov 减肥
  返回的就是url 中包含gov,页面中有“减肥”这个词的页面。
  很多SEO 人员认为Gov和学校网站有比较高的权重,找到相关的Gov和学校网站,就找到了最好的链接资源。
  
  或者使用一个更精确的搜索:
  inurl:hair extension intitle:guest post
  返回的则是包含hair extension这个关键词,标题中包含“guest post”这四个字的页面,返回的结果大部分是标题中包含guest post 并在连接中包含 hair extension
  一个合格的SEO必须熟练掌握这几个常用指令的意义及组合方法,才能更有效率地找到更多竞争对手和链接资源。找外链的时候你可以用这几种命令组合,
  比如:
  下面这个指令:inurl:/forum/*register返回的结果是在.域名上,url 中包含“forum”以及“register”这两个单词的页面,也就是学校论坛的注册页面。找到这些论坛,也就找到了能在高权重域名上留下签名的很多机会
  inurl:/客座博客
  查询的是特定网站下的关键词搜索
  再比如:
  site:.com inurl:blog “post a comment” -”comments closed” -”you must be logged in” “输入你的关键词“,site:.com 是 指, 只显示.com的网站。
  如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。“post a comment” -”comments closed” -”you must be logged in” 是指, “能够写评论的” 减去“ 关闭评论的” 再减去“ 必须要登录才能写评论的”
  上面这些查询语句,如果大家熟练运用的话会对工作效率有着极大提高,建议大家多经常使用。(强烈推荐)

搭建自己的searx搜索引擎

网站优化优采云 发表了文章 • 0 个评论 • 309 次浏览 • 2022-06-10 18:20 • 来自相关话题

  搭建自己的searx搜索引擎
  
  
  Searx是一个隐私尊重的免费元搜索引擎。它具有以下功能特性:自我托管,默认不使用 Cookie,不跟踪、不分析用户,不收集用户数据,不与第三方共享用户数据,提供安全的加密连接(HTTPS / SSL)等;如果您更在意隐私而不是效率,这会是一个很不错的选择。
  Searx,一个基于Python的完全开源免费搜索引擎平台,为你提供来自Google、Bing、Yahoo等70多种各大视频、图片、搜索、磁力等网站结果展示,并对搜索结果进行优化,同时不会存储你的任何搜索信息,搭建也很方便。
  搭建环境:Ubuntu 16.04
  项目地址:
  首先安装Git:apt install git
  拉取源码:git clone
  安装依赖:cd searx
  pip install -r requirements.txt
  编辑配置文件:visearx/settings.yml

  如上图:
  language:为搜索语言,默认en-US,如果你的搜索以中文为主,那就改成zh-CN,当然这个语言在搜索界面也可以设置。
  port:为监听端口,默认8888,可自行修改。
  bind_address:为监控地址,默认为127.0.0.1,如果需要让ip地址能被外网访问,就修改为0.0.0.0,这里建议默认,然后再用域名反代即可。
  secret_key:该参数为加密密匙,可自行设置,数值可以在ssh客户端使用openssl rand -hex 16命令生成。
  这里你也可以不用vi编辑器,直接使用命令修改:
  #修改language,默认为中文搜索结果
  sed -i 's/language : "en-US"/language : "zh-CN"/g' searx/settings.yml
  #修改secret_key
  sed -i "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
  #修改bind_address,改了后就可以使用ip访问了,如果你使用域名的话,可以不修改
  sed -i 's/bind_address : "127.0.0.1"/bind_address : "0.0.0.0"/g' searx/settings.yml
  #修改port,比如修改成8000
  sed -i "s/port : 8888/port : 8000/g" searx/settings.yml
  运行screen:apt isstall screen -y
  后台运行:screen -dmS searx python searx/webapp.py
  现在就可以ip+端口访问了,如图
  
  本文章仅做为学习参考使用,切勿用于非法及商业用途!造成的后果作者不承担任何责任!
   查看全部

  搭建自己的searx搜索引擎
  
  
  Searx是一个隐私尊重的免费元搜索引擎。它具有以下功能特性:自我托管,默认不使用 Cookie,不跟踪、不分析用户,不收集用户数据,不与第三方共享用户数据,提供安全的加密连接(HTTPS / SSL)等;如果您更在意隐私而不是效率,这会是一个很不错的选择。
  Searx,一个基于Python的完全开源免费搜索引擎平台,为你提供来自Google、Bing、Yahoo等70多种各大视频、图片、搜索、磁力等网站结果展示,并对搜索结果进行优化,同时不会存储你的任何搜索信息,搭建也很方便。
  搭建环境:Ubuntu 16.04
  项目地址:
  首先安装Git:apt install git
  拉取源码:git clone
  安装依赖:cd searx
  pip install -r requirements.txt
  编辑配置文件:visearx/settings.yml

  如上图:
  language:为搜索语言,默认en-US,如果你的搜索以中文为主,那就改成zh-CN,当然这个语言在搜索界面也可以设置。
  port:为监听端口,默认8888,可自行修改。
  bind_address:为监控地址,默认为127.0.0.1,如果需要让ip地址能被外网访问,就修改为0.0.0.0,这里建议默认,然后再用域名反代即可。
  secret_key:该参数为加密密匙,可自行设置,数值可以在ssh客户端使用openssl rand -hex 16命令生成。
  这里你也可以不用vi编辑器,直接使用命令修改:
  #修改language,默认为中文搜索结果
  sed -i 's/language : "en-US"/language : "zh-CN"/g' searx/settings.yml
  #修改secret_key
  sed -i "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml
  #修改bind_address,改了后就可以使用ip访问了,如果你使用域名的话,可以不修改
  sed -i 's/bind_address : "127.0.0.1"/bind_address : "0.0.0.0"/g' searx/settings.yml
  #修改port,比如修改成8000
  sed -i "s/port : 8888/port : 8000/g" searx/settings.yml
  运行screen:apt isstall screen -y
  后台运行:screen -dmS searx python searx/webapp.py
  现在就可以ip+端口访问了,如图
  
  本文章仅做为学习参考使用,切勿用于非法及商业用途!造成的后果作者不承担任何责任!
  

php+hook,php服务端运维?一个高性能服务器

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-06-07 08:06 • 来自相关话题

  php+hook,php服务端运维?一个高性能服务器
  php搜索引擎优化
  前端,node.js+vue等框架和hook等技术,
  提供一个分工比较细的行业,就是健康管理行业,医疗管理行业是目前比较火热的一个行业,很多公司都在做。php+hook+mongodb,
  php服务端运维?一个高性能服务器。在php中有数十万以上的模块,用hook、事件模拟然后markdown复制来运行就差不多。
  比如健康管理系统?php提供feed流的接口并且可以实现语言交互?
  健康管理行业的话,php服务端开发是很有必要的,如果是大的健康公司的话,可以考虑用健康管理系统来搭建自己的健康企业管理系统,如果是一般的小医院,或是医院已经有多套健康管理系统的话,
  健康管理需要稳定高性能的服务器,这里可以推荐一个好的性能http服务器celery,高性能http服务器也是分体系的,有hapho、hwserver、celeryserver、slack之类的,但是就celeryserver来说,刚开始没必要考虑,hapho+hwserver+java+jetty构建健康管理系统,差不多也是上千块钱。
  两个关键字,一个是数据源,一个是计算资源。 查看全部

  php+hook,php服务端运维?一个高性能服务器
  php搜索引擎优化
  前端,node.js+vue等框架和hook等技术,
  提供一个分工比较细的行业,就是健康管理行业,医疗管理行业是目前比较火热的一个行业,很多公司都在做。php+hook+mongodb,
  php服务端运维?一个高性能服务器。在php中有数十万以上的模块,用hook、事件模拟然后markdown复制来运行就差不多。
  比如健康管理系统?php提供feed流的接口并且可以实现语言交互?
  健康管理行业的话,php服务端开发是很有必要的,如果是大的健康公司的话,可以考虑用健康管理系统来搭建自己的健康企业管理系统,如果是一般的小医院,或是医院已经有多套健康管理系统的话,
  健康管理需要稳定高性能的服务器,这里可以推荐一个好的性能http服务器celery,高性能http服务器也是分体系的,有hapho、hwserver、celeryserver、slack之类的,但是就celeryserver来说,刚开始没必要考虑,hapho+hwserver+java+jetty构建健康管理系统,差不多也是上千块钱。
  两个关键字,一个是数据源,一个是计算资源。

全文搜索引擎选ElasticSearch还是Solr?

网站优化优采云 发表了文章 • 0 个评论 • 91 次浏览 • 2022-06-03 11:00 • 来自相关话题

  全文搜索引擎选ElasticSearch还是Solr?
  “
  最近项目组安排了一个任务,项目中用到了基于Solr 的全文搜索,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步。
  
  而且它还是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的依赖查询都无结果数据了。
  所以考虑开发一个适配层,如果 Solr 搜索出问题,自动切换到新的搜索 ES。其实可以通过 Solr 集群或者服务容错等设计来解决该问题。
  但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始,因为之前完全没接触过 ES,所以通过本系列来记录下自己的开发过程。
  本篇文章的总体内容大致如下图:
  
  由 ReyCG 精心绘制并提供
  什么是全文搜索
  什么是全文搜索引擎?百度百科中的定义:
  全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
  从定义中我们已经可以大致了解全文检索的思路了,为了更详细的说明,我们先从生活中的数据说起。
  我们生活中的数据总体分为两种:
  当然有的地方还会有第三种:半结构化数据,如 XML,HTML 等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
  根据两种数据分类,搜索也相应的分为两种:结构化数据搜索和非结构化数据搜索。
  对于结构化数据,我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的 table 的方式存储和搜索,也可以建立索引。
  对于非结构化数据,也即对全文数据的搜索主要有两种方法:
  顺序扫描:通过文字名称也可了解到它的大概搜索方式,即按照顺序扫描的方式查询特定的关键字。
  例如给你一张报纸,让你找到该报纸中“RNG”的文字在哪些地方出现过。你肯定需要从头到尾把报纸阅读扫描一遍,然后标记出关键字在哪些版块出现过以及它的出现位置。
  这种方式无疑是最耗时的最低效的,如果报纸排版字体小,而且版块较多甚至有多份报纸,等你扫描完你的眼睛也差不多了。
  全文检索:对非结构化数据顺序扫描很慢,我们是否可以进行优化?把我们的非结构化数据想办法弄得有一定结构不就行了吗?
  将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
  这种方式就构成了全文检索的基本思路。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
  还以读报纸为例,我们想关注英雄联盟 S8 全球总决赛的新闻,假如都是 RNG 的粉丝,如何快速找到 RNG 新闻的报纸和版块呢?
  全文检索的方式就是,将所有报纸中所有版块中关键字进行提取,如"EDG","RNG","FW","战队","英雄联盟"等。
  然后对这些关键字建立索引,通过索引我们就可以对应到该关键词出现的报纸和版块。注意区别目录搜索引擎。
  为什么要用全文搜索搜索引擎
  之前,有同事问我,为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle、SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?
  确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过建数据库索引,优化 SQL 等方式提升效率,甚至通过引入缓存来加快数据的返回速度。
  如果数据量更大,就可以分库分表来分担查询压力。那为什么还要全文搜索引擎呢?我们主要从以下几个原因分析:
  数据类型
  全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。
  例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。
  对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
  索引的维护
  一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。
  进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。
  建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
  什么时候使用全文搜索引擎:
  Lucene,Solr,ElasticSearch ?
  现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。
  
  它们的索引建立都是根据倒排索引的方式生成索引,何谓倒排索引?
  维基百科:倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
  Lucene
  Lucene 是一个 Java 全文搜索引擎,完全用 Java 编写。Lucene 不是一个完整的应用程序,而是一个代码库和 API,可以很容易地用于向应用程序添加搜索功能。Lucene 通过简单的 API 提供强大的功能:
  可扩展的高性能索引:
  强大,准确,高效的搜索算法:
  跨平台解决方案:
  Apache 软件基金会:
  Solr
  Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台。它以用户友好的方式提供 Apache Lucene 的搜索功能。
  作为一个行业参与者已近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。
  它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。
  很多互联网巨头,如 Netflix,eBay,Instagram 和亚马逊(CloudSearch)都使用 Solr,因为它能够索引和搜索多个站点。
  主要功能列表包括:
  ElasticSearch
  Elasticsearch 是一个开源(Apache 2 许可证),基于 Apache Lucene 库构建的 RESTful 搜索引擎。
  Elasticsearch 是在 Solr 之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有 HTTP Web 界面(REST)和无架构 JSON 文档。
  Elasticsearch 的官方客户端库提供 Java,Groovy,PHP,Ruby,Perl,Python,.NET 和 Javascript。
  分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。
  每个 Elasticsearch 节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。
  Elasticsearch 可通过近实时搜索进行扩展。其主要功能之一是多租户。主要功能列表包括:
  Elasticsearch vs Solr 的选择
  由于 Lucene 的复杂性,一般很少会考虑它作为搜索的第一选择,排除一些公司需要自研搜索框架,底层需要依赖 Lucene。
  所以这里我们重点分析哪一个更好?它们有什么不同?你应该使用哪一个?
  
  历史比较
  Apache Solr 是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及 Apache 品牌。
  Solr 于 2006 年首次发布到开源,长期以来一直占据着搜索引擎领域,并且是任何需要搜索功能的人的首选引擎。
  它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索; 如分面,分组,强大的过滤,可插入的文档处理,可插入的搜索链组件,语言检测等。
  Solr 在搜索领域占据了多年的主导地位。然后,在 2010 年左右,Elasticsearch 成为市场上的另一种选择。
  那时候,它远没有 Solr 那么稳定,没有 Solr 的功能深度,没有思想分享,品牌等等。
  Elasticsearch 虽然很年轻,但它也自己的一些优势,Elasticsearch 建立在更现代的原则上,针对更现代的用例,并且是为了更容易处理大型索引和高查询率而构建的。
  此外,由于它太年轻,没有社区可以合作,它可以自由地向前推进,而不需要与其他人(用户或开发人员)达成任何共识或合作,向后兼容,或任何其他更成熟的软件通常必须处理。
  因此,它在 Solr 之前就公开了一些非常受欢迎的功能(例如,接近实时搜索,英文:Near Real-Time Search)。
  从技术上讲,NRT 搜索的能力确实来自 Lucene,它是 Solr 和 Elasticsearch 使用的基础搜索库。
  具有讽刺意味的是,因为 Elasticsearch 首先公开了 NRT 搜索,所以人们将 NRT 搜索与 Elasticsearch 联系在一起。
  尽管 Solr 和 Lucene 都是同一个 Apache 项目的一部分,但是,人们会首先期望 Solr 具有如此高要求的功能。
  特征差异比较
  这两个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 Lucene 构建的,但它们又是不同的。
  像所有东西一样,每个都有其优点和缺点,根据您的需求和期望,每个都可能更好或更差。
  Solr 和 Elasticsearch 都在快速发展,所以,话不多说,先来看下它们的差异清单:
   查看全部

  全文搜索引擎选ElasticSearch还是Solr?
  “
  最近项目组安排了一个任务,项目中用到了基于Solr 的全文搜索,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步。
  
  而且它还是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的依赖查询都无结果数据了。
  所以考虑开发一个适配层,如果 Solr 搜索出问题,自动切换到新的搜索 ES。其实可以通过 Solr 集群或者服务容错等设计来解决该问题。
  但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始,因为之前完全没接触过 ES,所以通过本系列来记录下自己的开发过程。
  本篇文章的总体内容大致如下图:
  
  由 ReyCG 精心绘制并提供
  什么是全文搜索
  什么是全文搜索引擎?百度百科中的定义:
  全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
  从定义中我们已经可以大致了解全文检索的思路了,为了更详细的说明,我们先从生活中的数据说起。
  我们生活中的数据总体分为两种:
  当然有的地方还会有第三种:半结构化数据,如 XML,HTML 等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。
  根据两种数据分类,搜索也相应的分为两种:结构化数据搜索和非结构化数据搜索。
  对于结构化数据,我们一般都是可以通过关系型数据库(MySQL,Oracle 等)的 table 的方式存储和搜索,也可以建立索引。
  对于非结构化数据,也即对全文数据的搜索主要有两种方法:
  顺序扫描:通过文字名称也可了解到它的大概搜索方式,即按照顺序扫描的方式查询特定的关键字。
  例如给你一张报纸,让你找到该报纸中“RNG”的文字在哪些地方出现过。你肯定需要从头到尾把报纸阅读扫描一遍,然后标记出关键字在哪些版块出现过以及它的出现位置。
  这种方式无疑是最耗时的最低效的,如果报纸排版字体小,而且版块较多甚至有多份报纸,等你扫描完你的眼睛也差不多了。
  全文检索:对非结构化数据顺序扫描很慢,我们是否可以进行优化?把我们的非结构化数据想办法弄得有一定结构不就行了吗?
  将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。
  这种方式就构成了全文检索的基本思路。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
  还以读报纸为例,我们想关注英雄联盟 S8 全球总决赛的新闻,假如都是 RNG 的粉丝,如何快速找到 RNG 新闻的报纸和版块呢?
  全文检索的方式就是,将所有报纸中所有版块中关键字进行提取,如"EDG","RNG","FW","战队","英雄联盟"等。
  然后对这些关键字建立索引,通过索引我们就可以对应到该关键词出现的报纸和版块。注意区别目录搜索引擎。
  为什么要用全文搜索搜索引擎
  之前,有同事问我,为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle、SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?
  确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过建数据库索引,优化 SQL 等方式提升效率,甚至通过引入缓存来加快数据的返回速度。
  如果数据量更大,就可以分库分表来分担查询压力。那为什么还要全文搜索引擎呢?我们主要从以下几个原因分析:
  数据类型
  全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。
  例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。
  对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。
  索引的维护
  一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。
  进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。
  建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
  什么时候使用全文搜索引擎:
  Lucene,Solr,ElasticSearch ?
  现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。
  
  它们的索引建立都是根据倒排索引的方式生成索引,何谓倒排索引?
  维基百科:倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
  Lucene
  Lucene 是一个 Java 全文搜索引擎,完全用 Java 编写。Lucene 不是一个完整的应用程序,而是一个代码库和 API,可以很容易地用于向应用程序添加搜索功能。Lucene 通过简单的 API 提供强大的功能:
  可扩展的高性能索引:
  强大,准确,高效的搜索算法:
  跨平台解决方案:
  Apache 软件基金会:
  Solr
  Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台。它以用户友好的方式提供 Apache Lucene 的搜索功能。
  作为一个行业参与者已近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。
  它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。
  很多互联网巨头,如 Netflix,eBay,Instagram 和亚马逊(CloudSearch)都使用 Solr,因为它能够索引和搜索多个站点。
  主要功能列表包括:
  ElasticSearch
  Elasticsearch 是一个开源(Apache 2 许可证),基于 Apache Lucene 库构建的 RESTful 搜索引擎。
  Elasticsearch 是在 Solr 之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有 HTTP Web 界面(REST)和无架构 JSON 文档。
  Elasticsearch 的官方客户端库提供 Java,Groovy,PHP,Ruby,Perl,Python,.NET 和 Javascript。
  分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。
  每个 Elasticsearch 节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。
  Elasticsearch 可通过近实时搜索进行扩展。其主要功能之一是多租户。主要功能列表包括:
  Elasticsearch vs Solr 的选择
  由于 Lucene 的复杂性,一般很少会考虑它作为搜索的第一选择,排除一些公司需要自研搜索框架,底层需要依赖 Lucene。
  所以这里我们重点分析哪一个更好?它们有什么不同?你应该使用哪一个?
  
  历史比较
  Apache Solr 是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及 Apache 品牌。
  Solr 于 2006 年首次发布到开源,长期以来一直占据着搜索引擎领域,并且是任何需要搜索功能的人的首选引擎。
  它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索; 如分面,分组,强大的过滤,可插入的文档处理,可插入的搜索链组件,语言检测等。
  Solr 在搜索领域占据了多年的主导地位。然后,在 2010 年左右,Elasticsearch 成为市场上的另一种选择。
  那时候,它远没有 Solr 那么稳定,没有 Solr 的功能深度,没有思想分享,品牌等等。
  Elasticsearch 虽然很年轻,但它也自己的一些优势,Elasticsearch 建立在更现代的原则上,针对更现代的用例,并且是为了更容易处理大型索引和高查询率而构建的。
  此外,由于它太年轻,没有社区可以合作,它可以自由地向前推进,而不需要与其他人(用户或开发人员)达成任何共识或合作,向后兼容,或任何其他更成熟的软件通常必须处理。
  因此,它在 Solr 之前就公开了一些非常受欢迎的功能(例如,接近实时搜索,英文:Near Real-Time Search)。
  从技术上讲,NRT 搜索的能力确实来自 Lucene,它是 Solr 和 Elasticsearch 使用的基础搜索库。
  具有讽刺意味的是,因为 Elasticsearch 首先公开了 NRT 搜索,所以人们将 NRT 搜索与 Elasticsearch 联系在一起。
  尽管 Solr 和 Lucene 都是同一个 Apache 项目的一部分,但是,人们会首先期望 Solr 具有如此高要求的功能。
  特征差异比较
  这两个搜索引擎都是流行的,先进的的开源搜索引擎。它们都是围绕核心底层搜索库 Lucene 构建的,但它们又是不同的。
  像所有东西一样,每个都有其优点和缺点,根据您的需求和期望,每个都可能更好或更差。
  Solr 和 Elasticsearch 都在快速发展,所以,话不多说,先来看下它们的差异清单:
  

为梦想,搜未来——网页搜索篇

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2022-06-02 22:30 • 来自相关话题

  为梦想,搜未来——网页搜索篇
  亲爱的小伙伴,即日起小编会针对搜狗不同的产品线给各位小伙伴进行详细介绍和专场招聘,这算不算小编发的福利呢?不要太感谢我哦!请小伙伴届时多多关注哦!
  经常上网的小伙伴们对网页搜索这个产品一定不会陌生,“她是谁呢?”
  
  下面小编就爆料一下我们的当家花旦——网页搜索部,首先她是搜狗最早成立的部门,也是最为核心的部门之一,她是搜狗营收的主要来源之一。“那么她的任务是什么呢?”“她承载PC及WAP的网页搜索PC、无线,服务于数亿中国网民的需求。”“她怎么样啊?求介绍。”“她有浓郁的技术气息和宽松的团队氛围,广阔的发展空间也能让你一展身手,快速成长为可以独步互联网江湖的英雄好汉。
  
  “她的家庭成员都有哪些?”“她家有三宝——研究智囊团、开发极客屋和智多星产品狗。
  在研究团队,你可以接触数亿的用户,海量的数据,支撑大规模计算的硬件平台,为你施展技术才能提供了最广阔的平台。她家有最逼格的技术挑战,有最牛的技术极客,还有最high的技术氛围。在这里与众多牛人们一起玩转大数据、人工智能、自然语言处理、机器学习,用最前沿的技术解决最具挑战的任务,帮助用户从海量互联网信息中找到最想要的信息。
  在开发极客屋里,她家每天会迎来数千万的用户,有数亿的查询请求,你的程序无时无刻不在经受着洪水般的压力,可能会面对各种灵异事件,使你能够饱受磨练快速成长;在这里你可以接触到互联网最前沿的技术,互联网最牛的人才。
  在产品团队,你能紧密地对接技术团队,推动对内和对外的项目合作,全面细致地了解搜索引擎技术和用户需求,为搜狗的搜索品质保驾护航,也能深入地了解互联网生态体系。在这里,我们还可以一起探索社交搜索和知识图谱,让搜索变得更有趣与更智慧。”小伙伴们,小编能帮你们的只有这么多了!你还在等什么呢?来,快点投入我们的怀抱!我的家庭需要你!和智慧女神雅典娜在一起吧。
  下面小编就将网页搜索的热招职位share给大伙伴们,希望能够给大家些许帮助哦!
  搜索事业部-机器学习排序研究员(网页搜索)-北京-00522
  岗位职责:
  负责网页搜索机器学习排序算法的研发,优化排序特征使用和排序模型,提升网页搜索相关性效果。
  任职条件:
  1. 硕士以上计算机相关学历,在机器学习、信息检索、数据挖掘等领域有2年以上研究经历,有LTR研究背景者优先
  2. 熟悉Linux开发环境,熟练掌握一门高级语言,如C/C++、Java,熟练掌握至少一种脚本语言
  3. 掌握基本的数据结构和常用算法,有较强的分析和解决问题的能力
  4. 善于学习新事物,善于沟通和表达,对互联网搜索技术研究有浓厚兴趣,有良好的团队合作意识
  搜索事业部-产品经理(网页搜索开放平台)-北京-00022
  岗位职责:
  1、搜狗网页搜索开放平台用户类产品的发起、迭代、落实执行;
  2、保证对应产品项目的召回、精度等产品效果,能够通过产品标准和数据指标管理产品质量;
  3、负责对应的产品大类产品线、运营线接口,负责协调和沟通工作;
  4、对现有用户产品线进行统筹安排,确认优先级;
  5、制定开放平台用户类产品所负责大类中期以上计划并自行驱动执行;
  任职条件:
  1、具有搜索引擎开放平台类产品经验最佳,需要3年以上产品经验;
  能够有原则的建立产品标准,具有制定计划和汇报进度的能力;
  2、善于沟通,能够控制情绪;
  3、能够承担和负责该方向的产品KPI,抗压能力强;
  4、有一定的管理经验,能够快速培训运营同学接手相关执行标准;
  搜索事业部-反作弊策略工程师-北京-00466
  岗位职责:
  1、负责问问、百科等社区类产品反作弊系统,提升社区内容质量,维护内容安全
  2、通过海量数据,分析与挖掘各种潜在关联,从而不断优化反作弊效果,更好地识别作弊用户
  任职条件:
  1. 计算机相关专业背景,
  2. 熟悉C++,C语言,熟悉linuxshell,
  3. 熟练掌握基础数据结构和常见算法,
  4. 熟悉linux操作系统,
  5. 有linux下c/c++编程经验,
  6. 最好有NLP、数据挖掘、机器学习背景,
  7. 有反作弊工作经验最佳
  搜索事业部-前端开发工程师(网页搜索)-北京-00028
  岗位职责:
  1.根据产品原型开发前端代码;
  2.解决主流浏览器及其不同版本之间的兼容性问题;
  3.优化网站的前端性能,保证网站的高质高速。
  任职条件:
  1.有3年以上前端工作经验;
  2.精通Web前端技术基础,有JavaScript高级应用经验者尤佳;
  3.精通Java语言,并有实际将其和前端语言进行配合的项目经验;
  4.熟悉linux系统,有perl、shell、python等脚本处理经验;
  5.有团队精神,充满激情,乐于接受挑战;
  6.专业不限,其中计算机、数学、自动化等相关专业优先考虑。
  搜索事业部-C++开发工程师(网页搜索)-北京-00018
  岗位职责:
  1.检索系统架构设计及开发;
  2.新技术的预研和应用。
  任职条件:
  1.基础扎实,熟练掌握C/C++语言,3年以上Linux环境开发经验;
  2.熟悉TCP/IP、HTTP等网络协议,精通socket网络编程,有大访问量高压力程序开发经验;
  3.熟练掌握常用数据结构和算法,并能灵活运用;
  4.熟悉Linux系统,熟练掌握shell、awk、python等脚本工具;
  5.能承担较大工作压力,有较强独立分析,解决问题的能力;
  6.逻辑思维清晰,良好的文字和语言沟通表达能力,有良好的团队合作精神。
  搜索事业部-JAVA Web开发工程师-北京-00020
  岗位职责:
  1.负责无线web前端的开发工作;
  2.负责web前端系统分析、优化与架构工作;
  任职条件:
  1.有两年以上Web开发经验;
  2.精通各种Web前端技术基础:(x)HTML、CSS、JavaScript,有JavaScript高级应用经验的尤佳;
  3.熟悉java/jsp/servlet编程,了解linux/shell编程;
  4.有团队精神,充满激情,乐于接受挑战;
  5.有无线Web开发经验优先;
  搜索事业部-php web开发工程师-北京-00299
  岗位职责:
  1、网页搜索前端页面的设计和开发工作
  2、管理平台的设计和开发工作
  任职条件:
  1. 计算机或相关专业本科以上学历,2年或以上相关开发经验;
  2. 精通HTML/CSS/JAVASCRIPT的使用;
  3. 精通PHP,具备在linux平台下使用php开发网站的经验;
  4. 熟悉面向对象的php开发;
  5. 有丰富的Mysql开发和优化经验;
  6. 有成功网站开发案例(网站日PV在100万以上优先考虑);
  7. 有良好的团队合作能力,善于沟通,热爱开发事业。
  如果您对我们的职位感兴趣,请发送简历至
  主题为姓名+工作年限+现职位+申请职位(带编号)
  例如:张三+3年+PHP开发+搜索事业部-php web开发工程师-北京-00299
  更多职位浏览请点击 查看全部

  为梦想,搜未来——网页搜索篇
  亲爱的小伙伴,即日起小编会针对搜狗不同的产品线给各位小伙伴进行详细介绍和专场招聘,这算不算小编发的福利呢?不要太感谢我哦!请小伙伴届时多多关注哦!
  经常上网的小伙伴们对网页搜索这个产品一定不会陌生,“她是谁呢?”
  
  下面小编就爆料一下我们的当家花旦——网页搜索部,首先她是搜狗最早成立的部门,也是最为核心的部门之一,她是搜狗营收的主要来源之一。“那么她的任务是什么呢?”“她承载PC及WAP的网页搜索PC、无线,服务于数亿中国网民的需求。”“她怎么样啊?求介绍。”“她有浓郁的技术气息和宽松的团队氛围,广阔的发展空间也能让你一展身手,快速成长为可以独步互联网江湖的英雄好汉。
  
  “她的家庭成员都有哪些?”“她家有三宝——研究智囊团、开发极客屋和智多星产品狗。
  在研究团队,你可以接触数亿的用户,海量的数据,支撑大规模计算的硬件平台,为你施展技术才能提供了最广阔的平台。她家有最逼格的技术挑战,有最牛的技术极客,还有最high的技术氛围。在这里与众多牛人们一起玩转大数据、人工智能、自然语言处理、机器学习,用最前沿的技术解决最具挑战的任务,帮助用户从海量互联网信息中找到最想要的信息。
  在开发极客屋里,她家每天会迎来数千万的用户,有数亿的查询请求,你的程序无时无刻不在经受着洪水般的压力,可能会面对各种灵异事件,使你能够饱受磨练快速成长;在这里你可以接触到互联网最前沿的技术,互联网最牛的人才。
  在产品团队,你能紧密地对接技术团队,推动对内和对外的项目合作,全面细致地了解搜索引擎技术和用户需求,为搜狗的搜索品质保驾护航,也能深入地了解互联网生态体系。在这里,我们还可以一起探索社交搜索和知识图谱,让搜索变得更有趣与更智慧。”小伙伴们,小编能帮你们的只有这么多了!你还在等什么呢?来,快点投入我们的怀抱!我的家庭需要你!和智慧女神雅典娜在一起吧。
  下面小编就将网页搜索的热招职位share给大伙伴们,希望能够给大家些许帮助哦!
  搜索事业部-机器学习排序研究员(网页搜索)-北京-00522
  岗位职责:
  负责网页搜索机器学习排序算法的研发,优化排序特征使用和排序模型,提升网页搜索相关性效果。
  任职条件:
  1. 硕士以上计算机相关学历,在机器学习、信息检索、数据挖掘等领域有2年以上研究经历,有LTR研究背景者优先
  2. 熟悉Linux开发环境,熟练掌握一门高级语言,如C/C++、Java,熟练掌握至少一种脚本语言
  3. 掌握基本的数据结构和常用算法,有较强的分析和解决问题的能力
  4. 善于学习新事物,善于沟通和表达,对互联网搜索技术研究有浓厚兴趣,有良好的团队合作意识
  搜索事业部-产品经理(网页搜索开放平台)-北京-00022
  岗位职责:
  1、搜狗网页搜索开放平台用户类产品的发起、迭代、落实执行;
  2、保证对应产品项目的召回、精度等产品效果,能够通过产品标准和数据指标管理产品质量;
  3、负责对应的产品大类产品线、运营线接口,负责协调和沟通工作;
  4、对现有用户产品线进行统筹安排,确认优先级;
  5、制定开放平台用户类产品所负责大类中期以上计划并自行驱动执行;
  任职条件:
  1、具有搜索引擎开放平台类产品经验最佳,需要3年以上产品经验;
  能够有原则的建立产品标准,具有制定计划和汇报进度的能力;
  2、善于沟通,能够控制情绪;
  3、能够承担和负责该方向的产品KPI,抗压能力强;
  4、有一定的管理经验,能够快速培训运营同学接手相关执行标准;
  搜索事业部-反作弊策略工程师-北京-00466
  岗位职责:
  1、负责问问、百科等社区类产品反作弊系统,提升社区内容质量,维护内容安全
  2、通过海量数据,分析与挖掘各种潜在关联,从而不断优化反作弊效果,更好地识别作弊用户
  任职条件:
  1. 计算机相关专业背景,
  2. 熟悉C++,C语言,熟悉linuxshell,
  3. 熟练掌握基础数据结构和常见算法,
  4. 熟悉linux操作系统,
  5. 有linux下c/c++编程经验,
  6. 最好有NLP、数据挖掘、机器学习背景,
  7. 有反作弊工作经验最佳
  搜索事业部-前端开发工程师(网页搜索)-北京-00028
  岗位职责:
  1.根据产品原型开发前端代码;
  2.解决主流浏览器及其不同版本之间的兼容性问题;
  3.优化网站的前端性能,保证网站的高质高速。
  任职条件:
  1.有3年以上前端工作经验;
  2.精通Web前端技术基础,有JavaScript高级应用经验者尤佳;
  3.精通Java语言,并有实际将其和前端语言进行配合的项目经验;
  4.熟悉linux系统,有perl、shell、python等脚本处理经验;
  5.有团队精神,充满激情,乐于接受挑战;
  6.专业不限,其中计算机、数学、自动化等相关专业优先考虑。
  搜索事业部-C++开发工程师(网页搜索)-北京-00018
  岗位职责:
  1.检索系统架构设计及开发;
  2.新技术的预研和应用。
  任职条件:
  1.基础扎实,熟练掌握C/C++语言,3年以上Linux环境开发经验;
  2.熟悉TCP/IP、HTTP等网络协议,精通socket网络编程,有大访问量高压力程序开发经验;
  3.熟练掌握常用数据结构和算法,并能灵活运用;
  4.熟悉Linux系统,熟练掌握shell、awk、python等脚本工具;
  5.能承担较大工作压力,有较强独立分析,解决问题的能力;
  6.逻辑思维清晰,良好的文字和语言沟通表达能力,有良好的团队合作精神。
  搜索事业部-JAVA Web开发工程师-北京-00020
  岗位职责:
  1.负责无线web前端的开发工作;
  2.负责web前端系统分析、优化与架构工作;
  任职条件:
  1.有两年以上Web开发经验;
  2.精通各种Web前端技术基础:(x)HTML、CSS、JavaScript,有JavaScript高级应用经验的尤佳;
  3.熟悉java/jsp/servlet编程,了解linux/shell编程;
  4.有团队精神,充满激情,乐于接受挑战;
  5.有无线Web开发经验优先;
  搜索事业部-php web开发工程师-北京-00299
  岗位职责:
  1、网页搜索前端页面的设计和开发工作
  2、管理平台的设计和开发工作
  任职条件:
  1. 计算机或相关专业本科以上学历,2年或以上相关开发经验;
  2. 精通HTML/CSS/JAVASCRIPT的使用;
  3. 精通PHP,具备在linux平台下使用php开发网站的经验;
  4. 熟悉面向对象的php开发;
  5. 有丰富的Mysql开发和优化经验;
  6. 有成功网站开发案例(网站日PV在100万以上优先考虑);
  7. 有良好的团队合作能力,善于沟通,热爱开发事业。
  如果您对我们的职位感兴趣,请发送简历至
  主题为姓名+工作年限+现职位+申请职位(带编号)
  例如:张三+3年+PHP开发+搜索事业部-php web开发工程师-北京-00299
  更多职位浏览请点击

5个提升搜索引擎排名的小技巧

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-05-30 00:16 • 来自相关话题

  5个提升搜索引擎排名的小技巧
  5个提升搜索引擎排名的小技巧
  很多站长容易忽视的几个改善搜索引擎排名的小技巧,谷歌大叔在这里跟大家分享一下。
  1)页面的标题要能清楚的说明你是干什么的或者你提供什么产品及服务。标题中应该包含潜在客户在搜索引擎中搜索你的产品或服务时会使用的关键词。并且为网站上的每个页面设计不同的标题。
  2)页面的元描述(meta description,在网页源码中显示为)要设计为关于站点或者页面的简短概述,组合与页面内容相关的关键词,使用一些激励性的语句,鼓励访客进入页面浏览内容。
  3)在页面内容的开始处(body内),要有一个内容标题,应该使用正确的Html标题标签,如:h1、h2、h3等。内容标题要尽量与页面标题吻合,可以是一样的。比如:页面的标题是“3015型光纤激光切割机”。在页面内容(body)的起始处,可以加入一级标题“3015型光纤激光切割机”,html源码是”3015型光纤激光切割机”。二级标题,三级标题等原理相同。
  4)巧用网页文件名
  如果您使用的内容管理系统(CMS也可以理解为网站后台)支持生成静态页面并且可以设定文件名,将对您后期搜索引擎优化提供极大的便利和优势。在为网页文件命名时,尽量避免使用frontpage.html或者page1.html等对搜索引擎不友好的文件名。尽量使用关键词组合等友好的文件名。例如:WNT224型动物饲料颗粒机.html
  备注:不要修改index.htm、index.html、index.php、default.asp等系统默认页面文件名。
  5)让搜索引擎(蜘蛛)读懂页面上的图片。
  为您上传的每一张图片编写alt属性。所有的主流搜索引擎对文本内容的识别能力是比较好的,但为图片、音频、视频等多媒体文件不能很好的识别。对于我们日常发布内容时大量使用的图片,搜索引擎主要通过alt属性来识别,因此仔细科学的利用alt属性将为您带来意外的惊喜。大多数内容管理系统(CMS也可以理解为网站后台)都支持编辑Html源代码。图片的源代码示例:
  
  那么,如何编写高质量的alt属性呢?建议用简短的问题说明图片内容。如上例中说明图片的内容为“三峡大坝”。这样,搜索引擎蜘蛛在抓取时就认为这张图片是关于三峡大坝的。
  此外,图片的文件名对搜索引擎蜘蛛也是一个强有力的信号,因此,图片的文件名也不可随意。
  以上5点小技巧,如果您能坚持操作,相信能为改善您站点的自然搜索排名产生很有利的影响。
  原文:个提升搜索引擎排名的小技巧/
  环新网络
  主营业务:外贸网站建设、外贸网站优化(外贸seo)、谷歌竞价、外贸SNS、B2B平台推广、EDM营销等 查看全部

  5个提升搜索引擎排名的小技巧
  5个提升搜索引擎排名的小技巧
  很多站长容易忽视的几个改善搜索引擎排名的小技巧,谷歌大叔在这里跟大家分享一下。
  1)页面的标题要能清楚的说明你是干什么的或者你提供什么产品及服务。标题中应该包含潜在客户在搜索引擎中搜索你的产品或服务时会使用的关键词。并且为网站上的每个页面设计不同的标题。
  2)页面的元描述(meta description,在网页源码中显示为)要设计为关于站点或者页面的简短概述,组合与页面内容相关的关键词,使用一些激励性的语句,鼓励访客进入页面浏览内容。
  3)在页面内容的开始处(body内),要有一个内容标题,应该使用正确的Html标题标签,如:h1、h2、h3等。内容标题要尽量与页面标题吻合,可以是一样的。比如:页面的标题是“3015型光纤激光切割机”。在页面内容(body)的起始处,可以加入一级标题“3015型光纤激光切割机”,html源码是”3015型光纤激光切割机”。二级标题,三级标题等原理相同。
  4)巧用网页文件名
  如果您使用的内容管理系统(CMS也可以理解为网站后台)支持生成静态页面并且可以设定文件名,将对您后期搜索引擎优化提供极大的便利和优势。在为网页文件命名时,尽量避免使用frontpage.html或者page1.html等对搜索引擎不友好的文件名。尽量使用关键词组合等友好的文件名。例如:WNT224型动物饲料颗粒机.html
  备注:不要修改index.htm、index.html、index.php、default.asp等系统默认页面文件名。
  5)让搜索引擎(蜘蛛)读懂页面上的图片。
  为您上传的每一张图片编写alt属性。所有的主流搜索引擎对文本内容的识别能力是比较好的,但为图片、音频、视频等多媒体文件不能很好的识别。对于我们日常发布内容时大量使用的图片,搜索引擎主要通过alt属性来识别,因此仔细科学的利用alt属性将为您带来意外的惊喜。大多数内容管理系统(CMS也可以理解为网站后台)都支持编辑Html源代码。图片的源代码示例:
  
  那么,如何编写高质量的alt属性呢?建议用简短的问题说明图片内容。如上例中说明图片的内容为“三峡大坝”。这样,搜索引擎蜘蛛在抓取时就认为这张图片是关于三峡大坝的。
  此外,图片的文件名对搜索引擎蜘蛛也是一个强有力的信号,因此,图片的文件名也不可随意。
  以上5点小技巧,如果您能坚持操作,相信能为改善您站点的自然搜索排名产生很有利的影响。
  原文:个提升搜索引擎排名的小技巧/
  环新网络
  主营业务:外贸网站建设、外贸网站优化(外贸seo)、谷歌竞价、外贸SNS、B2B平台推广、EDM营销等

实现一个自己的搜索引擎的初始规划(2017版)

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-05-20 18:49 • 来自相关话题

  实现一个自己的搜索引擎的初始规划(2017版)
  在想自己和刚毕业的时候处理问题有什么不同。刚毕业的时候如果想卸载停用什么东西提示说正在使用,我就去找个强力卸载软件。如果我想清理浏览器缓存,会直接用工具,如果想找到缓存路径选择性的清理,会百度一下这个浏览器的默认缓存路径在哪里。现在,我会打开资源监视器查看磁盘活动,对文件,找到使用文件的进程;对应用,找到它在读写的文件路径。
  
  现在接口服务组的性能卡在memcahe缓存上。对于缓存的过渡依赖,而且为了维护这个缓存数据,业务流程的复杂性大大提高。其实本身接口这块业务流程是很简单的,只是要求承担很大的并发量。要高并发,业务就更得简单。nginx服务单台机器号称能承载10亿的并发,为啥?逻辑简单啊,就是按照规则找到对应的处理服务,将请求转发过去。
  前段时间接了个私活。话说这一年多的时间还真干了不少事情,干过私活创过业的。业务就是创建一个带支付的途家+携程。刚拿到活儿,因为是php的,我又不会php,愁死了。因为是男票帮忙接的活儿。我就说是男票把我给卖了。确实是,他接活儿,但是自己看都不看一眼,只负责拿钱。我自己啥都没有,还怕做不好坏了男票的名声。本来人家预算是2w的,我说这个得5w。最后给了3w。1个月时间确实是搞定了。总结一下,这个从UI设计到编码测试只有我一个人的项目,就前端JS样式这一样,别人也很难做的很快。我之所以能做的很快,综合能力是一方面,最重要的原因是:业务逻辑理的顺,包括支付,结算,后台给商家打款,统计分析。业务逻辑划分的清楚,做起来工作量就没有那么大。话说男票给我接私活这事儿,我嘴里是埋怨的,心里很清楚:他之所以给我接这个活儿是因为我想做。他并不是为了钱,是真心知道我想要什么。而我嘴上的埋怨也只是因为一时的辛苦发泄一下而已。这埋怨也是笑着埋怨的,谁也没当回事情。在日本的时候看过一个日文版的韩国水木连续剧,真伊有两个爱她超过爱自己的母亲。她的生母和老师。生母拼其一生想让真伊得到爱,老师拼其一生想让真伊得到痛。因为痛是才艺的源泉。恩浩注定不能和真伊在一起,因为他的软弱。爱一个不对的人,心就像是浮萍,漂泊探索一无所获。看破看不破,终究是寂寞。真伊与正翰的爱感化了所有人,而真伊终究也没与正翰白首不相离。而爱一个对的人,他们的经历是别人所不能比的,他们最终心里都是踏实的。真伊为才艺而生,正翰为天下而活。这才是他们的平静与归宿。不像真伊那般有才,也不像真伊那般命苦。过着幸福的小生活,做着自己想做的事,吾复何求。
  又想到离线数据那个小项目,在想之前跑全量只是取ID都要跑四个小时,我写的程序只要20多分钟,为啥呢,最重要的原因也是划分的清楚。人家问我这个项目用到了哪些线程之间共享资源的地方,我说:这里面有个AtomicInteger作为线程计数器算不算,我需要计算是不是所有的线程都是正常跑完终止的。其他的共享资源我都放到一个类里面了,但是Map我就是用的HashMap,也没用到ConcurrentHashMap,话说咱也是知道并发包里的各种并发容器的原理的。但是业务逻辑划分清楚了,我能保证写HashMap的时候,只有一个线程在访问,我没有必要非要用并发啊。所有的线程最终要生成全量文件,我用几百个线程,每个线程生成一个文件,各自读写打包压缩,各不干扰,当然要比给文件加锁,等待写操作快得多。话说这个技巧也已经被用的很多了,lucene的添加索引就是这么干的。
  上周开会的时候,我突然想到(其实之前早就想到了,但是每次说都没人搭理,就过去了),媒资接口高并发的地方都是根据各种条件取数据,其他的程序都是为了维护这份数据服务的,维护数据很复杂。除了接业务线的消息,还有自己的数据库和缓存对比补数据的。将来,因为联通和电信要做物理隔离,隔离后还需要一个写缓存的统一监控专门负责给业务线返回更新消息,数据补偿的。然而所有的这些复杂逻辑,一个搜索引擎全能搞定。
  之所以我之前提议没人搭理,分析其原因:我们目前的组内搜索引擎做的不好,大家只会用最简单的功能。而我并没向大家完整介绍过搜索引擎都能干什么,而且我自己什么都没有做。阳哥自己搭建了一套redis来做日志的统一收集,我受到启发。现在,我有服务器,熟悉java底层和算法,搭建一套适合中国人用的搜索引擎又是我一直以来的心愿,现在又有业务场景需要用,干嘛不自己做一套。之前离开人人之后看过王志亮写的庖丁jade的源码,觉得自己也是可以做这么一套框架的,况且只是一个持久层框架,原理非常清晰明了。果然,来到乐视看到了和庖丁jade非常像的mango框架。如果现在我不研发这么一套专门应用场景的,适合中文分词的,非常合适作为列表缓存的搜索引擎框架出来,过两年肯定会有人比我先发布的,因为确实是很有应用场景的。
  先说为什么接口服务要用搜索引擎。搜索引擎可以支持高并发,之前用过基于lucene的solr搜索引擎,可以支持单台上万的并发。它是有多少内存就可以吃掉多少内存的,将集中式缓存的以空间换时间用到了极致。接口服务只更新缓存,不更新DB。如果换做搜索引擎,搜索引擎每分钟从数据库的从库中读取数据,对数据库基本没压力。业务线给我们发消息,我更新完缓存再返回消息也需要好几分钟。用搜索引擎实时性会更高。业务逻辑简单,现在接口服务用到了庞大的SOA架构,逻辑复杂,响应时间长。用搜索引擎,只需要一个接口服务调用搜索引擎搞定所有事情。搜索引擎内的数据高度结构化,可以添加复杂的条件,函数,分组,排序,实际上也是在JVM内完成的,直接和内存中数据交互。速度快太多了。接口服务目前的瓶颈在缓存上(必须在缓存上啊,整个都在和缓存打交道),经常性的缓存返回数据时间长。多个键值的时候mget性能差,还很容易堵塞,影响到整个服务。目前能采用的措施就是将一部分任务转给DB,另外考虑将memcache换成Redis缓存。不管是memcache还是redis,都不合适这种动辄就100K以上的大数据的情况。键值对的缓存最佳应用场景都应该是key和value体积都是极小的。所以我们现在的尝试其实都不解决本质问题。用的dubbo做的RPC调用也有问题,dubbo有自己的bug,一旦遇到就很头大。增加这层dubbo,增加了通讯开销和系统复杂性,实际性的好处却没得到发挥。而搜索引擎本身就是为大数据而生,大数据量,大数据体,高并发,而且对于这种多维查询,是搜索引擎最合适的用武之地。搜索引擎也可以单独作为RPC的被调用方,直接给其他业务线用。我们甚至可以将接口服务接收请求接口层都去掉,接口服务只有一个搜索引擎。德伟最头疼的部署问题迎刃而解。
  最最重要的原因,搜索引擎是基于全文索引的,目前的搜索模型纯波尔模型,向量空间模型,概率模型都是不适合像媒资这种主要是ID列表查询的。相应的,搜索引擎的分析工具的侧重面也是不合适媒资这样的业务场景的。
  来看接口服务目前的架构:
  很复杂且不合理,需要很多的优化。其中还用到了Falcon监控平台和美团点评的CAT监控。数据库更新目前要通知ES搜索引擎,通知缓存,通知业务线。
  换用搜索引擎之后的架构:
  
  就是这么简单,要不是为了保持目前的对外接口不变,接口api都可以不要。
  搜索引擎自己集成日志,监控。想要调试也只要输入参数,内部处理过程可以一目了然。从实现上,包装lucene做一个平台即可。较其他搜索引擎优化的点:着重提高根据ID维度作为查询条件的有序输出,将接口的常用操作函数化,使其适合作为接口服务。将solr中不合适中文分词的词根化等环节去掉,加强中文特有的拼音,近义词的搜索(等后续有时间时优化)。集成jvm,内存,cpu的日志,监控和报警,部署方便。初始不需要做太多,以后根据业务场景需要慢慢优化。其实我是要尝试使用自己的算法的,自认才疏学浅,没好意思说。 查看全部

  实现一个自己的搜索引擎的初始规划(2017版)
  在想自己和刚毕业的时候处理问题有什么不同。刚毕业的时候如果想卸载停用什么东西提示说正在使用,我就去找个强力卸载软件。如果我想清理浏览器缓存,会直接用工具,如果想找到缓存路径选择性的清理,会百度一下这个浏览器的默认缓存路径在哪里。现在,我会打开资源监视器查看磁盘活动,对文件,找到使用文件的进程;对应用,找到它在读写的文件路径。
  
  现在接口服务组的性能卡在memcahe缓存上。对于缓存的过渡依赖,而且为了维护这个缓存数据,业务流程的复杂性大大提高。其实本身接口这块业务流程是很简单的,只是要求承担很大的并发量。要高并发,业务就更得简单。nginx服务单台机器号称能承载10亿的并发,为啥?逻辑简单啊,就是按照规则找到对应的处理服务,将请求转发过去。
  前段时间接了个私活。话说这一年多的时间还真干了不少事情,干过私活创过业的。业务就是创建一个带支付的途家+携程。刚拿到活儿,因为是php的,我又不会php,愁死了。因为是男票帮忙接的活儿。我就说是男票把我给卖了。确实是,他接活儿,但是自己看都不看一眼,只负责拿钱。我自己啥都没有,还怕做不好坏了男票的名声。本来人家预算是2w的,我说这个得5w。最后给了3w。1个月时间确实是搞定了。总结一下,这个从UI设计到编码测试只有我一个人的项目,就前端JS样式这一样,别人也很难做的很快。我之所以能做的很快,综合能力是一方面,最重要的原因是:业务逻辑理的顺,包括支付,结算,后台给商家打款,统计分析。业务逻辑划分的清楚,做起来工作量就没有那么大。话说男票给我接私活这事儿,我嘴里是埋怨的,心里很清楚:他之所以给我接这个活儿是因为我想做。他并不是为了钱,是真心知道我想要什么。而我嘴上的埋怨也只是因为一时的辛苦发泄一下而已。这埋怨也是笑着埋怨的,谁也没当回事情。在日本的时候看过一个日文版的韩国水木连续剧,真伊有两个爱她超过爱自己的母亲。她的生母和老师。生母拼其一生想让真伊得到爱,老师拼其一生想让真伊得到痛。因为痛是才艺的源泉。恩浩注定不能和真伊在一起,因为他的软弱。爱一个不对的人,心就像是浮萍,漂泊探索一无所获。看破看不破,终究是寂寞。真伊与正翰的爱感化了所有人,而真伊终究也没与正翰白首不相离。而爱一个对的人,他们的经历是别人所不能比的,他们最终心里都是踏实的。真伊为才艺而生,正翰为天下而活。这才是他们的平静与归宿。不像真伊那般有才,也不像真伊那般命苦。过着幸福的小生活,做着自己想做的事,吾复何求。
  又想到离线数据那个小项目,在想之前跑全量只是取ID都要跑四个小时,我写的程序只要20多分钟,为啥呢,最重要的原因也是划分的清楚。人家问我这个项目用到了哪些线程之间共享资源的地方,我说:这里面有个AtomicInteger作为线程计数器算不算,我需要计算是不是所有的线程都是正常跑完终止的。其他的共享资源我都放到一个类里面了,但是Map我就是用的HashMap,也没用到ConcurrentHashMap,话说咱也是知道并发包里的各种并发容器的原理的。但是业务逻辑划分清楚了,我能保证写HashMap的时候,只有一个线程在访问,我没有必要非要用并发啊。所有的线程最终要生成全量文件,我用几百个线程,每个线程生成一个文件,各自读写打包压缩,各不干扰,当然要比给文件加锁,等待写操作快得多。话说这个技巧也已经被用的很多了,lucene的添加索引就是这么干的。
  上周开会的时候,我突然想到(其实之前早就想到了,但是每次说都没人搭理,就过去了),媒资接口高并发的地方都是根据各种条件取数据,其他的程序都是为了维护这份数据服务的,维护数据很复杂。除了接业务线的消息,还有自己的数据库和缓存对比补数据的。将来,因为联通和电信要做物理隔离,隔离后还需要一个写缓存的统一监控专门负责给业务线返回更新消息,数据补偿的。然而所有的这些复杂逻辑,一个搜索引擎全能搞定。
  之所以我之前提议没人搭理,分析其原因:我们目前的组内搜索引擎做的不好,大家只会用最简单的功能。而我并没向大家完整介绍过搜索引擎都能干什么,而且我自己什么都没有做。阳哥自己搭建了一套redis来做日志的统一收集,我受到启发。现在,我有服务器,熟悉java底层和算法,搭建一套适合中国人用的搜索引擎又是我一直以来的心愿,现在又有业务场景需要用,干嘛不自己做一套。之前离开人人之后看过王志亮写的庖丁jade的源码,觉得自己也是可以做这么一套框架的,况且只是一个持久层框架,原理非常清晰明了。果然,来到乐视看到了和庖丁jade非常像的mango框架。如果现在我不研发这么一套专门应用场景的,适合中文分词的,非常合适作为列表缓存的搜索引擎框架出来,过两年肯定会有人比我先发布的,因为确实是很有应用场景的。
  先说为什么接口服务要用搜索引擎。搜索引擎可以支持高并发,之前用过基于lucene的solr搜索引擎,可以支持单台上万的并发。它是有多少内存就可以吃掉多少内存的,将集中式缓存的以空间换时间用到了极致。接口服务只更新缓存,不更新DB。如果换做搜索引擎,搜索引擎每分钟从数据库的从库中读取数据,对数据库基本没压力。业务线给我们发消息,我更新完缓存再返回消息也需要好几分钟。用搜索引擎实时性会更高。业务逻辑简单,现在接口服务用到了庞大的SOA架构,逻辑复杂,响应时间长。用搜索引擎,只需要一个接口服务调用搜索引擎搞定所有事情。搜索引擎内的数据高度结构化,可以添加复杂的条件,函数,分组,排序,实际上也是在JVM内完成的,直接和内存中数据交互。速度快太多了。接口服务目前的瓶颈在缓存上(必须在缓存上啊,整个都在和缓存打交道),经常性的缓存返回数据时间长。多个键值的时候mget性能差,还很容易堵塞,影响到整个服务。目前能采用的措施就是将一部分任务转给DB,另外考虑将memcache换成Redis缓存。不管是memcache还是redis,都不合适这种动辄就100K以上的大数据的情况。键值对的缓存最佳应用场景都应该是key和value体积都是极小的。所以我们现在的尝试其实都不解决本质问题。用的dubbo做的RPC调用也有问题,dubbo有自己的bug,一旦遇到就很头大。增加这层dubbo,增加了通讯开销和系统复杂性,实际性的好处却没得到发挥。而搜索引擎本身就是为大数据而生,大数据量,大数据体,高并发,而且对于这种多维查询,是搜索引擎最合适的用武之地。搜索引擎也可以单独作为RPC的被调用方,直接给其他业务线用。我们甚至可以将接口服务接收请求接口层都去掉,接口服务只有一个搜索引擎。德伟最头疼的部署问题迎刃而解。
  最最重要的原因,搜索引擎是基于全文索引的,目前的搜索模型纯波尔模型,向量空间模型,概率模型都是不适合像媒资这种主要是ID列表查询的。相应的,搜索引擎的分析工具的侧重面也是不合适媒资这样的业务场景的。
  来看接口服务目前的架构:
  很复杂且不合理,需要很多的优化。其中还用到了Falcon监控平台和美团点评的CAT监控。数据库更新目前要通知ES搜索引擎,通知缓存,通知业务线。
  换用搜索引擎之后的架构:
  
  就是这么简单,要不是为了保持目前的对外接口不变,接口api都可以不要。
  搜索引擎自己集成日志,监控。想要调试也只要输入参数,内部处理过程可以一目了然。从实现上,包装lucene做一个平台即可。较其他搜索引擎优化的点:着重提高根据ID维度作为查询条件的有序输出,将接口的常用操作函数化,使其适合作为接口服务。将solr中不合适中文分词的词根化等环节去掉,加强中文特有的拼音,近义词的搜索(等后续有时间时优化)。集成jvm,内存,cpu的日志,监控和报警,部署方便。初始不需要做太多,以后根据业务场景需要慢慢优化。其实我是要尝试使用自己的算法的,自认才疏学浅,没好意思说。

用谷歌搜索技术问题一定比用百度好?也未必...

网站优化优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-05-15 00:56 • 来自相关话题

  用谷歌搜索技术问题一定比用百度好?也未必...
  
  在我们程序员圈子里,存在着各种鄙视链,其中对于搜索引擎的选择,存在着谷歌 > 百度的观点。很多开发者认为,百度上的搜索质量不高,而谷歌搜索更能帮助我们解决开发中的问题。
  那么实际情况真的是这样吗?
  近日,一名开发者就对Google的搜索结果质量发表了下面的观点!
  以下内容转自OSC开源社区(ID:oschina2013)一名开发者出于好奇在 Google 使用php mysql email register作为关键词进行了搜索。很显然,这是在查找如何使用 PHP 和 MySQL 实现邮箱注册的功能。搜索结果返回了教程、操作方法、代码片段等内容。不过大多数结果都包含有错误的 SQL 语句,例如:
  // Don't do this!<br />mysqli_query("SELECT * FROM user WHERE id = '" . $_POST["user'] . "'");
  根据对谷歌搜索结果的整理,这些 SQL 语句可大致分为四种类型:
  SQL 查询中的所有参数都被转义
  只在绝对必要的情况下才对传入的参数进行转义
  作者尝试进行了部分转义,但存在漏洞
  没有任何转义逻辑
  这名开发者表示,当他发现一个搜索结果中存在有问题的 SQL 语句时,就会跳到浏览下一个结果。上面就是根据此过程整理出来的 30 条搜索结果,其中部分答案包含 SQL 注入语句。对此他认为,大多数 Google 搜索结果的质量十分低下。有些搜索结果就是通过 SEO 优化而排在前面的“扯淡”教程。同时,这篇文章也引起了程序员的广泛讨论(reddit, Hacker News),不过大家关注的重点也纷纷转移到了编程语言 PHP 上。但作者本意其实是希望程序员能甄别互联网上随手可得的任何资料,毕竟这里面鱼龙混杂。尤其要注意那些通过 SEO 优化而排名靠前的搜索结果,因为它们往往就是“雷区”。如果您正在学习Spring Boot,不用纠结百度或谷歌了,直接关注我们的免费教程:那么,作为开发者的你平时都用什么搜索引擎呢?你觉得哪个更好呢?留言说说你的观点吧!
  往期推荐
  喜欢本文欢迎转发,关注我订阅更多精彩
  关注我回复「加群」,加入Spring技术交流群 查看全部

  用谷歌搜索技术问题一定比用百度好?也未必...
  
  在我们程序员圈子里,存在着各种鄙视链,其中对于搜索引擎的选择,存在着谷歌 > 百度的观点。很多开发者认为,百度上的搜索质量不高,而谷歌搜索更能帮助我们解决开发中的问题。
  那么实际情况真的是这样吗?
  近日,一名开发者就对Google的搜索结果质量发表了下面的观点!
  以下内容转自OSC开源社区(ID:oschina2013)一名开发者出于好奇在 Google 使用php mysql email register作为关键词进行了搜索。很显然,这是在查找如何使用 PHP 和 MySQL 实现邮箱注册的功能。搜索结果返回了教程、操作方法、代码片段等内容。不过大多数结果都包含有错误的 SQL 语句,例如:
  // Don't do this!<br />mysqli_query("SELECT * FROM user WHERE id = '" . $_POST["user'] . "'");
  根据对谷歌搜索结果的整理,这些 SQL 语句可大致分为四种类型:
  SQL 查询中的所有参数都被转义
  只在绝对必要的情况下才对传入的参数进行转义
  作者尝试进行了部分转义,但存在漏洞
  没有任何转义逻辑
  这名开发者表示,当他发现一个搜索结果中存在有问题的 SQL 语句时,就会跳到浏览下一个结果。上面就是根据此过程整理出来的 30 条搜索结果,其中部分答案包含 SQL 注入语句。对此他认为,大多数 Google 搜索结果的质量十分低下。有些搜索结果就是通过 SEO 优化而排在前面的“扯淡”教程。同时,这篇文章也引起了程序员的广泛讨论(reddit, Hacker News),不过大家关注的重点也纷纷转移到了编程语言 PHP 上。但作者本意其实是希望程序员能甄别互联网上随手可得的任何资料,毕竟这里面鱼龙混杂。尤其要注意那些通过 SEO 优化而排名靠前的搜索结果,因为它们往往就是“雷区”。如果您正在学习Spring Boot,不用纠结百度或谷歌了,直接关注我们的免费教程:那么,作为开发者的你平时都用什么搜索引擎呢?你觉得哪个更好呢?留言说说你的观点吧!
  往期推荐
  喜欢本文欢迎转发,关注我订阅更多精彩
  关注我回复「加群」,加入Spring技术交流群

官方客服QQ群

微信人工客服

QQ人工客服


线