专访天涯首席工程师王建科:技术人要有产品观

原创
系统
51CTO编辑在2011年的QCon北京会场上对王建科进行了一次专访。整个访谈过程按话题整理成文本记录,大致分为天涯的技术发展历程、天涯界面的设计、对技术债务的观点、对技术选型的观点、对技术人员成长的建议、以及开源相关的一些话题。

【51CTO独家专访】“产品经理”这个词在近两年很火爆,其火爆程度更甚于中国互联网飞速发展之前的“站长”一词。然而在IT技术界,对产品经理有着广泛的怨言,因为国内的大部分产品经理都并非技术出身,所以常在产品设计阶段天马行空,最后在产品失败的时候埋怨技术不给力。每个产品的策划者都希望有一些像Google工程师那样,产品、技术双修的高手来把控,但却在人才市场苦寻不得,于是感叹国内这方面的双修人才为什么如此之少。不过,在中国互联网发展早期,多面手才是常态。国内的网民们大多听说过天涯社区,只是也许很多人并不知道,这个有12年历史的、现在同时在线已经超过50万人的巨大社区,在最开始几年的产品设计、开发和运维,都是由一个人来完成的。他就是现在天涯的首席工程师、天涯论坛产品总监王建科。

[[21292]]
右为天涯首席工程师王建科(天涯ID:卓锐),左为51CTO编辑杨赛

51CTO编辑在2011年的QCon北京会场上对王建科进行了一次专访。虽然说是专访,但实际上并非以问答形式进行,因为建科看了一下打印出来的采访提纲,便很投入的开始了。为了方便大家阅读,下面将整个访谈过程按话题整理成文本记录,大致分为天涯的技术发展历程、天涯界面的设计、对技术债务的观点、对技术选型的观点、对技术人员成长的建议、以及开源相关的一些话题。对于互联网行业的开发、运维和产品运营人员而言,相信王建科的分享会给你带来一些启发。

天涯的技术发展历程

王建科:天涯最初只有一个开发者,就是我。产品的设计和技术实现都是我。当时是用ASP来做,有很多困难,因为那时ASP这个技术没有文档,全靠摸索,不像现在,网上资料非常多。那是在98年底的时候。

天涯最开始上线运营的话是99年3月1号。我的ID是2月28号注册的,是天涯第一个ID。回想当时,其实对技术的要求并不很高,只要把这个东西实现出来,快速的实现出来。当时整个互联网的网民也比较少,所以用户比较少,所以对整个性能的压力也比较小。当然服务器硬件也比较差,大概是386这样的吧(更正:此处内容有误,应为586的处理器,运行系统为Windows NT 4.0,特此勘误)。

51CTO:当时服务器是托管在机房?

王建科:当时我们还没在机房,只有一条链路,好像也就是几十K吧,马上感觉不够,就搬到电信的机房去了。当时电信还没有IDC这个概念,也就是一张桌子,有个网线,连上去就行了(笑)。当时门槛是比较低的。

我们把天涯分为几个阶段,第一个就是2003年之前,刚起步的一个阶段。网民比较少,当时网友还是一个比较异类的人群,ID千奇百怪的,谈的话题别人都听不懂。所以那个时候,同时在线也就是90人左右。2002年同时在线是1000人,到2003年的时候,同时在线就差不多快要10000人了。不过2003年那时候还是只有一台服务器,又当web又当db,内存只有512MB,这个压力可想而知。

当时天涯还有一个特点,就是帖子是不分页的。一千回复也好,一万回复也好,一个页面都要全部加载进来。长帖对天涯的系统压力非常大。

51CTO:长帖对系统的压力反而比较大?

王建科:那当然,因为你那么多记录都要同时读出来。很多网站为了避免这个压力,所以就把10个回复分一页,这样每次刷页面只读10条记录。而天涯是一帖到底,这是很多网友喜欢天涯的一个地方。尤其当时都是拨号上网嘛,网速非常非常慢,所以这样一帖到底也是比较方便阅读。当时天涯聚集了很多网络写手,好比武林外传的编剧,还有那个《成都,今夜请将我遗忘》的作者,等等,在天涯连载小说,还有很多网络事件也在天涯出来。当时就是经常网聚啊,交流啊这些。

51CTO:所以你自己也是天涯的活跃用户喽。当时还是只有你一位技术人员么?

王建科:对,那时候还是只有我一个。这是2003年以前的情况。

2003年之后到2006年之间,是天涯发展的一个中期阶段。这个阶段天涯快速发展,从2003年的同时在线8000人,到2006年达到20万。快速发展我觉得有几个原因吧,第一个是大概在2005年左右,中国互联网快速增长,网民大爆发,天涯用户也跟着往上增长。还有一个就是当时天涯的媒体性凸显出来,因为天涯当时很多网络事件和话题,很多媒体就把天涯作为一个新闻源去报导,这样相当于传播天涯的品牌。

这样就导致了天涯的快速增长,而天涯的服务器这时候增长的也比较快……

51CTO:不再是一台服务器了。

王建科:嗯,不再是一台了。2004年的时候,已经是4台web,2台db了。之前已经是扛不住了,负载全都满了这么一个状况。后来我们就拆分嘛,把db拆分。天涯不是论坛分很多版块吗,所以就是把不同版块拆分到不同的服务器上。如果是所有版块在一个表里的话就很难拆分,所以我们就是一个版块对应一套表。所以如果这个服务器压力比较大的话,我们就可以把一整个版块,就是一个表,迁移到别的服务器上去。

所以db方面就是按版块拆分表这个模式。web方面就是增加。现在web方面扩展比较容易点,最早做的时候就是通过session会话把web进行拆分。

db另一个方面就是不使用连合查询。天涯最早为了优化性能有几个特点,一个就是不使用连合查询。比如有的时候你要呈现用户的名字啊,标题等信息的时候,就要去读,那么我们的做法是在产生的时候就把信息写到同一个地方去了,读的时候就只要把它一起呈现出来。这样表之间就没有太多关联,因为表关联也是十分影响性能的。而且表关联还会造成难以拆分的问题。

还有就是一帖到底这个,我们的做法就是把所有回复写到一个字段里面去。有新的回复时,就把这个内容插到字段最下面,这样呈现的时候,只要读一个字段就全出去了。这样就极大的降低了db的I/O,因为多一次读写就多一次I/O嘛,你只有一个字段,就只有一个I/O;如果100个回复分为100个字段,那就是100倍的I/O,1000个就是1000个I/O。所以天涯把所有回复合并,就极大的减少了I/O。所以天涯才能大体做到“一帖到底”,不分页。

另一个有关这个分页。很多论坛数据量很大的时候,你越往后翻页,处理的速度就越慢,效果很差了。所以天涯这边我们用where子句来分页。Where子句就是判断,你点下一页的时候,用where子句定位到这个下一页的数据。所以这样的话,你每次点下一页,每次请求在性能上的消耗都是一样的,一致的。

51CTO:就不用做n次计算了。

王建科:对,就不用再去计算我下一页这个数据到底在什么位置,尤其数据量大的时候,这就很快。当然天涯只提供了下一页的功能,而没有提供直接到某一页的功能,就只能一页一页翻这样。

另一个就是锁。很多网站采用了死锁这种机制,但是天涯呢,因为网友看内容对一致性的要求并不高,我们就都全部允许脏读。就是说你不用忽略这个更新,不用在读的时候把它锁上这样。

51CTO:因为没这个需要。

王建科:对,没必要。因为我们的数据不像银行数据,对一致性要求并不特别高,就避免了死锁这样的方式。

另外一方面就是我们也用了DNS轮询,但是DNS轮询这个效果并不是特别好,没有我们想象的那么均匀,所以后来我们就自己写了应用来控制负载均衡。

另一个就是在2003年后来压力大的时候,我们开始用Squid做页面缓存。当时因为天涯很多动态的内容,变化比较大,而用了页面缓存之后,命中率在70左右吧,还不错,减少了后端的很多压力。

这样就是2003年到06年这个阶段。

那么07年到现在呢,就是比较强调架构化这个方面。07年之前我们不是只有电信这么一个链路吗,网通用户就抱怨很多,所以就购买了网通链路,然后用F5做链路负载均衡。

然后就是做更多的页面缓存。Squid之后我们开始用Varnish,这个感觉效果更好一些。然后就是对页面进行压缩。因为天涯都是文本内容嘛,所以压缩率能达到70%,效果挺好。然后就是memcached内存缓存,就是你要往db读写的内容都先放在memcached里面,这个命中率比较高,有90%。

所以就是一步一步做过来,先解决网通用户的抱怨,再整个做优化。我们最近有个问题,就是电信的链路不太稳定,经常出现一些问题。因为海南这个位置就不在中国的骨干网上……

51CTO:边远了一点。

王建科:对,是比较边远的网络节点,中间环节过多,有很多不稳定。去年就有几次这个问题导致天涯访问慢或者是访问不了。

我们这两年也是在做一些优化,采用一些开源的东西,比如Redis,我们一直在用,这个新浪微博也是在用。Redis用处之一就是统计点击,因为用户点一次我们就要统计一次点击数,像天涯这样访问量上亿的,对db的压力就非常大,所以我们用Redis来做缓冲。原来我们要用20台来做点击的统计,那么现在只需要4台web加1台Redis就够了。

有一个案例就是去年玉树地震的时候,我们跟浙江卫视合作一个活动,就是网友回一个帖子,浙江卫视给灾区捐一块钱。然后就有很多网友刷帖啊,各种方式刷,还有那种编程序用机器刷的,最后就是大概24小时刷了一百万回复出来。像这种热点,技术上都是要做好应对的。所以去年的时候我们就开源了一个模块叫做memlink,也是一个链表,当然我们叫它轻量级的链表,比Redis更加轻量级。因为Redis是一个通用的链表,所以内存占用多些,效率方面也慢点。而Memlink的话是我们专门为列表处理开发的,很多节点进行了合并。Memlink目前我们还是在内部试用,资料我们都公布出来了,在网上可以查到。

天涯界面为什么这么简约

王建科:天涯界面为什么这么简约,因为我不懂作图嘛(笑)。我只懂颜色,色块怎么调比较柔和,所以就做了这么一个非常简约的东西出来。它简约的原因可能在于它是技术人员做的吧,美工做的话,一般比较复杂。而且,天涯这十二年,其实用户习惯也没多大变化,有时候有人说要加一些内容,有很多网友反对的,我们也觉得可能会破坏现在这样的阅读体验,因为阅读还是需要一种简练、高效的方式。所以天涯一直没有那些花花绿绿的东西,只是现在广告比较多了(笑)。

对技术债务的观点

王建科:天涯本身不是技术驱动的公司。在中国互联网做,第一位应该是运营能力,第二是产品,第三才是技术能力。用户是三者的核心,技术嘛只要别拖后腿就行(笑)。运营我觉得对一个网站/产品的竞争力是非常关键的。天涯的技术我觉得在中国互联网格局算是中等吧,比新浪啊,腾讯啊这些,还是要差不少距离。

对技术选择的观点

王建科:天涯其实很早都是低成本运营,服务器添加都非常的慎重,也都买很便宜的服务器,因为早期都没有广告收入。现在服务器就比较多了,论坛大概有130台web,三、四十台db这样。其实天涯对技术选择就是实用的就可以,按需求选择,不一定要很新的技术或超前的架构这些。都选择一些成熟的、稳定的技术,在国内外都有使用者的。我们的观点就是让技术保持朴素、简单,让运维团队的效率更高一点。

技术人员如何进步?

王建科:在中国的话,技术人员在大企业成长的空间会更大一点,在中小企业的成长空间就会小一点,这是中国技术人员面临的一个问题。

51CTO:意思是中国的技术人员还是尽量在大企业寻求发展是吗(笑)?

王建科:这个嘛(笑),比如像我的话,其实从一开始就是同时做技术和产品两条线。很多技术人员要往产品的方向转,觉得有很大困难,但是我这边就要求,技术人员也必须关注一些产品,因为接触过产品的技术人员思考交流的方式跟没接触过产品的技术人员是不一样的。

51CTO:意思是上升到需求的高度?

王建科:也不是吧,只是说他会比较贯通,他能够考虑到一个产品使用会不会有问题,技术特点方面能不能作出更漂亮的功能。像是国外很多互联网产品都是技术人员驱动的,好比Google这样的。那么我也会鼓励我们的技术人员,多关注产品,参与一些决策。否则的话,现在很多公司一个常态就是,运营人员埋怨产品,然后技术就成了推脱责任的借口,我们叫做“炮灰”(笑),很辛苦,又没有成就感。这是不利的,所以就想怎么把这部分和运营团队糅合在一起,共同做一件事情,共同关注用户。

这是知识面方面。另一方面技术人员也要扩展一下深度,还是要走专业化的路线。所以我们也鼓励技术人员进行交流,好比刘天斯,就很喜欢写博客分享一些东西,这个过程也学到很多东西。他本身在这方面钻研也比较深,在专业化方面是做的很不错的。(注:刘天斯是天涯的系统管理员,51CTO 2011年博客大赛的十强之一,前一阵子51CTO系统频道刚刚对他做过专访。)

有关开源的看法

王建科:关于开源,现在有一个很好的趋势。几年前我们都说,外国人做开源是外国人吃饱了撑着在做,中国人做开源是中国人在饿着肚子做(笑)。当然就是人们看不出开源这个东西怎么赚钱,所以就没有支撑了,没有后继的一个东西。所以那时候中国做开源没什么成功的东西,只是用。

现在看来我觉得有一些改观了,这个改观有几个方面的原因。一个就是中国互联网格局不再局限于技术了,而是有更多运营和产品。所以你可以把自己的技术公布出去,而不用担心对你的竞争造成很大压力。这样就鼓励了大家以更开放的心态来做技术。另一方面也是很明显的,就是中国的技术人员也在积累,就有了这个实力去做一些开源。再就是经验。我们经验成熟了之后,跟国外技术的对接就更加容易了。以前我们觉得国外技术好像很超前,我们这边还好像小学生一样;而现在已经改变了,中国已经是最大的互联网市场,所以差距会越来越小。运营的因素,用户量的因素,导致技术的差距越来越小,所以慢慢的中国也会有一些很好的开源项目出来。

【编辑推荐】

  1. 简评开源系统管理工具优势与隐藏成本
  2. 任务流程:详解产品设计的骨架
  3. 如何给企业选择适合的开源技术构架
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2012-07-19 13:51:12

linux运维操作系统

2010-04-25 15:29:58

Twitter可伸缩性

2009-04-10 13:35:38

吴亮《JavaScript

2019-04-15 09:07:46

码农首席工程师互联网

2013-11-19 17:27:22

多看阅读小米小说小米

2012-07-05 14:46:21

运维工程师

2022-08-01 13:49:41

首席开发管理

2019-08-28 10:23:05

技术人阿里工程师

2014-11-19 13:05:04

2022-09-19 10:36:37

Nick微软Rust

2012-05-24 09:11:52

微软云计算

2012-03-13 21:39:17

HyperEdge博科轻松网络

2010-04-20 09:37:04

英特尔架构师

2015-08-30 10:00:32

七牛云存储计算

2022-06-24 10:52:47

人工智能作业帮T前线

2016-08-29 11:33:23

京东云云计算云安全

2013-09-18 14:38:06

面试

2012-08-16 14:12:29

搜狗

2013-10-21 10:20:39

多看阅读移动阅读用户体验

2012-04-25 18:13:02

Mike开发应用避免烂应用
点赞
收藏

51CTO技术栈公众号