公告:网址大全导航目录www.btv85.com为各位站长提供免费收录网站的服务,VIP会员每天提交网站30、文章30免审核,快审服务(10元/站),可自助充值发布。

点击这里在线咨询客服 点击这里在线咨询客服
新站提交
  • 网站:223084
  • 待审:0
  • 小程序:16453
  • 文章:25975
  • 会员:239

今天BTV导航网的小编为你讲一下了解知乎网站的架构演进史相关的内容。

初期架构选型

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

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

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

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

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

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

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

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

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

日志系统

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

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

Kids参考了Scribe的思路。Kdis在每台服务器上可以配置成Agent或 Server。Agent直接接受来自应用的消息,把消息汇集之后,可以打给下一个Agent或者直接打给中心Server。订阅日志时,可以从 Server上获取,也可以从中心节点的一些Agent上获取。
2015127103035836.jpg (650×630)

具体细节如下图所示:
2015127103058565.jpg (1088×786)

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

Kids已经开源,放到了Github上。

事件驱动的架构

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

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

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

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

页面渲染优化

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

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

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

面向服务的架构(SOA)

随着知乎的功能越来越庞杂,整个系统也越来越大。知乎是怎么做的服务化呢?

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

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

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

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

这是引入服务化之后整体的架构。
2015127103152651.jpg (1080×798)

而目前在产品方面,知乎保留着以下几个重点:
1.基础模块(1 问题-n 回答-n 评论模块)

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

在简单罗列的线性信息海洋中,用户汲取其所需信息的成本太高;
信息流如同大河奔流,那些有挖掘价值的信息点稍纵即逝,即信息价值被严重挥霍;
用户不能将有价值的信息点从信息大河里“舀”出来,信息可见而不可用,无法产生长效作用。
知乎的产品设计者很好地意识到了这些潜在的“灾难”,并对每个问题点做出了针对性的产品设计方案,下面木柄逐一展开分析。

2.话题模块

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

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

3.发现模块

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

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

4.收藏模块

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

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

5.知乎日报模块

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


通过对了解知乎网站的架构演进史的详细介绍,希望对你有所帮助,我们提供了更多和了解知乎网站的架构演进史类似的相关内容推荐,可以你更全面的帮助你解决问题。我们BTV85网址导航还提供网址收录服务,你可以注册提交你的网站信息,帮你引导搜索引擎蜘蛛,同时还有网站SEO优化交流微信群,里面很多SEO高手和大咖,加友链,可以免费进群。

了解知乎网站的架构演进史同类内容推荐:
  • chatgpt网站崩了

    因为最近chatGPT太过于火爆,很多用户还没来得及使用就被提示了网站崩溃,很明显是因为使用的用户太多了造成了 2023-02-13

  • 网站优化是排名重要依然是流量重要

    本文简单解释了关键词排名和网站流量的重要性,总之来说排名和流量都是网站优化中非常重要的指标,我们不应该厚 2022-10-12

  • 在网站建设初期应该注意哪些问题

    总之来说,网站建设之初需要注意的问题很多,尤其是很多具体的细节需要注意。另外大家要认识到网站结构对于SEO 2022-10-12

  • zblog如何重置网站

    zblog重置网站很简单,只要删除zb_users/c_option.php这个文件,就可以进行重新的安装了。要注意如果重新安装,之 2022-10-12

  • wordpress做企业网站能够吗

    关于wordpress和企业网站的问题,笔者简单的从两个方面做了介绍。可以看到wordpress是可以并且适合搭建企业网 2022-10-12

  • 怎么提高网站点击率

    同样的流量,同样的更新,同样的外链,为什么有的网站点击率很高,有的网站点击率很低,点击率高的网站都有哪些特点,点 2022-10-12

  • 如何设计企业网站才能提高转化率

    一个优秀的网页设计,能够让浏览该网页的用户一直停留在网站当中,并且能够激发该用户消费欲望,使企业产品销售业 2022-10-12

  • 手机版网站怎么做的,手机端网站怎么做

    手机版网站指的是能够适合手机浏览的网站,所以在制作的时候尤其要注意尺寸大小,宽度上通常使用百分百。比如说 2022-10-12

  • 网站备案要多久,阿里云网站备案要多久

    相信通过本文的介绍,大家都能知道网站备案要多久,至于阿里云网站备案要多久,这跟在其他平台备案没有根本的区别 2022-10-12

  • 建一个网站须要什么

    总之来说就是域名、服务器和程序。如果大家不懂网站代码,建议找朋友来帮助;如果是企业要建设网站,在没有专业技 2022-10-12

  •   admin

    注册时间:

    网站:0 个   小程序:0 个  文章:0 篇

    • 223084

      网站

    • 16453

      小程序

    • 25975

      文章

    • 239

      会员

    赶快注册账号,推广您的网站吧!
    热门网站
    最新入驻小程序

    小朋友猜谜语2021-05-24

    小朋友猜谜语是一款学习教育类的

    球比分2021-05-24

    球比分是一款体育运动类的小程序

    匠人名片2021-05-24

    匠人名片是一款交友社交类的小程

    知晴2021-05-24

    知晴是一款生活服务类的小程序应

    优惠券查询工具2021-05-24

    优惠券查询工具是一款其他工具类

    成语词典汉字拼音故事大全字典2021-05-24

    成语词典汉字拼音故事大全字典是