在2010年的QCon北京大会上,InfoQ的编辑对人人网产品技术高级总监黄晶进行了采访,其中他谈到了关于人人网从校内到现在所做的架构上的转变,还谈到了人人网创建并使用的两个开源项目。
黄晶,清华大学计算机系硕士,曾在天人互动游戏公司、空中网、千橡互动任职,现任千橡互动集团人人网产品技术高级总监,负责人人网产品规划和研发。投身 Web2.0和SNS事业,秉承以用户价值为核心的理念,推崇以简约架构取得最大收益的技术路线,积极推动互联网开放平台和开源项目的发展和应用,带领人人网产品技术团队,实现人人网的稳健高速发展。
InfoQ:大家好,经常上SNS社区的人,都应该知道校内网,而现在校内已经改名叫做人人了。今天我们有幸请到了人人网的黄晶老师,来跟我们分享一下人人网在技术架构方面以及他们最近做了两个开源项目相关的一些经验和知识。
黄晶老师你好。
黄晶(以下简称黄):InfoQ的朋友们大家好。
InfoQ:大家都知道,原来人人网的名字叫校内,而现在叫人人,从最早的校内到现在的人人网,在这个不断进展的过程中,您在架构上做了哪些改进呢?
黄:因为校内的发展过程非常迅速,几年之内翻了好多倍,它的技术架构也随着这个需求也有很大的变化。
在开始的时候,校内是使用比较简单、比较典型的技术方案来实现的一个架构。然后,随着规模的扩大和一些特殊的应用的场景的需要,我们逐步地、越来越多地用到了自己开发的一些系统,以及自己开发的一些框架。比如说我们有一套非常完善、非常庞大而完整的中间层系统和架构,还有用户处理的系统,这些都完全是由我们自己开发的,而没有其它可以借鉴的一些产品。这样的系统可能我们在几年的积累下,已经逐步完善。像存储,以前用的是简单的数据,分布式存储。而对于WEB开发的框架我们也根据自己产品的需要,开发了一套自己特有的WEB开发框架,其中有一些系统,我们考虑是为更多人所用,大家一起来完善它,就考虑把一些系统开源化,让大家一块把这些做得更好。
InfoQ:应该说人人网的技术实力方面应该是非常强,而且对技术方面的投入也非常大的。
黄:我们在技术方面做了非常大的投入,我们公司的文化叫做极致文化,就是特别赞赏那种钻在技术里面,不考虑其它事情,想把技术做到极致的那种人。
InfoQ:您以及您带领的团队里会有很多很多的这种人?
黄:对,我们很多人都是那种每天钻在技术里面非常陶醉的那种人,我们觉得如果想把SNS这个事情做好的话,是需要很多这样的人。
InfoQ:都是非常快乐的程序员,我想问一下咱们现在的架构您觉得里面做的比较完美,比较满意的是什么地方?
黄:我觉得我们有一个比较独特的、自己开发的中间层系统,这个系统完成了大量的后端服务器需要处理的一些工作,包括缓存,包括一些复杂的业务处理,包括搜索也集成在里面。这些系统都放在我们这样一个中间层系统里面,这个中间层系统本身具有高可用性,可以灵活的拓展,增加服务,增加相对性的服务,可以用很少的代码量来完成里面的很多的分布式管理和内存方面的分配管理,这些都做了很长时间的积累,这个可能是我们比较大的技术方面的积累。
InfoQ:那咱们维护工作平时复不复杂?
黄:维护工作还是有一定复杂度,因为我们的业务是不能中断的,我们经常有很多的维护工作,即使是你的系统设计可以在高可用性下切换,你也必须在低负载的情况下去切换,那样风险比较低,我们很多的工作就是,除了开发之外,还经常半夜里要更新系统,要切换服务器各个方面的管理工作,其实还是比较辛苦。如果把这件事做成自动化有很大的风险,因为里面有很多会误判的情况下会有一些振荡,这个风险很大,我们还是半自动的一个过程。
InfoQ:对咱们的用户特别负责的态度。
黄:我们工程师很多都是夜猫子。
InfoQ:那您觉得现在的系统里面会对有一些方面还不是很满意,需要改进的地方呢?
黄:我觉得我们现在是有一些地方我们的系统还需要完善,比如说在某一些数据一致性方面,我们在不同的地方之间还是不能保持很高的数据一致性,这样对以后变成多个机房工作镜像同步关系的时候,可能会有一些阻碍。我们将来的发展方向应该是会拥有多个核心节点的机房,我们要解决这个问题,首先就要解决数据一致性性,也就是数据同步方面的一些问题,这需要一个比较好的分布式系统的设计去完成。
InfoQ:也就是说以后咱们人人网的服务器,不一定全部集中在北京,可能集中在全国各地,然后大家协同来做分布式的操作?
黄:因为考虑如果是一个地方,现在地震比较频繁,如果是地震或者是火灾的话,你的核心节点不能只依赖一个地区。
InfoQ:我刚才跟那个黄晶老师交流的时候,黄晶老师提到,最近在做两个开源项目,这两个开源项目您给我们简单介绍一下吧?
黄:这两个项目其实也是我们在业务的需求下催生的,一个开源项目是分布式的key-value存储系统。这个项目其实有很多类似的开源项目,包括这个Cassandra等等,那么我们也是在经过需求分析之后,觉得这些项目多少都无法完全适合我们的场景,所以对于我们这个项目,我们把它做成一个比较灵活的,他下面的存储是可以用文件系统,可以用MySQL,也可以用Cassandra这样的系统,上层的管理要满足我们的需要,待会我会讲一下这个开源项目,我们也有这个开源项目的介绍,我们也有这个团队的一个博客,utc.renren.COM,大家感兴趣的话可以去看一下。另外一个我们打算开源的项目,是我们的一个Web开发框架,这个开发框架是Rest风格,比较简洁,比较适用于互联网的产品,它可以大大的减少开发controller这个层面的代码量,然后可以非常方便的去配置一些像O-R Mapping这样的机制,然后与它相结合。我们还有另外一个在Model层面的,很分散的、分片的大型数据库集群,当访问数据库的时候,也有和它结合很好的另外一个组件,将来如果是能够做的非常通用的话,可配置的话,我们也会考虑到开源。它是类似于MySQL Proxy访问数据库中间层的一个组件,它会负责把这些请求分发到数据库集群中。这几个结合起来,做比较规定规模的Web应用,应该是比较适合的。所以我们把这个项目开源,也是希望更多的人能够来使用和完善它,能够让更多的人在这个方面少走一些弯路,我们这几年探索过来,经过非常大量的重构。
InfoQ:您希望把你们宝贵的经验,宝贵的知识和全国甚至全世界的程序员一起来分享。
黄:因为我们也用到了很多开源的项目,基本上在开源这个框架上面做起来的,所以我们觉得这是一个很好的事情,大家一起分享一起来完善一些东西。
InfoQ:我想知道咱们的key-value系统,是基于什么样的需求呢?人人网和FACEBOOK,在什么地方差别特别大,导致咱们觉得他们那种解决方案不适合人人网呢?
黄:对于分布式系统,有一个理论叫CAP理论,有的系统可能在C和P方面做的比较好,这CAP三个,一个是高可用性,一个是节点容错性,一个是一致性,很难做到三个同时满足的,必须有折中。有的时候,有些系统在不同的取舍方面会有一些区别,这个区别就导致可能有时并不是非常适合,我们自己也希望能够对一个系统做到足够熟悉,在需要的情况下,我们可以直接去改造它的核心部分。基于这些考虑,我们就根据自己的需求,同时去学习别人的思想,做了一个新的系统。
InfoQ:在CAP这三个中间,做了针对人人网的最好的平衡。
黄:对。
InfoQ:好的,感谢黄晶老师接受我们的采访。谢谢!
黄:谢谢。