干货分享:冯耀宗SEO培训班第七期开课啦(全新升级,名额有限!)

优采云 发布时间: 2022-11-21 05:24

  干货分享:冯耀宗SEO培训班第七期开课啦(全新升级,名额有限!)

  大家好,我是风耀宗。本人从事SEO优化10多年,权重7-8的网站数不胜数。无论是在站长资源还是SEO技术方面,我都可以说是行业中的佼佼者(有人认为这是吹牛,这是给行业评价的),同时,经过我们之前的六期培训,几十个网站的权重都达到了6以上。这次我们对课程进行了升级,删除了一些不必要的内容,重点优化了内容和核心点。我们的作风不是啰嗦,而是说干货。

  我们的培训课程和市场有什么区别?

  一:我们手上和学生群里的高权重网站不计其数,我们的优化思路和方法非常成熟。

  第二:从售前到售后,我会单独与您联系。您无法联系客服或助理来帮助您解答。我发现市面上很多SEO培训机构,以自己的名义招收学员后,整个过程都交给助教或助教。客服解答协助。也正是因为这样,我们的招生规模才受到限制,因为一旦人多了,就没有办法兼顾所有。

  第三:市面上很多做SEO培训的人,自己做不出高权重的网站,教别人做高权重的网站。到最后也没法教他们。我教你用快速排名提高排名,我们教纯白帽子。SEO技术,同时运营多个高权重网站。

  我们的案例是什么?

  上图是我们自己的一个网站,“长城”,目前IP13万,月收入不低于5万。当前PC关键词库为8.8万,移动关键词库为7.5万。

  上图也是我们的网站“美文社”。目前PC端关键词库为13000个,移动端关键词库为30000个。运行时间大约不到半年。

  上图是我们其中一家子公司注册的网站“凯业网”。它已经运行了不到半年。目前PC端关键词数据库17000个,手机词库86000个。是一个纯企业网站,所有流量都针对企业站进行运营。

  上图是我们学生的网站。它已经运行了3个月。目前PC词库4600个,手机词库6600个,也是我们学生的毕业现场。网站排名仍在上升。

  上图也是我们同学的毕业网站。由于是老域名老网站,运行时间比较短,用了2个月才达到6的权重。

  这是我们二月初报名的学生。经过半个月的学习和适应,网站于2月20日左右开始腾飞。目前,它只持续一周。PC 权重 3,移动权重 5,PC关键词957,移动 关键词1406。

  课程大纲(课程主要分为:基础视频+*敏*感*词*语音+远程动手教学)

  

" />

  第一课:如何系统学习SEO,让你赢在起跑线上!

  这是第一节课的开课仪式。主要讲解课程的核心内容和优化的主要雷区。其次,第一个很重要的一点就是告诉你一个学习方法论。对你很有帮助。

  第二课:域名和服务器对SEO的影响和选择(老域名和老网站的优缺点和选择)

  对于老网站、新域名、老域名的选择参考标准,以及老网站、老域名、新域名的雷区和筛选条件。

  第三课:老站和新站的雷区和区别(老站搬迁的雷区和版权问题的解决方法)

  针对老网站、老域名、新域名网站备案的雷区和搬迁问题,我发现市面上80%的SEO优化公司都会犯错,所以这一节单独说说,也将帮助大家解决企业备案版权问题。

  第四课:新站上线注意事项及优化方案(老站优化方案)

  针对网站三形态、老网站、新网站、老域名首日需要的实际操作,以及网站三形态首日应该注意的雷区,同时,这里将对旧网站进行完整的概述。优化方案。

  第五课:大型网站代码细节优化(新老站不同操作方法)

  对于大型网站代码细节的优化,这里说的代码是市面上SEOER很少做的,也是非常重要的代码优化。三种形态的网站需要优化的地方有所不同。

  第六课:新老站快速采集方法(实现7天内采集)

  彻底解决新站、老站、老域名快速采集的方法。不管你是这三类网站的形式,看完本课,你都可以根据自己的网站情况来操作步骤,让你的网站在7天内上线。包括。

  第七课:量产优质可排名内容的方法(从挖词到排名的核心步骤)

  这门课程是市场上很多人误认为是我们课程核心点的重要课程,其实并不是课程的核心点。课程的核心点是我们将*敏*感*词*指导您制作网站。本课主要讲述如何量产优质可排名页面,从挖词到排名。

  第 8 课:移动广告优化(在符合搜索引擎的情况下最大化收入)

  市面上很多网站只要有一点排名就会盲目优化广告,导致搜索引擎优化不规范。本课主要是告诉大家如何最大化收益。也有利于 SEO 优化。

  第九课:网站可持续盈利的项目分享(权衡6个网站轻松月入过万)

  事实上,我们不教如何赚钱。毕竟,能教你赚钱的人,都是想从你身上赚钱。但是这里给大家介绍几个比较稳定,可以赚钱的小项目。别说让你发财了,但绝对比你打工强好几倍。因为在早期,很多学生一旦毕业,就直接辞职创业。

  第十课:网站速度优化和安全优化(支持大型网站插件)

  当网站的数据和流量达到一定程度后,服务器的负载就比较吃力了,所以本课主要是教大家如何解决重量级网站速度优化和重量级网站安全优化的解决方案,同时给出你伴侣插件。

  

" />

  学生们怎么说?

  经过我们之前的培训,大概招了170个学员,其中做过权重6以上网站的就有几十人。可以说报名后同学们的评价还是比较高的。以下是部分同学的对话。

  学费是多少?

  费用8499元,无分期,无优惠。但是没有二次成本(服务器域名是自己买的)。

  你学习多长时间?

  我们向你承诺的是,直到你学会它,直到你学会它是什么?按照我们提供的操作,至少做一个权重在6以上的网站,你才能学会。所以没有时间限制。当然,即使你成功创建了一个权重超过6的网站,即使以后遇到各种问题,也可以继续交流学习。

  提供什么工具?

  我们提供的教学是利用白帽SEO技术为网站快速获取流量和排名,所以我们不会提供一些关于黑帽的工具,但是我们会毫无保留的分享关于白帽的工具插件。

  制作重量6站需要多长时间?

  老站3个月以内,新站最多半年可以做到权重6以上。

  您需要投资多少?

  域名60元左右,服务器300元左右。个人每天工作2小时就可以完成一个网站的优化,没有其他额外的投入。

  去哪里读书?

  首先我们会为大家提供一套录播基础课程,也就是以上课程的介绍。同时,我们会根据您目前的学习状况和网站状况,定制一套优化方案。权重为 6 或更高的站点。

  最后,市场上有一些 SEO 教育提供商有自己的成功案例。他们大多是因为没有成绩才来搞所谓教育的。然而,有本事、有成功案例的,招收学生后却不是自己。教书,自己录一套视频,然后在市面上聘请“讲师”,按照预先设定好的剧本,为你解答问题,其他的统统不管。在我们这里,我有一个成功的案例,我会亲自教,亲自卖。、语音、远程、分析网站都是我自己做的。这是我们培训课程的最大优势。以下是我的个人微信:394062665

  解决方案:干货 | 鏖战双十一:阿里直播平台面临的技术挑战

  “双十一一直以交易为主,2015年当然也一样,但这并不妨碍万能的淘宝让双十一更受用户欢迎,体验更丰富,玩法更丰富,内容更有趣。因此,在2015年诞生了以直播为特色的双11比赛场馆,这也是本文将要重点探讨的,阿里直播平台在双11上面临的复杂技术挑战以及技术选型的前后端。

  在大流量、高并发场景下,*敏*感*词*直播的技术挑战一般体现在以下几个方面:

  本文将重点介绍其中的一些技术细节,希望通过一些文字的分析和介绍,能够对大家有所启发。

  现场视频

  对于直播平台来说,为了保证各种网络环境下视频的流畅观看,需要将高清输入流转换为多路不同分辨率的视频流,以支持不同网络条件下视频分辨率的切换。不同终端支持的协议和封装格式不完全相同。比如无线端的HTML5页面可以很好的支持HLS协议,但是对于RTMP等协议基本无能为力。为了减少延迟,PC端需要使用RTMP。类流协议。

  因此,为了支持多终端(PC、Andriod、IOS、HTML5)观看,需要对输入流进行编码,转换封装格式。转码完成后,需要对视频流进行分发。毕竟源站的负载能力有限,节点数量有限,与大多数用户的物理距离远。对于视频等占用带宽资源的场景,为了提高播放质量,减少卡顿,需要尽量减少到用户的传输链路。

  因此,通常的做法是将视频流分片存储在分布式文件系统上,分发到CDN,或者直接通过CDN对流进行二次转发,因为CDN离用户最近,从而确保直播内容对用户而言较低。用户的延迟和最短路径访问。客户端对时延的要求和使用的协议决定了视频是否需要分片。分片的目的是通过HTTP协议,用户不需要下载整个视频,只需要下载几个片段就可以播放。,其实直播和录播的技术是类似的,不同的是直播的结束时间无法预测,而录播的结束时间是已知的。

  对于低延迟要求的场景,客户端可以使用HLS协议。毕竟IOS、Android、HTML5等无线应用都有很好的兼容性和支持,常用的静态资源CDN不需要做相应的修改。可以支持,但是HLS协议的一大先天缺陷就是延迟高,视频内容从客户端切片、分发到下载需要很长时间。对于时效性要求非常高的场景,需要使用RTMP、RTSP等实时流媒体协议来降低延迟。此外,为了减轻源站压力,需要CDN边缘节点转发流。那么, CDN 就必须支持相应的流媒体协议,也就是通常所说的流媒体CDN。

  由于直播是由主播上传,如何管控违法内容,尤其是*敏*感*词*内容,成为一个非常棘手的问题。好消息是,随着技术的发展,该算法对黄*敏*感*词*片的识别准确率已经非常高,基本达到了可以应用于生产环境的水平。因此,我们也尝试在分发视频流之前提取视频帧。并将图像交给算法进行识别。当超过预设阈值时,可以发出预警或关闭*敏*感*词*。经过一段时间的实践,取得了一定的效果,降低了人工成本,但不可避免的是图像识别算法的时间复杂度高,吞吐量低于通用算法。

  直播整个环节比较长,包括推流、转码、切片、分发、客户端下载、播放等诸多环节。如果链路上的任何节点出现问题,则可能无法播放视频。因此,对关键节点的监控非常重要。此外,还需要监控整个链路的可用性。比如对于HLS协议,可以通过监控对应的m3u8索引列表是否更新来判断直播视频。流是否中断。

  当然,判断视频流中的帧是花屏还是黑屏就比较复杂了。而且,监控节点访问的CDN节点可能与用户访问的CDN节点不在同一地域。我国目前的网络环境,尤其是跨网段的网络访问,对流媒体应用来说具有较大的不可控因素,客户端网络访问环境对视频播放有着决定性的影响。

  因此,采集

终端用户播放数据质量数据进行反馈,及时切换视频分辨率就显得尤为重要。这些数据包括客户端的地域分布、播放卡顿信息、视频片段加载时间等,根据这些信息的反馈,可以综合评估CDN节点部署是否合理,是否需要增加新的CDN节点,以及视频转码参数针对不同机型的兼容性等,及时调整以提升用户体验。

  图1 视频直播架构

  消息/弹幕

  WEBIM应用和弹幕这几年越来越流行,是非常重要的营销手段和活跃气氛的手段。对于大量同时在线用户的实时聊天交互、实时直播弹幕等场景,在保证信息实时性的前提下,会面临非常高的并发压力。

  例如,假设一个活跃的*敏*感*词*有10万人同时在线,正在直播一场热门的游戏赛事。假设每个人每秒说一个词,会产生100000条消息,也就是10w/s的消息上行QPS,每条消息都需要广播给房间里的所有人,也就是说消息下行会放大10w倍,达到了惊人的10w*10w=100亿/s的消息下行QPS,而这还只是一场直播的QPS,可能会有多场类似的直播同时进行,这无疑是一个巨大的挑战消息通道。因此,在设计系统时,首先要考虑的是如何降低消息通道的压力。

  图 2 消息的传递和消费

  用户将信息发布到消息系统后,系统首先对消息进行一系列的过滤,包括反垃圾、敏感关键词、黑名单等,信息的过滤在后面会详细介绍,所以我不会在这里展示它。为了防止系统被瞬时峰值压垮,可以先将消息投递到消息队列,削峰填谷,在流量高峰期积压消息,留下一定的为系统留出余量,减少因限流影响导致消息丢失对业务的影响。

  后台始终以固定频率处理消息,通过异步机制保证系统在高峰期的稳定性。这是一个典型的生产者消费者模型。对于消息消费者,可以采用多线程模型,以固定的频率从消息队列中消费消息,遍历对应房间的在线人员列表,通过不同的消息通道进行消息下发。多线程提高了系统的吞吐量,特别是对于需要一次性将消息传递给几万、几十万用户的场景,可以采用大集群异步并行处理,提高系统的吞吐量。

  除了使用消息队列进行异步处理,当房间内人数过多或者消息下行压力过大时,还需要进一步降低消息下行通道的压力,这就需要使用的分桶策略。所谓的分桶策略实际上限制了消息的传播。假设10万人在同一个房间里聊天,每一句话可能会瞬间填满整个屏幕。在这种情况下,消息基本上是不可读的。

  为了提高信息的可读性,减少下行压力,可以每10000人放一次(每个桶的容量可以根据实际需要调整,这里只是举个例子),用户发送的消息只存储在一个桶中或者一些桶是可见的,用户根据桶的维度接收消息。一方面,前端用户收到的消息量会小很多(与用户所在的桶的活跃度有关),一条消息不需要发送给所有用户。发送到一个或多个桶中,以减少消息的下行压力。

  bucketing的策略有很多种,最简单粗暴的就是根据用户随机化。首先根据房间的活跃度,预估房间应该分成多少个桶,然后通过哈希函数将用户映射到每个桶中。随机策略的优点是实现起来非常简单,可以比较均衡地将用户分配到各个桶中,但是也会有很多缺点。首先,很难准确估计一个房间的活跃用户数。基本都是靠瞎。这会导致单个桶中的用户数过大或过小。太大会增加消息链接的压力,太小会降低用户的积极性,

  此外,从用户体验的角度来看,在直播过程中,在线用户数通常会经历一个逐渐上升到峰值然后逐渐下降的过程。比较小,势必会影响弹幕的活跃度,也可能导致用户流失。在下降的过程中,部分用户会逐渐退出直播,这会导致各桶不均衡:

  图 3 随机散列分桶

  另一种解决方案是按需划分桶,固定每个桶的大小,当现有桶满时再开辟新的桶,从而控制每个桶的人数,使其不会过大或过大大的。至于太少,这就解决了之前可能出现的每个桶的人太少的问题。但是,有一个问题会比之前的随机分配桶更明显。老桶里的用户会不断离开,人数会逐渐减少。,将创建越来越多的桶。如果不做清洗,最终的结果还是bucketing不平衡,会产生很多空buckets。因此,需要对算法和数据结构进行调整:

  图 4 按需分桶策略

  通过一个排序列表,每次将新用户添加到数量最少的桶中,这样可以将新用户添加到最空闲的桶中,以保持平衡。当桶已满时,将不会添加新用户。但是,当老用户离开的速度远高于新用户进来的速度时,桶还是不均匀的。这时候就需要定期整理桶,将桶与少数人合并,或者回收空桶。合并过程中,新用户会不断加入,同时也需要保证发送消息时能够读取到正确的用户列表。在分布式高并发场景下,为了保证效率,有时候并不是那么容易加锁,这就有可能发生脏写和脏读,

  与大数据量、高并发场景下的分库分表策略类似,分桶策略其实是一种权衡和妥协。虽然解决了原有下行通道压力过大的问题,但同时也引入了新的问题。首先,分桶改变了消息对普通用户的可见性。一条消息只对某些桶中的用户可见,而不是所有桶中的用户可见。这样,不同桶中的用户可能会看到不同的消息。问题在于,上述的分桶策略可能会导致“热桶”和“冷桶”效应,即很多“吐槽高手”可能被分配到同一个桶中,导致这个桶中的气氛非常活跃,而其他人不是。活跃用户一起分配,

  当然,对于一些特殊的消息,比如系统公告的内容,或者一些特殊角色(房间管理员、VIP、老师等)发送的消息,这些消息需要广播给所有用户。在这种情况下,系统需要区分消息类型,特殊的消息类型单独处理。

  对于消息传递任务,需要知道消息将如何传递给谁,所以需要动态维护一个房间内的人员列表,当用户上线/下线时系统会及时得到通知, 以便可以将用户添加到房间列表或从房间中添加。从房间人员名单中删除。用户上网非常简单。只需要在进房间的时候通知系统即可,但是处理离线用户有点麻烦。你为什么这么说?用户退出*敏*感*词*的方式可能有很多种,比如关闭浏览器标签、关闭窗口、关闭电源、按home键将进程切换到后台等,有些操作可能会获取事件回调,但也有很多情况。无法获取到事件通知,会导致人员名单只会增加,房间人数也会增加,消息传递量也会相应增加,白白浪费资源。为了解决这个问题,就需要心跳。

  

" />

  心跳是指客户端定期向服务器报告在线状态,以维护服务器上的在线人员列表。当同时在线人数达到一个很大的水平时(比如百万),每秒心跳的QPS也会变得很高。如何保证心跳的高效率和高吞吐,成为了岑要解决的问题。首先是通信协议的选择,是HTTP协议、WebSocket、TCP协议还是其他。

  HTTP协议的优势在于兼容性和跨终端。所有浏览器、Andriod、IOS WebView都可以很好的支持和兼容。在现在移动比PC更重要的环境下显得尤为重要,但是HTTP协议的劣势也很明显。是的,作为应用层协议,单次通信需要携带过多的附加信息,效率低下。WebSocket更适合移动端场景,但在PC端使用时,需要解决很多老版本浏览器的兼容问题。socket.io 的出现大大简化了这个非常复杂的问题。TCP协议广泛应用于传统的客户端应用,但是对于WEB应用来说,自然存在障碍。

  另一个问题是后端存储的选择。应该用什么样的存储结构来存储在线人员名单等数据结构,才能支持这么高并发的读写。经过优化并使用SSD的关系型数据库,性能相比过去有了很大的提升,但是对于大量频繁变化的线上人物列表,持久化存储其实是没有意义的。因此,读写性能更高的内存存储,比如memcache、redis,可能是更现实的选择。Memcache 只能支持简单的 KV 对象存储。数据读写需要频繁的序列化和反序列化,但是吞吐量更高。redis的优势在于丰富的数据类型,如Lists、Hashs、Sets,

  图5 基于redisSets的Bucket存储结构

  消息通道

  HTTP协议的request/response性质决定了它擅长处理浏览类业务,但对于需要与服务器频繁交互的即时通讯场景就很差了。直播期间,用户可以对主播进行投诉和评论,用户之间也可以经常交流。需要弹幕、WEBIM等工具来支持。在这种情况下,消息的实时性尤为重要。

  要实现这种场景,最简单粗暴的方式就是不断轮询应用服务器,通过拉取的方式读取弹幕和用户聊天内容。消息的实时性取决于拉取的频率。服务器可能承受不了。如果拉取频率太低,消息的实时性跟不上。轮询方式过于粗糙,需要频繁请求服务器,成本高,且用户更新信息的频率实时变化,很难选择合理的轮询时间,因为用户发送消息的频率在不同的时间段有很大的不同,不同的是客户端需要对拉取的信息进行过滤去重。因此,对于WEB端的即时交互应用,

  Comet也被称为反向ajax(ReverseAJAX),它分为两种实现方式,一种是长轮询(long-polling)方式,另一种是流式(streaming)方式。在长轮询模式下,客户端与服务器保持HTTP连接,服务器会阻塞,直到服务器有信息要发送或HTTP请求超时。如果客户端收到响应,它将重新建立连接。该方法采用流的形式。服务器向客户端推送数据,但连接并没有关闭,而是一直保持到连接超时。超时后,客户端重新建立连接并关闭之前的连接。通过这两种方式,可以使用HTTP协议实现服务端和客户端之间的即时通信。

  (注:彗星,)

  WebSocket是IETF提出的一种新协议,旨在实现浏览器和服务器之间的全双工(full-duplex)通信,而传统的HTTP协议只能实现单向通信,即客户端发起请求到服务端,comet虽然可以在一定程度上模拟双向通信,但是通信效率较低,需要依赖具体的服务端实现。

  (注:WebSocket,)

  图 6 WebSocket 协议

  (注:WebSocket通信原理,%3Dbaike116%2C5%2C5%2C116%2C38/sign=d49cfb709e16fdfacc61cebcd5e6e731/d058ccbf6c81800a6aab8955b23533fa828b471a.jpg)

  为什么Comet的通信效率比WebSocket低?因为不管是Comet的长轮询机制还是streaming机制,在请求超时后都需要向服务器发送请求,而服务器响应消息后,长轮询需要重新建立连接,这就带来了额外的开销。

  图7 长轮询和websocket消息发送对比

  我们知道在HTTP协议的RequestHeader中附加了很多信息,但是其中收录

的很多信息在某些场景下并不是必须的,浪费了大量的带宽和网络传输时间。WebSocket协议让浏览器和服务器只需要一次握手动作就可以形成一个稳定的通信通道,数据可以通过frame在两者之间传输,而且消息传输发送的header也很小,这样就带来了效率提升。

  图8 websocket和comet性能对比

  用wireshark抓包可以做一个简单的测试对比。假设服务器每秒向用户推送50条消息,每条消息长度为10字节,对应不同的用户规模。使用了两种不同的通信机制,websocket 和 comet。传输的字节数如图8所示,可见随着用户规模和消息量的增加,使用websocket协议进行通信会带来通信效率一个数量级的提升。详细的测试过程可以参考作者的博客。

  WebSocket协议的引入从理论上解决了浏览器与服务器实时通信的效率问题。与基于HTTP协议的comet相比,它可以获得更好的性能,但也引入了一些新的问题。首先是浏览器的兼容性。开发WEB应用最头疼的问题之一就是多版本浏览器的兼容性问题。不同的浏览器厂商对协议的实现有自己的理解,目前市面上的浏览器还是很多的。存在大量不支持HTML5协议的低版本浏览器,而这些用户在国内还有很大的基数,因此在产品研发过程中不得不考虑。

  得益于socket.io的开源,通过websocket、Adobe FlashSocket、long-polling、streaming、polling等机制的自适应切换,帮助我们解决了大部分浏览器(包括各种内核的webview)的兼容性问题,统一客户端和服务器的编程方式。针对不同平台的消息推送,我们内部也衍生了一些成熟的技术平台,封装了消息推送、消息订阅、序列化反序列化、连接管理、集群扩展等工作,限于篇幅,不再赘述在这里说更多。

  (注:socket.io,项目地址:)

  文本内容过滤

  双十一直播的另一个挑战是如何过滤弹幕等UGC内容。根据以往的经验,对于淘宝而言,如果不经过过滤就直接展示内容,用户看到的无疑是满屏的广告,大量的广告信息会直接导致部分功能无法使用。因此,文本内容过滤可以说是我们的一项基本功。早期识别垃圾、广告内容或非法信息主要靠人工,但在现在的WEB2. 文本筛选和过滤技术已经应用到工程领域。

  敏感词匹配

  经过长时间的积累,较大的网站一般都有一个敏感词列表。如果用户提交的内容收录

敏感词,需要进行转义(转***),或者拒绝发布。那么如何判断文本是否收录

敏感词,如何过滤敏感词呢?如果只有几个敏感词,最简单的方法当然是使用关键词搜索算法或者正则表达式来匹配,但实际情况显然要复杂得多,需要过滤关键词可能有几万条,但是正则表达式的效率其实是比较低的,尤其是在高并发场景下,对系统吞吐量要求非常高。因此,在这种情况下需要更高效的算法。现在,更常见的是使用Trie树算法或者Trie算法的变体,比如空间复杂度和时间复杂度相对均衡的双数组Trie树算法。Trie 树也称为字典树或单词查找树。它的优点是可以利用字符串的公共前缀来减少查询时间,尽量减少字符串比较的次数,减少关键词在内存中占用的存储空间。空间。

  图9Trie树结构

  Trie 本质上是一种有限状态机,它根据输入数据执行状态转换。假设敏感词包括“美国”、“美丽”、“金币”、“黄金”、“国王”,输入文本为“我的同桌是个漂亮的女孩”,每次读取一个字符作为输入,根据这个字符及其后面的字符在Trie树中查找到叶子节点,就可以找出文本中收录

的禁忌词“beautiful”,以及这个词在文本中对应的位置和频率。

  当然,也可以通过构造多级HashTable来简化Trie树的实现。同一个父节点的词放在同一个HashTable中,减少不必要的查询。对于输入的文本,只需要对字符进行逐个排序,搜索HashTable作为输入,如果收录

对应的key,继续查找,直到找到最低的叶子节点。

  图10 多级HashTable简化Trie树的实现

  在系统越来越智能的同时,恶意用户也越来越狡猾。它们可能会在文本中收录

一些噪音字符以绕过敏感词的检查,例如“美国*美国”。我们需要对输入文本进行降噪,过滤掉干扰字符,然后进行匹配。

  

  除了算法的实现,在集群环境下,还要综合考虑系统的吞吐量和机器内存的压力。由于敏感词过滤需要依赖庞大的敏感词词库,而词库需要解析成Trie树或多级HashTable放在内存中方便查找,势必会占用大量内存空间。因此,为了提高内存资源的利用率,我们在大多数情况下都以RPC方式部署敏感词过滤服务。但是在高并发场景下,为了减少引入敏感词过滤带来的延迟,提高系统吞吐量,还需要将敏感词数据推送到本地内存。通过读取本地内存中的数据,减少了 RPC 引起的延迟。当敏感词库更新时,服务器需要将相应的变化信息推送给其他应用。

  分类算法

  分类其实就是按照一定的标准给对象贴上标签,然后根据标签来区分。基于概率统计的贝叶斯分类算法是最常见的分类算法,也是垃圾文本识别领域应用最广泛的算法。

  (注:贝叶斯分类,)

  使用贝叶斯分类算法进行二元分类大致可以分为以下几个步骤:

  采集

大量垃圾内容和非垃圾内容语料库,建立训练垃圾内容语料库和正常内容语料库。

  对语料文本进行切分,提取独立的字符串,统计字符串在文本中出现的频率。

  每个训练语料库对应一个哈希表。比如垃圾语料放在hashtable_bad,非垃圾语料放在hashtable_good,hashtable存储分词提取的字符串和对应的词频。

  计算hashtable中所有字符串出现的概率,即P=字符串的词频/字符串总数。

  结合hashtable_good和hashtable_bad,推测当一串文本中收录

某个字符串时,该文本是垃圾邮件的概率,对应的数学表达式如下:P(A|ki)=Pbad(ki)/[Pgood( ki) +Pbad(ki)],其中事件A表示文本是垃圾邮件,k1,k2...kn表示提取的关键词,P(A|ki)表示出现关键词ki in the text ,该文本是垃圾邮件的概率,Pbad(ki)是hashtable_bad中ti的值,Pgood(ki)是hashtable_good中ki的值。

  创建一个新的 hashtable_probability 来存储从字符串 ki 到 P(A|ki) 的映射。

  至此,贝叶斯分类的训练学习过程就完成了,接下来就可以根据hashtable_probability计算文本是垃圾邮件的可能性了。假设将用户提交的文本内容切分得到n关键词k1,k2,k3...kn,hashtable_probability中对应的值为P1,P2...Pn,P(A|k1 ,k2,k3...kn )表示用户提交的文本中同时出现关键字k1,k2,k3...kn时该段内容为垃圾文本的概率,P(A|k1,k2, k3...kn)=P1*P2*......Pn。当P(A|k1,k2,k3...kn)超过预定阈值时,可以判断该内容为垃圾邮件,通过调整该阈值,可以控制反垃圾邮件系统对内容过滤的严重程度.

  当然,以上只是简单的二分类情况。随着语料库的丰富,垃圾语料库可以细分,如欺诈、广告、*敏*感*词*、脏话、人身攻击等,并可以根据具体场景进行组合分级。因为不同的使用场景对文本中垃圾文本的容忍度不同。环境越严苛,误杀的概率就会增加,并且在某种场景下,某些语料库可能属于垃圾内容,而在另一些场景下,则可能属于正常内容。

  例如,如果在电商网站的评价中发现有QQ、微信、电话等*敏*感*词*,则很可能属于广告内容,而对于社交类应用,则属于正常内容。此外,还需要对一些常用词进行过滤,以减少对概率计算的干扰。单词实际上是加权的。例如,如果出现一些关键词,文档是垃圾邮件的概率会显着增加,这样的词权重。

  贝叶斯算法的优势在于随着语料库的不断丰富,可以应对恶意用户的“新花样”。基于训练,算法模型可以发现已知类型的垃圾内容,但对于新兴类型,算法模型无能为力,需要外部干预。通过人工标注或其他方法(如文本重复判断)发现新型垃圾文本,丰富训练语料库。随着语料库的丰富,识别的准确率会越来越高。最终在对抗恶意用户的过程中,系统的能力会越来越强。

  黑名单用户

  对于频繁发送恶意信息的用户,您可以采取封禁一段时间或永​​久封禁的方式应对。这样就需要维护一个用户黑名单。当用户提交UGC内容时,首先判断是否在黑名单中,如果已经加入黑名单,则拒绝发布。

  黑名单最简单的实现方式是使用hashtable,借用redis hash等数据结构进行内存缓存,并定期进行持久化或数据备份,防止宕机导致数据丢失。这种方法实现起来很简单。查询效率也比较高,可以满足大部分场景的需求,但是缺点也很明显。随着黑名单列表的增加,哈希表方法占用的内存空间越来越大。这种情况在不同场景区分隔离时尤为明显,黑名单越大,哈希冲突越多,查询效率也会下降。当对黑名单过滤的要求不是那么精确时,可以使用BloomFilter(布隆过滤器)的方案。

  (注:布隆过滤器,)

  图11 BloomFilter基本原理

  (注:图片来源,)

  BloomFilter 是一个 m 位数组。在初始状态下,数组的所有位都设置为0。当需要设置黑名单时,通过一系列不同的哈希函数,每个哈希函数将对应的输入元素映射到数组中的一个位。通过哈希函数获取数组的索引,将数组对应的位置置为1,查询时使用相同的哈希函数找到对应的位。如果对应的位不全为1,则表示该用户不在黑名单中。那么,当所有位都为1时,是否意味着该用户一定在黑名单中呢?不一定,可能是其他用户输入这次只是把所有位都设置为1,如图11所示,插入x,y,z三个元素后,再查询w,会发现w不是在集合中,如果三个hash函数计算出来的w的索引处的位都是1,那么BloomFilter会告诉你w在集合中。其实这是误报,w不在集合中。这就是所谓的误报。就概率而言,误报的概率很低。在系统可接受的范围内,如果要求100%准确判断,BloomFilter是不适合的。

  基本的BloomFilter不支持删除操作。CountingBloomFilter的出现解决了这个问题。它将标准BloomFilter位数组的每一位扩展成一个小计数器(Counter),并在插入元素时给出对应的k(k是ha希腊函数的个数)计数器的值加1,和的值删除元素时对应的k个计数器减1。CountingBloomFilter在BloomFilter的基础上增加了一个删除操作,占用了数倍的存储空间,但是相比hashtable,存储效率却提升了很多。

  图 12 CountingBloomFilter 基本原理

  (注:图片来源,)

  系统稳定性

  每年的双十一,如何在大流量、高并发的场景下,保证系统服务稳定不宕机,成为经久不衰的话题,也是每年技术人员的一次彻底回顾。从性能优化、依赖排序、大促前的峰值评估,到系统压测、新机采购上线,再到流控阈值评估、降级交换机配置,再到监控数据采集、容灾应急预案、链路压测,习题,以及实时和离线数据分析等等,相信网上相关的文章很多,这里不再赘述。

  总结

  本文主要介绍阿里直播平台在双十一期间面临的一些技术挑战,以及解决方案和思考过程,从音视频直播架构,到弹幕和消息投放,再到消息的技术选型channel, text 过滤的实现机制,大型直播,无论是音视频的可靠性保证,视频*敏*感*词*识别,还是几万在线用户放大后的短信下行,过滤短信内容本身,都面临着极大的挑战。

  挑战无所畏惧,兵来将往,水来土掩,迎难而上,才能突破创新。

  作者介绍 陈康贤,淘宝昵称龙龙,淘宝技术部技术专家,着有《大型分布式网站架构设计与实践》一书,在分布式系统架构设计、高并发系统设计、系统稳定性保障等领域积累, etc. 具有丰富的实践经验和对新技术的浓厚兴趣。

  挂钩

  想与作者聊天或合作?赶快加小q微信(ID:infoqzone),一起约龙龙吧!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线