主持人:
网上冲浪已经成为网友们生活中必不可少的一部分,大家在网上网罗信息交流互动,网站的技术架构决定着网站的运营,目前主流的网站架构包括以下三种,即以J2EE为首的Java传统PHP架构,以及微软的ASP.net,今天我们的访谈也将围绕网站架构的一些问题展开。MySpace聚友网是一个在线社区,在这里可以结交更多的新朋友,MySpace选择了PHP和ASP.net并存的架构,今天我们邀请了MySpace的凌聪先生与我们探讨一下MySpace的架构完成。
凌聪:
大家好!
主持人:
首先介绍一下MySpace在国内发展的历程。
凌聪:
MySpace是在07年4月份在美国8月服务器迁到中国,除此之外我们还保持着跟美国用户的互联互通,MySpace目前的定位是一个泛社区,音乐产品是我们的主要产品。也有游戏和微博客等。
主持人:
现在MySpace网站注册用户大概多少?
凌聪:
1200万,活跃用户600万左右。
主持人:
每天访问量大概是什么范围?
凌聪:
2400万左右。
主持人:
这么大的访问对网站架构肯定有很高的要求,MySpace找朋友版块里,虽然有很多的图片打开速度很快,这个是怎么实现的呢?
凌聪:
找朋友版块图片很多,之前是用table做的,影响页面加载速度,现在我们采用div和DBBT形式实现,还有就是后置渲染,我们是框架完成以后用JS填充,这种效果是先切出框架再添进去。
主持人:
在对MySpace有了初步了解之后下面一起讨论一下网站的技术架构问题。前面已经提到MySpace选择的是PHP与ASP.net并存的架构,MySpace为什么要选择这样的架构呢?
凌聪:
MySpace一开始从美国迁过来的时候是.NET架构,它相对来说性能比PHP稍微快一些。另外ASP.net能够做一些并行框架。比如说访问一个Home的时候可以并发的从不同的数据源获取数据整合起来,像目前myrebuild的框架,也就是制作一个实时的myrebuild的框架,在ASP.net是很容易实现的,但是用PHP就需要制作中间件,这样第一速度比较快,可以做分布式的框架,另外ASP.net可以比较容易集成自己语言的特性。现在来说,我们的缓存系统是我们自己build的,它也是保证我们网站性能很重要的一部分。传统的memory cache都是C写的,但是我们的是用.NET写的,它可以集成C++的元素。现在这个架构是扩展性很高存储性能比较高框架。PHP比较容易学开发速度比较快,上手比较快,相对来说开发成本比较低,对于一些快速开发应用用PHP合适,所以我们两种架构并存。现在新开发的项目一般用PHP开发,因为开发速度相对快一些。
主持人:
在网站中不同的部分选择不同的架构吗?
凌聪:
对。性能比较高的用ASP.net去做,比如home,blog,SNS核心模块是用ASP.net做,比如音乐是用PHP做的,它们之间的通信由中间件来实现。
主持人:
这两个会用不同的东西实现吗?
凌聪:
现在ASP.net主要在Windows上做的,PHP用linux做的。
主持人:
目前ASP.net用的是什么版本?
凌聪:
3.5SPE版本。
主持人:
您在使用ASP.net进行网站开发过程中有没有遇到什么问题或者困难,您是怎么解决的呢?
凌聪:
ASP.net的困难比较多,第一ASP.net因为它是一个编译执行的语言,这就很痛苦。比如今天发现某个字错了,要改这个字,会有一个比较麻烦的动作,更改一个字的话页面会出编译,这会影响它的速度。另外ASP.net IDE很多人喜欢QBI代码,很多人写到CS代码里,结果改一个东西可能要编译,编译再部署的话会直接影响网站速度。现在我们解决的方式是增长了部署的流程,我们做了自动化部署的脚本,是分批部署,三分之一机器下线部署,预热,然后再上线。现在是自动化部署的过程,整个过程大概是20分钟。美国那边也是这样的,它的机器更多,大概两个小时部署完所有的机器,大概几千台机器。所以部署是一个很大的问题,ASP.net和JAVA是一样的,因为它的编译语言。PHP部署相当快就没有这个问题。
另外,在并行开发上ASP.net必须走一个build的过程,把代码merger起来。我们做了一个自动build脚本,开发人员把代码确定到TFS里面,由一个工程师从开发源代码服务器同步到部署的服务器,部署服务器做自动编译的脚步来自动部署,这样要做大量的工具开发,另外一个是要做非常多大量的部署脚本。
主持人:
目前还是有很多网友在用ASP.net进行网站开发。我们也希望您分享一些这方面的经验让大家可以借鉴一下。
凌聪:
我建议大家不要用ASP.net Sever control,ASP.net里面会有一些state数据,数据量过大,这些数据会增加客户端的传输量,所以我建议大家少用或者不用ASP.net Sever control。ASP.net MVC正在废弃这个框架,这是很明智的。
MySpace的cashe系统还是比较先进的,cashe系统主要分为三层,一层叫RELAY,RELAY是做一消息传输的机制,比如要存储某一类型的数据,首先会找到哪组服务器存储这个数据,它会把数据扔到这组服务器上。RELAY比如要做一个存储的消息的传送机制,把这个数据拿出来,会在这组服务器挑一个节点把这个数据吐出来给你,如果存储一个数据找到任何一个结点,这个结点会做异布分发。现在网站用的比如一个数据在一个单点的的话,这个结点会从一个地方去拿,如果这个点down了就要从数据库去读取,我们现在的RELAY结构做的是多点供应的。而在cashe系统中, 消息传递的系统是很重要的,消息传递系统一个要支持类型系统。
另外要支持分布式冗余存储,还有如果数据量大的话还要支持不同模式的分块,我们支持MODE模式、cashe模式、renge模式分块,如:我们按用户ID分,比如0-1000万是一个区,1-2千万是另一个区。有多种模式的算法,这是消息传输机制。
我们的框架还支持多种存储components,我们下面一层就是存储,我们还有不同的数据可以存到不同的数据存储区,不同存储区有性能的区别,比如我们有一个最快叫ImageMemory storage,支持的ops大概是66万次每秒,这时相当快的。比它差一点的是28万次每秒。我们已经引入了Memory components,现在做的是7万次ops每秒,我们可以按照不同的需求存储到不同的存储区域。比如我们可以最快的拿取用户的基本信息,这个可能要求很快,我们会放到最快的存储里。而其他的非重要信息可以存储到速度差一些的存储区里。我们的存储组件多种多样可以按照不同的需求做不同的存储组件。
下一层叫计算Component,我的优势所在。我们可以在存储结点上做计算,离存储结点最近的地方做计算,这样可以防止大量网络消耗。很多第三方网站用的是把所有的数据吐出来做计算,这样会带来很多计算消耗。我们在上面做了计算组件可以把数据做整合,直接进行数据过滤,这样可以防止过多的数据传输到外面,减少网络带宽的消耗。这是我们一个比较出彩的部分。就是我们直接做矩形计算,因为就近计算有很大变化,这个如果用C做的数据有很大的差异,如果用ASP.net做的话还是有能力的。
主持人:
我听您讲的我理解的就是咱们做了一个过滤器对数据进行不同的划分,一方面节约了网络的带宽资源,另一方面哪些信息比较急可以先进行发布或者存储?
凌聪:
也不是这样比如我做的过滤是一种计算,运算是一种计算,计算组件这部分是负责要做一些实时的计算,比如说我要计算我的好友在线人数,就把好友ID直接传进来,然后直接把存储上计算出来,不会像传统的结构首先把服务器上的数据全部拿出来,然后在WEB服务器上做计算,这样很浪费带宽资源。我们是直接在计算组件上做计算。另外myrebuilds框架,我们前面会把数据做分发,客户端组件会把这些数据并发的发到各个组件,数据采集完了做一个rebuilds的过程,然后把数量数据吐出来给用户。这是三层,前面那层是消息传递层relay,有一层是存储层,存储层上面有一层计算组件是计算这些数据的。如果不需要对数据进行计算只是简单存储的话,这组件就可以没有。我们引进的概念叫就近概念。
主持人:
现在有一种新技术叫AJAX技术,能简单介绍一下吗?
凌聪:
我们网站使用主要是强用户交互上,比如发一个微博客,直接显示在页面上,这不需要做太多的页面交互。因为这样对用户感受来说很差,每次要刷页面。另外是在带宽的节省上,因为每刷一次页面带来的问题会增加很多传输量。
主持人:
AJAX技术主要实现什么?
凌聪:
实现页面不刷新,主要目的是提高用户体验度,以及可以节省带宽。
主持人:
刚刚您已经提到MySpace上面应用了一些部分,除了这些部分之外AJAX应用对咱们网站带来了哪些实际应用?用户体验方面呢?
凌聪:
用户会感觉到都在一个页面上完成他的工作,对他的感受会好很多。比如说我上传一个文件,那个文件很大,可能一个图片最大是5兆,如果1兆带宽可用就是100K左右,要传50秒,死等的话会有一个问题,我们有一个圈不断滚,这样给大家一个直观的感受,不断告诉他上传了多少。另外我们的加好友之类的都是用AJAX去做的,这就是提高用户的功能性还是比较直观的。
主持人:
ASP.net框架前面已经聊了很多了,您希望这个框架再有哪些方面的改进吗?
凌聪:
第一,现在ASP.net第一次打开速度还是很慢的,这个有待提高。第二,可以让它先出来,高亮的后面加都没问题,现在在2008上打开一个页面做开发还是挺慢的。另外ASP.net原来Sever control的设计想法很好,实现起来很一般,我觉得这个框架可能考虑用其他东西替代,比如ASP.net MVC这个框架还是不错的。我们现在的框架是MOTOOLS的,最好能对这块有支持。
主持人:
最后请凌聪先生给我们介绍一下MySpace网站技术架构升级方面有哪些计划?
凌聪:
第一,我们网站可能会引入云计算。云计算主要是做用户数据的分析,其实用户数据分析是一个金矿,但是这个金矿必须有好的工具去挖,用比较好的机制筛选出来。因为我们网站每天访问数据量挺大的,几个T的数据,怎么统计呢?可能是要有一个分布式计算的平台。MySpace自己有一个分布计算的平台,我们正在看这个框架和另外一个do框架对分布式计算的程序写代码的难度以及可靠性。另外,做完云计算平台之后我们可以把日志放进去做一数据仓库然后做用户分析,然后我们可以找出好友的亲密度,这样有利于我们做好友推荐。
做完这个东西之后我们利用这些东西做Feed的分析,Feed对我来说很我可能是没有用的。我们希望找到一个更智能的方法让他找到他更想起要东西。比如可以通过他的点击,比如博客或者玩音乐推他相关的东西,这样可能更适合。数据分析包括用户的缺省,包括用户性等,所以用户数据也是非常重要的事儿。
另外要发力用户客户端,现在手机用户也很多,我们现在有一个声色微博可以说一句话发到语聊上面去,但是有的人是话痨,他喜欢说很长,而移动限制了300k,有些手机只支持50K,用户觉得很不爽,300k还可以说三分钟,50k只能说1分钟,他就开始抱怨觉得这个怎么传这么少,这也没有办法,是彩信的限制,这也是我们为什么要做客户端很重要的原因。
主持人:
为了让网友们有更好的体验,我们的技术人员尽心尽力在做开发了。非常感谢凌聪先生与我们探讨了这么多网站开发方面的经验和技术,谢谢大家!