您的位置: 廊坊信息港 > 旅游

大型网站架构演化网站内链优化和网站结构优

发布时间:2019-05-15 00:38:25

1 : 站内链优化和站结构优化的两大类型

站大致主要有以下两个结构种别。

1、物理结构

物理结构就是站的目录情势,1般有两种情势,扁平和从属,扁平结构就是所有的页面都在站的根目录,从属情势就是每个内容页面从属于上级目录,层次比较清楚。在物理结构上,很多人歪曲了1句话:目录越少,蜘蛛越好抓取。这句话的意思是站内部的页面临比而言,目录越少,蜘蛛会优先抓取.针对统1个站而言,蜘蛛会依照从上到下的顺序来抓取,由于搜索引擎的资源是有限的,因此蜘蛛在抓取页的时候肯定会有1个前后顺序,优先抓取1些目录较少的页面,而目录较深,url参数比较多的会放在抓取,由于搜索引擎的资源有限,我们假定1个蜘蛛来1次可以抓取100个页面, ,那末排在后面的1些目录较深的可能抓取不了,这就要求我们要公道铺排站物理结构,根据页面的重要程度来铺排结构,而把所有页面都放在根目录下,看似减少了目录层次,实在就站内部而言,所有的页面就都没区分了,由于所有的页面都在统1个目录下,对蜘蛛而言,已没有了任何辨别,1些小站可以这样铺排,但是对中大型站这样做明显是不公道的,那末多页面都放在根目录,治理上太麻烦了,而且也没必要这样做。

2、URL层次结构

其实物理结构目前对抓取意义已不大,URL层次结构就显得比较重要了,大家都知道1个站的页面多从首页点击4次要能看到,多了蜘蛛就很难抓取了,1般的中小站都没必要推敲这1点,由于中小站1般的页面你不管怎样做,点击4次也足够了。而对中大型站来讲,由于栏目太多,而且栏目下还有子栏目,下面可能还有子栏目,每一个栏目的页面可能也非常多,这个时候就需要把内链做好,内链主要说下内容页的链接散布,

1、链接到首页和栏目的导航

2、链接到上级栏目

3、面包屑导航

3、链接到相干内容

4、随机链接当前栏目的其他内容

对中型站来说,内容页做到这几点,1般蜘蛛的抓取都不成题目了。2 : 了解知乎站的架构演进史

早期架构选型

在2010年10月真正开始动手做知乎这个产品时,包括李申申在内,初只有两位工程师;到2010年12月份上线时,工程师是4个。

知乎的主力开发语言是Python。由于Python简单且强大,能够快速上手,开发效力高,而且社区活跃,团队成员也比较喜欢。

知乎使用的是Tornado框架。由于它支持异步,很适合做实时comet利用,而且简单轻量,学习本钱低,再就是有FriendFeed 的成熟案例,Facebook 的社区支持。知乎的产品有个特性,就是希望跟阅读器端建立1个长连接,便于实时推送Feed和通知,所以Tornado比较合适。

初全部团队的精力全部放在产品功能的开发上,而其他方面,基本上能节俭时间、能省的都用简单的方法来解决,固然这在后期也带来了1些问题。

初的想法是用云主机,节省本钱。知乎的第1台服务器是512MB内存的Linode主机。但是站上线后,内测受欢迎程度超出预期,很多用户反馈站很慢。跨国络延迟比想象的要大,特别是国内的络不均衡,全国各地用户访问的情况都不太1样。这个问题,再加上当时要做域名备案,知乎又回到了自己买机器找机房的老路上。

买了机器、找了机房以后又遇到了新的问题,服务常常宕掉。当时服务商的机器内存总是出问题,动不动就重启。终究有1次机器宕掉起不来了,这时候知乎就做了Web和数据库的高可用。创业就是这样1个情况,不知道明早醒来的时候会面临什么样的问题。

这是当时那个阶段的架构图,Web和数据库都做了主从。当时的图片服务托管在又拍云上。 除主从,为了性能更好还做了读写分离。为解决同步问题,又添加了1个服务器来跑离线脚本,避免对线上服务造成响应延迟。另外,为改进内的吞吐量延迟, 还更换了设备,使全部内的吞吐量翻了20倍。

在2011年上半年时,知乎对Redis已很依赖。除开始的队列、搜索在用,后来像Cache也开始使用,单机存储成为瓶颈,所以引入了分片,同时做了1致性。

知乎团队是1个很相信工具的团队,相信工具可以提升效力。工具实际上是1个进程,工具并没有所谓的的工具,只有合适的工具。而且它是在全部进程中,随着全部状态的变化、环境的变化在不断产生变化的。知乎自己开发或使用过的工具包括Profiling(函数级追踪要求,分析调优)、Werkzeug(方便调试的工具)、Puppet(配置管理)和Shipit(1键上线或回滚)等。

日志系统

知乎初是约请制的,2011年下半年,知乎上线了申请注册,没有约请码的用户也能够通过填写1些资料申请注册知乎。用户量又上了1个台阶,这时候就有了1些发广告的账户,需要扫除广告。日志系统的需求提上日程。

这个日志系统必须支持散布式搜集、集中存储、实时、可定阅和简单等特性。当时调研了1些开源系统,比如Scribe整体不错,但是不支持定阅。Kafka是Scala开发的,但是团队在Scala方面积累较少,Flume也是类似,而且比较重。所以开发团队选择了自己开发1个日志系统Kids(Kids Is Data Stream)。顾名思义,Kids是用来聚集各种数据流的。

Kids参考了Scribe的思路。Kdis在每台服务器上可以配置成Agent或 Server。Agent直接接受来自利用的消息,把消息聚集以后,可以打给下1个Agent或直接打给中心Server。定阅日志时,可以从 Server上取得,也能够从中心节点的1些Agent上获得。

具体细节以下图所示:

知乎还基于Kids做了1个Web小工具(Kids Explorer),支持实时看线上日志,现在已成为调试线上问题主要的工具。

Kids已开源,放到了Github上。

事件驱动的架构

知乎这个产品有1个特点,早在添加1个答案后,后续的操作其实只有更新通知、更新动 态。但是随着全部功能的增加,又多出了1些更新索引、更新计数、内容审查等操作,后续操作5花8门。如果依照传统方式,保护逻辑会愈来愈庞大,保护性也会 非常差。这类场景很适合事件驱动方式,所以开发团队对全部架构做了调解,做了事件驱动的架构。

这时候首先需要的是1个消息队列,它应当可以获得到各种各样的事件,而且对1致性有很高的 要求。针对这个需求,知乎开发了1个叫Sink的小工具。它拿到消息后,先做本地的保存、持久化,然后再把消息分发出去。如果那台机器挂掉了,重启时可以 完全恢复,确保消息不会丢失。然后它通过Miller开发框架,把消息放到任务队列。Sink更像是串行消息定阅服务,但任务需要并行化处理, Beanstalkd就派上了用处,由其对任务进行全周期管理。架构以下图所示:

举例而言,如果现在有用户回答了问题,首先系统会把问题写到MySQL里面,把消息塞到Sink,然后把问题返回给用户。Sink通过Miller把任务发给 Beanstalkd,Worker自己可以找到任务并处理。

开始上线时,每秒钟有10个消息,然后有70个任务产生。现在每秒钟有100个事件,有1500个任务产生,就是通过现在的事件驱动架构支持的。

页面渲染优化

知乎在2013年时每天有上百万的PV,页面渲染实际上是计算密集型的,另外由于要获得数据,所以也有IO密集型的特点。这时候开发团队就对页面进行了组件化,还升级了数据获得机制。知乎依照全部页面组件树的结构,自上而下分层地取得数据,当上 层的数据已获得了,下层的数据就不需要再下去了,有几层基本上就有几次数据获得。

结合这个思路,知乎自己做了1套模板渲染开发框架ZhihuNode。

经历了1系列改进以后,页面的性能大幅度提升。问题页面从500ms 减少到150ms,Feed页面从1s减少到600ms。

面向服务的架构(SOA)

随着知乎的功能愈来愈庞杂,全部系统也愈来愈大。知乎是怎样做的服务化呢?

首先需要1个基本的RPC框架,RPC框架也经历了好几版演进。

初版是Wish,它是1个严格定义序列化的模型。传输层用到了STP,这是自己写的很 简单的传输协议,跑在TCP上。1开始用的还不错,由于1开始只写了1两个服务。但是随着服务增多,1些问题开始出现,首先是 ProtocolBuffer会 生成1些描写代码,很冗杂,放到全部库里显得很丑陋。另外严格的定义使其不便使用。这时候有位工程师开发了新的RPC框架Snow。它使用简单的 JSON做数据序列化。但是疏松的数据定义面对的问题是,比如说服务要去升级,要改写数据结构,很难知道有哪几个服务在使用,也很难通知它们,常常毛病就 产生了。因而又出了第3个RPC框架,写RPC框架的工程师,希望结合前面两个框架的特点,首先保持Snow简单,其次需要相对严格的序列化协议。这1版 本引入了 Apache Avro。同时加入了特别的机制,在传输层和序列化协议这1层都做成了可插拔的方式,既可以用JSON,也能够用Avro,传输层可以用STP,也能够用 2进制协议。

再就是搭了1个服务注册发现,只需要简单的定义服务的名字就能够找到服务在哪台机器上。同时,知乎也有相应的调优的工具,基于Zipkin开发了自己的 Tracing系统。

依照调用关系,知乎的服务分成了3层:聚合层、内容层和基础层。按属性又可以分成3类:数据服务、逻辑服务和通道服务。数据服务主要是1些要做特殊数据类型的存储,比如图片服务。逻辑服务更多的是CPU密集、计算密集的操作,比如答案格式的定义、解析等。通道服务的特点是没有存储,更多是做1个转发,比如说Sink。

这是引入服务化以后整体的架构。

而目前在产品方面,知乎保存着以下几个重点:

1.基础模块(1 问题-n 回答-n 评论模块)

知乎基础模块中1个问题对应于 n 个回答,1个回答又对应于 n 个评论,因此我们可以把基础模块称为 1 问题-n 回答-n 评论模块。假定知乎架构模型中仅存在基础模块,将会是1个怎样的场景?那就是信息流随着时间的推移不断生成新的内容并把旧信息快速替换冲洗掉,这类对基础模块无差别的线性摆设,对用户来讲将是1个灾害:

在简单罗列的线性信息海洋中,用户汲取其所需信息的本钱太高;

信息流犹如大河奔流,那些有发掘价值的信息点稍纵即逝,即信息价值被严重浪费;

用户不能将有价值的信息点从信息大河里舀出来,信息可见而不可用,没法产生长效作用。

知乎的产品设计者很好地意想到了这些潜伏的灾害,并对每一个问题点做出了针对性的产品设计方案,下面木柄逐1展开分析。

2.话题模块

话题模块用来解决性简单罗列的信息海洋中,用户汲取所需信息的本钱太高的问题。知乎中,每个基础模块(1 问题-n 回答-n 评论模块)可以添加话题标识,话题描述了基础模块的种别,话题模块与基础模块是多对多的映照关系(many2many)。事实上,为内容添加标识的做法在之内容为核心的站的组织架构模型中屡见不鲜,很多站将这类标识称为标签(比如 lofter)。

但是知乎的话题比普通站的标签走的更远:知乎的各个话题之间不像标签那样是孤立的,它定义了1套将话题组织起来的数据结构。请注意,话题本身就是对基础模块的1种组织情势,而又存在1套数据结构描写了话题的组织情势,那末我们可以将这类数据结构称作描述结构组织的结构组织,知乎自己是这么介绍这个描写结构组织的结构组织:知乎的全部话题通过父子关系构成1个有根无循环的有向图;根话题即为所有话题的上层的父话题;请不要在问题上直接绑定根话题。

3.发现模块

发现模块解决了信息流犹如大河奔流,那些有发掘价值的信息点稍纵即逝,即信息价值被严重浪费的问题。发现模块主要有两部分内容组成:推荐与热门。热门内容是由用户群体行动所做出来的内容精选,而推荐内容是知乎运营人员对群体行动的补充完善,地让有价值的信息减缓流速,或2次逆流,目的就是让有价值的信息得以上浮与驻留。

另外值得1提的是,如果说发现模块是构筑在知乎基础模块上的信息驻留模块, 那么话题模块也有1个针对其信息的驻留模块话题精华模块。发现模块是发掘全局的有价值的信息,而话题精华模块发掘的是该话题的有价值的信息,从而使有价值的信息在不同的组织维度上得到驻留,而不被浩大的信息流冲的无影无踪。

4.收藏模块

收藏模块解决了用户不能将有价值的信息点从信息大河里舀出来,信息可见而不可用,没法产生长效作用的问题。收藏功能是很多内容为王的站架构中重要的1环,使用户可以从浩淼的信息流中舀出其感兴趣的那1瓢。知乎的收藏模块支持创建收藏文件夹,即用户可以对收藏内容再组织,寄存到相应的收藏文件夹中。

另外知乎的收藏模块还走的更远,用户组织的收藏夹可以设置为公有状态,并分享给其他用户。也就是用户的利己行动(收藏自己感兴趣或有帮助的内容),产生了利他的效果(其他用户也能看到由他人的收藏夹并从中获益)。从内容组织角度上来说,知乎的收藏夹不但提供了将信息舀出保存的作用,而且也起到将优良信息驻留与上浮的作用。

5.知乎模块

知乎模块是1个比较特殊的模块,它其实不是知乎的主体模块,你可以将其理解成知乎产品的衍生模块,它事实上也从另外1个角度在解答信息价值被严重浪费的问题。知乎模块与知乎主体模块采取松耦合的架构模式,它是对知乎这个庞大的优良内容生产机器的2次开发。知乎采取的方式,每天对知乎中产生的经典内容做1次组织成刊。知乎简单的布局、显现方式,更加符合人们在移动真个浏览习惯,使那些觉得在移动端使用知乎不方便的用户,或想在碎片时间里进行阅读的用户,有1个更加贴心的知乎产品可以选择。

3 : 站架构与URL优化中要重视的几个原则小结

站构架优化

1. 站导航优化

(1)主导航醒目清晰

主导航1般体现为1级目录,通过它用户和蜘蛛程序可以层层深入访问到站所有重要内容。因此主栏目必须在站首页第1屏的醒目位置体现,并采取文本链接而不是图片。

(2)首页突出重要内容

除主栏目,还应当将次级目录中的重要内容以链接的方式在首页或其他子页中多次显现,以突出重点。搜索引擎会对这类1站内屡次出现的链接给予充分重视,对页级别提高有很大帮助,这也是每一个站首页的页级别1般高于其他页面级别的重要因素,由于每一个子页都对首页进行了链接。

2.超链接优化:

(1)URL优化:

把站的url优化成权重较高的url。(U全部使用静态URL,不要在URL中出现?、=、%,和、$等符号。用/代替)

站目录层级为2~3层子目录。像下面这样:

另外,图形、脚本、CGI-BIN和CSS样式表则各自建立专门的目录收入其中,1般不放在根目录下。

(2)目录和文件命名规则

根据关键字规范原则,可以在目录名称和文件名称中使用关键词。但如果是关键词组,则需要用分隔符分开。1般用连字符-进行分隔,尽可能使用不多于3个连字符。因此,如果以中国制造作文件名,那就依照这个要求来书写:

made-in-china. htm (连字符)

目录和终究页面能包括关键词,可以采取英文和拼音的情势。如果URL中有多个关键词则需要进行分隔,请使用-。

(3)做好站内链接:

做好站内各类页面之间的相干链接,此条非常重要,这方面做好,可以在改版早期先利用站的内部链接,为重要的关键词页面建立众多反向链接。(反向链接是页和页之间的,不是站和站之间的。所以站内部页面之间相互的链接,也是相互的反向链接,对排名很有益的。)

比较好的情况是逻辑结构与前面的树型物理结构相吻合,也就是说:

主页链接向所有的频道主页

主页1般不直接链接向内容页,除非是你非常想推的几个特殊的页

所有频道主页都连向其他频道主页

频道主页都连回站主页

频道主页也连向属于自己本身频道的内容页

频道主页1般不连向属于其他频道的内容页

所有内容页都连向站主页

所有内容页都连向自己的上1级频道主页

内容页可以连向同1个频道的其他内容页

内容页1般不连向其他频道的内容页

内容页在某些情况下,可以用适当的关键词连向其他频道的内容页

频道构成分主题

(4)动态URL

A . 目前很多站都有数据库驱动生成的URL,即动态URL,常常表现为在URL中出现?、=、%,和&、$等字符。动态URL极不利于搜索引擎抓取页,会严重影响站排名,通常是通 过技术解决方案将动态URL转化成静态URL情势,如:

转化为:

http://

B . 内部链接尽量为链接路径.

3. 图片的优化(这是我们平时注意不到的地方)

对图片的优化还有添加ALT属性文字和图片文字说明,通过对图片的优化,可使搜索引擎根据这些提示搜索到我们的图片:

(1)、在图片上方或下方加上包括关键词的描写文本;

(2)、在代码中增加1个包括关键词段的heading标题标签,然后在图片下方增加文字描述。

(3)、在图片下方或旁边增加如更多某某链接,包括关键词。

总的说来,对图片的优化还是应当尽量减少大图片和缩小图片的加载时间。Alt属性中的文字对搜索引擎来讲,其重要性比正文内容的文字要低。

4、 页代码的优化(主要是Javascript)

(1)、将脚本移至页面底部

大部份的JAVA代码都可以移到页面结束标签之上,而不影响站功能。这样就可以1开始突出关键词,并加快页面加载时间。

(2)、将Javascript脚本放到 .js文件中。

这样.js脚本就能够被缓存下来,访问一样调用这个Javascript的页面的时候就会提高页的访问速度。

5、新版上线后的注意事项

(1). 保存本来的页命名/PR值:

保存原有页,即使页的结构和内容被更改,搜索引擎蜘蛛还是可以按原路找到页面。这类方式能让蜘蛛更快的重新收录原页面中的新内容,也保护了原本的排名及页面的PR值。固然,如果有些页面不公道的,不合适搜索引擎的可以删掉,对那些包括现在每天能带来稳定流量的关键字页面,可以将其保存。

(2). Sitemaps 更新:

能让搜索引擎更好、更快的收录新站,建议建立Sitemaps,告知搜索引擎我的站在改变,牵引搜索蜘蛛去收录新的页面。

(3). 避免站点内容的冲突:

由于新改版以后不可能很快就有很多新的内容,所以站的内容还是照搬旧版本的内容,这样对搜索引擎是不友好的,另外加上新、旧站的站结构不1样,搜索引擎有可能要花更多的时间来视察、分析目前的站情况。所以应当处理好新、旧站之间的链接、内容的关联性,避免出现过量内容重复。

(4). 及时检查站友谊链接,以避免链接到的页面因做弊被惩罚。

经间期出血的中医治疗
经间期出血的中药治疗
经间期出血吃什么中成药
猜你会喜欢的
猜你会喜欢的